當前位置:首頁 > 單片機 > 單片機
[導讀]按鍵和液晶,可以組成我們最簡易的計算器。下面我們來寫一個簡易整數(shù)計算器提供給大家學習。為了讓程序不過于復雜,我們這個計算器不考慮連加,連減等連續(xù)計算,不考慮小數(shù)情況。加減乘除分別用上下左右來替代,回車

按鍵和液晶,可以組成我們最簡易的計算器。下面我們來寫一個簡易整數(shù)計算器提供給大家學習。為了讓程序不過于復雜,我們這個計算器不考慮連加,連減等連續(xù)計算,不考慮小數(shù)情況。加減乘除分別用上下左右來替代,回車表示等于,ESC 表示歸 0。程序共分為三部分,一部分是 1602 液晶顯示,一部分是按鍵動作和掃描,一部分是主函數(shù)功能。

/***************************Lcd1602.c 文件程序源代碼*****************************/

#include

#define LCD1602_DB P0

sbit LCD1602_RS = P1^0;

sbit LCD1602_RW = P1^1;

sbit LCD1602_E = P1^5;

/* 等待液晶準備好 */

void LcdWaitReady(){

unsigned char sta;

LCD1602_DB = 0xFF;

LCD1602_RS = 0;

LCD1602_RW = 1;

do {

LCD1602_E = 1;

sta = LCD1602_DB; //讀取狀態(tài)字

LCD1602_E = 0;

//bit7 等于 1 表示液晶正忙,重復檢測直到其等于 0 為止

}while (sta & 0x80);

}

/* 向 LCD1602 液晶寫入一字節(jié)命令,cmd-待寫入命令值 */

void LcdWriteCmd(unsigned char cmd){

LcdWaitReady();

LCD1602_RS = 0;

LCD1602_RW = 0;

LCD1602_DB = cmd;

LCD1602_E = 1;

LCD1602_E = 0;

}

/* 向 LCD1602 液晶寫入一字節(jié)數(shù)據(jù),dat-待寫入數(shù)據(jù)值 */

void LcdWriteDat(unsigned char dat){

LcdWaitReady();

LCD1602_RS = 1;

LCD1602_RW = 0;

LCD1602_DB = dat;

LCD1602_E = 1;

LCD1602_E = 0;

}

/* 設置顯示 RAM 起始地址,亦即光標位置,(x,y)-對應屏幕上的字符坐標 */

void LcdSetCursor(unsigned char x, unsigned char y){

unsigned char addr;

if (y == 0){ //由輸入的屏幕坐標計算顯示 RAM 的地址

addr = 0x00 + x; //第一行字符地址從 0x00 起始

}else{

addr = 0x40 + x; //第二行字符地址從 0x40 起始

}

LcdWriteCmd(addr | 0x80); //設置 RAM 地址

}

/* 在液晶上顯示字符串,(x,y)-對應屏幕上的起始坐標,str-字符串指針 */

void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){

LcdSetCursor(x, y); //設置起始地址

while (*str != '