基于51单片机的lcd1602液晶显示的计算器.docx

上传人:b****0 文档编号:310102 上传时间:2022-10-08 格式:DOCX 页数:16 大小:29.32KB
下载 相关 举报
基于51单片机的lcd1602液晶显示的计算器.docx_第1页
第1页 / 共16页
基于51单片机的lcd1602液晶显示的计算器.docx_第2页
第2页 / 共16页
基于51单片机的lcd1602液晶显示的计算器.docx_第3页
第3页 / 共16页
基于51单片机的lcd1602液晶显示的计算器.docx_第4页
第4页 / 共16页
基于51单片机的lcd1602液晶显示的计算器.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于51单片机的lcd1602液晶显示的计算器.docx

《基于51单片机的lcd1602液晶显示的计算器.docx》由会员分享,可在线阅读,更多相关《基于51单片机的lcd1602液晶显示的计算器.docx(16页珍藏版)》请在冰豆网上搜索。

基于51单片机的lcd1602液晶显示的计算器.docx

基于51单片机的lcd1602液晶显示的计算器

基于51单片机的lcd1602液晶显示的计算器

/****************************************************************

阿斌独家制作:

计算器,1602液晶显示

可计算10以下数加减乘除

可连续运算,最大显示结果数值65536

*****************************************************************/

键盘设置:

液晶初始显示:

运算显示:

主程序:

#include

#include#defineuintunsignedint#defineucharunsignedcharsbitlcden=P2^2;

sbitlcdrw=P2^1;

sbitlcdrs=P2^0;

ucharnum,temp,jia=0,jian=0,cheng=0,chu=0,qing=0;

uintkey,key1,shu;

ucharfuhao,flag1,flag=0;uchartable[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x0};voiddelay(uintz){

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);}

bitlcd_bz()

{

bitresult;

lcdrs=0;

lcdrw=1;

lcden=1;

_nop_();

_nop_();

_nop_();

_nop_();

result=(bit)(P0&0x80);

lcden=0;

returnresult;}

voidwrite_com(ucharcom)

{

while(lcd_bz());

lcdrs=0;

lcden=0;

lcdrw=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;}

voidwrite_date(uchardate)

{

while(lcd_bz());

lcdrs=1;

lcden=0;

lcdrw=0;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidlcd_init(){

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);}

voidkeyscan(){

P3=0xfe;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xee:

key=1;num=0;break;

case0xde:

key=2;num=0;break;

case0xbe:

key=3;num=0;break;

case0x7e:

num=1;break;//加号

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xed:

key=4;num=0;break;

case0xdd:

key=5;num=0;break;

case0xbd:

key=6;num=0;break;

case0x7d:

num=2;break;//减号

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xeb:

key=7;num=0;break;

case0xdb:

key=8;num=0;break;

case0xbb:

key=9;num=0;break;

case0x7b:

num=3;break;//乘号

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xf7;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xe7:

key=0;num=0;break;

case0xd7:

num=6;break;//清除

case0xb7:

num=5;break;//等于号

case0x77:

num=4;break;//除号

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

}

voiddisplay0(uintshu){

uintge;

ge=shu;

write_date(0x30+ge);}

voiddisplay1(uintshu){

uintshi,ge;

shi=shu/10;

ge=shu%10;

write_date(0x30+shi);

write_date(0x30+ge);}

voiddisplay2(uintshu){

uintbai,shi,ge;

bai=shu/100;

shi=shu%100/10;

ge=shu%10;

write_date(0x30+bai);

write_date(0x30+shi);

write_date(0x30+ge);}

voiddisplay3(uintshu){

uintqian,bai,shi,ge;

qian=shu/1000;

bai=shu%1000/100;

shi=shu%100/10;

ge=shu%10;

write_date(0x30+qian);

write_date(0x30+bai);

write_date(0x30+shi);

write_date(0x30+ge);}

voiddisplay4(uintshu){

uintwan,qian,bai,shi,ge;

wan=shu/10000;

qian=shu%10000/1000;

bai=shu%1000/100;

shi=shu%100/10;

ge=shu%10;

write_date(0x30+wan);

write_date(0x30+qian);

write_date(0x30+bai);

write_date(0x30+shi);

write_date(0x30+ge);}

voiddisplay_key1(uintresult)

{

if(flag1==1)

{

write_com(0x01);

flag1=0;

}

shu=result;

write_com(0x80);

if(result<10)

display0(result);

if(result>=10&&result<100)

display1(result);

if(result>=100&&result<1000)

display2(result);

if(result>=1000&&result<10000)

display3(result);

if(result>=10000)

display4(result);

}

voiddis_key(result)

{

if(result<10)

display0(result);

if(result>=10&&result<100)

display1(result);

if(result>=100&&result<1000)

display2(result);

if(result>=1000&&result<10000)

display3(result);

if(result>=10000)

display4(result);

}

voiddisplay_key(uintresult){

if(shu<10)

{

write_com(0x80+2);

dis_key(result);

}

if(shu>=10&&shu<100)

{

write_com(0x80+3);

dis_key(result);

}

if(shu>=100&&shu<1000)

{

write_com(0x80+4);

dis_key(result);

}

if(shu>=1000&&shu<10000)

{

write_com(0x80+5);

dis_key(result);

}

if(shu>=10000)

{

write_com(0x80+6);

dis_key(result);

}

}

voiddisplay_fuhao()

{

switch(fuhao)

{

case1:

write_date(0x2b);break;

case2:

write_date(0x2d);break;

case3:

write_date(0x2a);break;

case4:

write_date(0x2f);break;

}

fuhao=0;

}

voidfuhao_pan()

{

if(flag1==1)

{

flag1=0;

write_com(0x01);

write_com(0x80+1);

display_fuhao();

}

if(shu<10)

write_com(0x80+1);

if(shu>=10&&shu<100)

write_com(0x80+2);

if(shu>=100&&shu<1000)

write_com(0x80+3);

if(shu>=1000&&shu<10000)

w

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1