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

上传人:b****8 文档编号:9647096 上传时间:2023-05-20 格式:DOCX 页数:18 大小:33.13KB
下载 相关 举报
基于51单片机的lcd 1602液晶显示的计算器.docx_第1页
第1页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第2页
第2页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第3页
第3页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第4页
第4页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第5页
第5页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第6页
第6页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第7页
第7页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第8页
第8页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第9页
第9页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第10页
第10页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第11页
第11页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第12页
第12页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第13页
第13页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第14页
第14页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第15页
第15页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第16页
第16页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第17页
第17页 / 共18页
基于51单片机的lcd 1602液晶显示的计算器.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

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

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

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

阿斌独家制作:

计算器,1602液晶显示

可计算10以下数加减乘除

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

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

键盘设置:

液晶初始显示:

运算显示:

主程序:

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitlcden=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)

write_com(0x80+4);

if(shu>=10000)

write_com(0x80+5);

display_fuhao();

flag=1;

}

voidfuhao_deng()

{

write_com(0x80+0x40);

write_date(0x3d);

flag1=1;

flag=0;

}

voiddisplay_result(uintresult)

{

write_com(0x80+0x40+1);

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);

}

voidjia1()

{

jia=1;

jian=cheng=chu=qing=0;

key1=key;

fuhao=1;

fuhao_pan();

}

voidjian1()

{

jian=1;

jia=cheng=chu=qing=0;

key1=key;

fuhao=2;

fuhao_pan();

}

voidcheng1()

{

cheng=1;

jia=jian=chu=qing=0;

key1=key;

fuhao=3;

fuhao_pan();

}

voidchu1()

{

chu=1;

jia=jian=cheng=qing=0;

key1=key;

fuhao=4;

fuhao_pan();

}

voidqing1()

{

qing=1;

jia=jian=cheng=chu=0;

key1=key=0;

}

voiddeng1()

{

if(jia)

key=key1+key;

if(jian)

key=key1-key;

if(cheng)

key=key1*key;

if(chu)

key=key1/key;

fuhao_deng();

display_result(key);

jia=jian=cheng=chu=qing=0;

}

voiddeal()

{

switch(num)

{

case0:

{

switch(flag)

{

case0:

display_key1(key);break;

case1:

display_key(key);break;

}

}break;

case1:

jia1();break;

case2:

jian1();break;

case3:

cheng1();break;

case4:

chu1();break;

case5:

deng1();break;

case6:

qing1();break;

}

}

voidmain()

{

lcd_init();

while

(1)

{

keyscan();

deal();

}

}

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2