基于51单片机的lcd1602液晶显示的计算器可编辑.docx
《基于51单片机的lcd1602液晶显示的计算器可编辑.docx》由会员分享,可在线阅读,更多相关《基于51单片机的lcd1602液晶显示的计算器可编辑.docx(11页珍藏版)》请在冰豆网上搜索。
基于51单片机的lcd1602液晶显示的计算器可编辑
基于51单片机的lcd_1602液晶显示的计算器
基于51单片机的lcd1602液晶显示的计算器
/****************************************************************
阿斌独家制作:
计算器,1602液晶显示可计算10以下数加减乘除可连续运算,最大显示结果数值65536
*****************************************************************/
键盘设置:
液晶初始显示:
运算显示:
主程序:
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitlcdenP2^2;
sbitlcdrwP2^1;
sbitlcdrsP2^0;
ucharnum,temp,jia0,jian0,cheng0,chu0,qing0;
uintkey,key1,shu;
ucharfuhao,flag1,flag0;
uchartable[]
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x0;
voiddelayuintz
uintx,y;
forxz;x0;x--
fory110;y0;y--;
bitlcd_bz
bitresult;
lcdrs0;
lcdrw1;
lcden1;
_nop_;
_nop_;
_nop_;
_nop_;
resultbitP0&0x80;lcden0;
returnresult;
voidwrite_comucharcom
whilelcd_bz;
lcdrs0;
lcden0;
lcdrw0;
P0com;
delay5;
lcden1;
delay5;
lcden0;
voidwrite_dateuchardate
whilelcd_bz;
lcdrs1;
lcden0;
lcdrw0;
P0date;
delay5;
lcden1;
delay5;
lcden0;
voidlcd_init
lcden0;write_com0x38;
write_com0x0c;
write_com0x06;
write_com0x01;
voidkeyscan
P30xfe;
tempP3;
temptemp&0xf0;
whiletemp!
0xf0
delay5;
tempP3;
temptemp&0xf0;
whiletemp!
0xf0
tempP3;
switchtemp
case0xee:
key1;num0;break;
case0xde:
key2;num0;break;
case0xbe:
key3;num0;break;
case0x7e:
num1;break;//加号
whiletemp!
0xf0
tempP3;
temptemp&0xf0;
P30xfd;
tempP3;
temptemp&0xf0;
whiletemp!
0xf0
delay5;
tempP3;
temptemp&0xf0;
whiletemp!
0xf0
tempP3;
switchtemp
case0xed:
key4;num0;break;
case0xdd:
key5;num0;break;
case0xbd:
key6;num0;break;
case0x7d:
num2;break;//减号
whiletemp!
0xf0
tempP3;
temptemp&0xf0;
P30xfb;
tempP3;
temptemp&0xf0;
whiletemp!
0xf0
delay5;
tempP3;
temptemp&0xf0;
whiletemp!
0xf0
tempP3;
switchtemp
case0xeb:
key7;num0;break;
case0xdb:
key8;num0;break;
case0xbb:
key9;num0;break;
case0x7b:
num3;break;//乘号
whiletemp!
0xf0
tempP3;
temptemp&0xf0;
P30xf7;
tempP3;
temptemp&0xf0;
whiletemp!
0xf0
delay5;
tempP3;
temptemp&0xf0;
whiletemp!
0xf0
tempP3;
switchtemp
case0xe7:
key0;num0;break;
case0xd7:
num6;break;//清除
case0xb7:
num5;break;//等于号
case0x77:
num4;break;//除号
whiletemp!
0xf0
tempP3;
temptemp&0xf0;
voiddisplay0uintshu
uintge;
geshu;
write_date0x30+ge;
voiddisplay1uintshu
uintshi,ge;
shishu/10;
geshu%10;
write_date0x30+shi;
write_date0x30+ge;
voiddisplay2uintshu
uintbai,shi,ge;
baishu/100;
shishu%100/10;
geshu%10;
write_date0x30+bai;
write_date0x30+shi;
write_date0x30+ge;
voiddisplay3uintshu
uintqian,bai,shi,ge;
qianshu/1000;
baishu%1000/100;
shishu%100/10;
geshu%10;write_date0x30+qian;
write_date0x30+bai;
write_date0x30+shi;
write_date0x30+ge;
voiddisplay4uintshu
uintwan,qian,bai,shi,ge;
wanshu/10000;
qianshu%10000/1000;
baishu%1000/100;
shishu%100/10;
geshu%10;write_date0x30+wan;
write_date0x30+qian;
write_date0x30+bai;
write_date0x30+shi;
write_date0x30+ge;
voiddisplay_key1uintresult
ifflag11
write_com0x01;
flag10;
shuresult;
write_com0x80;
ifresult10
display0result;
ifresult10&&result100
display1result;
ifresult100&&result1000
display2result;
ifresult1000&&result10000
display3result;
ifresult10000
display4result;
voiddis_keyresult
ifresult10
display0result;
ifresult10&&result100
display1result;
ifresult100&&result1000
display2result;
ifresult1000&&result10000
display3result;
ifresult10000
display4result;
voiddisplay_keyuintresult
ifshu10
write_com0x80+2;
dis_keyresult;
ifshu10&&shu100
write_com0x80+3;
dis_keyresult;
ifshu100&&shu1000
write_com0x80+4;
dis_keyresult;
ifshu1000&&shu10000
write_com0x80+5;
dis_keyresult;
ifshu10000
write_com0x80+6;
dis_keyresult;
voiddisplay_fuhao
switchfuhao
case1:
write_date0x2b;break;
case2:
write_date0x2d;break;
case3:
write_date0x2a;break;
case4:
write_date0x2f;break;
fuhao0;
voidfuhao_pan
ifflag11
flag10;
write_com0x01;
write_com0x80+1;
display_fuhao;
ifshu10
write_com0x80+1;
ifshu10&&shu100
write_com0x80+2;
ifshu100&&shu1000
write_com0x80+3;
ifshu1000&&shu10000
write_com0x80+4;
ifshu10000
write_com0x80+5;
display_fuhao;
flag1;
voidfuhao_deng
write_com0x80+0x40;
write_date0x3d;
flag11;
flag0;
voiddisplay_resultuintresult
write_com0x80+0x40+1;
ifresult10
display0result;
ifresult10&&result100
display1result;
ifresult100&&result1000
display2result;
ifresult1000&&result10000
display3result;
ifresult10000
display4result;
voidjia1
jia1;
jianchengchuqing0;
key1key;
fuhao1;
fuhao_pan;
voidjian1
jian1;
jiachengchuqing0;
key1key;
fuhao2;
fuhao_pan;
voidcheng1
cheng1;
jiajianchuqing0;
key1key;
fuhao3;
fuhao_pan;
voidchu1
chu1;
jiajianchengqing0;
key1key;
fuhao4;
fuhao_pan;
voidqing1
qing1;
jiajianchengchu0;
key1key0;
voiddeng1
ifjia
keykey1+key;
ifjian
keykey1-key;
ifcheng
keykey1*key;
ifchu
keykey1/key;
fuhao_deng;
display_resultkey;
jiajianchengchuqing0;
voiddeal
switchnum
case0:
switchflag
case0:
display_ke