计算器.docx
- 文档编号:17415705
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:17
- 大小:15.46KB
计算器.docx
《计算器.docx》由会员分享,可在线阅读,更多相关《计算器.docx(17页珍藏版)》请在冰点文库上搜索。
计算器
#include
#defineucharunsignedchar
#defineuintunsignedint
intdat1;
intdat2;
intdat;
ucharflag;
ucharmake;
/*----------------------
液晶管脚
-----------------------*/
sbitRS=P2^4;
sbitRW=P2^5;
sbitE=P2^6;
/*----------------------
函数声明
------------------------*/
voidkeyscan();
voiddelay(ucharcount);
/*-----------------------
写指令
------------------------*/
voidwrite_com(ucharcom)
{
RS=0;
RW=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}
/*-----------------------
写数据
------------------------*/
voidwrite_data(uchardate)
{
RS=1;
RW=0;
P0=date;
delay(5);
E=1;
delay(5);
E=0;
}
/*-----------------------
显示数字函数
-------------------------*/
voidwrite_shu2(intshu)
{
intadd,i,shu1;
if(shu==0)
{
write_com(0x89);
write_data(0x30);
}
shu1=shu;
for(i=0;shu1!
=0;shu1=shu1/10,i++);
for(add=0;shu!
=0;shu=shu/10,i--)
{
add=shu%10;
write_com(0x88+i);
write_data(0x30+add);
delay(5);
}
}
voidwrite_shu1(intshu)
{
intadd,j;
if(shu==0)
{
write_com(0x87);
write_data(0x30);
}
for(add=0,j=1;shu!
=0;shu=shu/10,j++)
{
add=shu%10;
write_com(0x88-j);
write_data(0x30+add);
delay(5);
}
}
voidwrite_shu3(intshu)
{
intadd,k,shu1;
write_com(0x80+0x40);
write_data(0x3d);
if(shu==0)
{
write_com(0x80+0x41);
write_data(0x30);
}
if(shu<0)
{
shu=-shu;
write_com(0x80+0x41);
write_data(0x2d);
}
shu1=shu;
for(k=0;shu1!
=0;shu1=shu1/10,k++);
for(add=0;shu!
=0;shu=shu/10,k--)
{
add=shu%10;
write_com(0x80+0x41+k);
write_data(0x30+add);
delay(5);
}
}
/*------------------------------------------------
延时程序
------------------------------------------------*/
voiddelay(ucharcount)
{
uchari,j;
for(i=0;i for(j=0;j<120;j++); } /*****************************************/ voidkey0() { if(flag==1) { dat1=dat1*10; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10; write_shu2(dat2); } } voidkey1() { if(flag==1) { dat1=dat1*10+1; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10+1; write_shu2(dat2); } } voidkey2() { if(flag==1) { dat1=dat1*10+2; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10+2; write_shu2(dat2); } } voidkey3() { if(flag==1) { dat1=dat1*10+3; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10+3; write_shu2(dat2); } } voidkey4() { if(flag==1) { dat1=dat1*10+4; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10+4; write_shu2(dat2); } } voidkey5() { if(flag==1) { dat1=dat1*10+5; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10+5; write_shu2(dat2); } } voidkey6() { if(flag==1) { dat1=dat1*10+6; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10+6; write_shu2(dat2); } } voidkey7() { if(flag==1) { dat1=dat1*10+7; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10+7; write_shu2(dat2); } } voidkey8() { if(flag==1) { dat1=dat1*10+8; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10+8; write_shu2(dat2); } } voidkey9() { if(flag==1) { dat1=dat1*10+9; write_com(0x01); write_shu1(dat1); } else { dat2=dat2*10+9; write_shu2(dat2); } } voidkey14() { if(make==1) { dat=dat1+dat2; write_shu3(dat); } if(make==2) { dat=dat1-dat2; write_shu3(dat); } if(make==3) { dat=dat1*dat2; write_shu3(dat); } if(make==4) { dat=dat1/dat2; write_shu3(dat); } } voidkey15() { flag=1; dat=0; dat1=0; dat2=0; make=0; write_com(0x01); write_data(0x30); } key16()//+ { make=1; flag=2; write_com(0x88); write_data(0x2b); } key17()//- { make=2; flag=2; write_com(0x88); write_data(0x2d); } key18()//* { make=3; flag=2; write_com(0x88); write_data(0x2a); } key19()/// { make=4; flag=2; write_com(0x88); write_data(0x2f); } /*------------------------------------------------ 键盘扫描程序 ------------------------------------------------*/ //矩阵键盘扫描,返回被按下按键的序号,以此判断哪个按键被按下 voidkeyscan() { uchartemp=0; P3=0xfe; temp=P3; temp&=0xf0; while(temp! =0xf0) { delay(5); temp=P3; temp&=0xf0; if(temp! =0xf0) { temp=P3; switch(temp) { case0xee: key16();break;//+ case0xde: key9();break;//9 case0xbe: key8();break;//8 case0x7e: key7();break;//7 } } while(temp! =0xf0) { temp=P3; temp&=0xf0; } } P3=0xfd; temp=P3; temp&=0xf0; while(temp! =0xf0) { delay(5); temp=P3; temp&=0xf0; if(temp! =0xf0) { temp=P3; switch(temp) { case0xed: key17();break;//- case0xdd: key6();break;//6 case0xbd: key5();break;//5 case0x7d: key4();break;//4 } } while(temp! =0xf0) { temp=P3; temp&=0xf0; } } P3=0xfb; temp=P3; temp&=0xf0; while(temp! =0xf0) { delay(5); temp=P3; temp&=0xf0; if(temp! =0xf0) { temp=P3; switch(temp) { case0xeb: key18();break;//x case0xdb: key3();break;//3 case0xbb: key2();break;//2 case0x7b: key1();break;//1 } } while(temp! =0xf0) { temp=P3; temp&=0xf0; } } P3=0xf7; temp=P3; temp&=0xf0; while(temp! =0xf0) { delay(5); temp=P3; temp&=0xf0; if(temp! =0xf0) { temp=P3; switch(temp) { case0xe7: key19();break;/// case0xd7: key14();break;//= case0xb7: key0();break;//0 case0x77: key15();break;//清零 } } while(temp! =0xf0) { temp=P3; temp&=0xf0; } } } voidinit() { E=0; RW=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); dat1=0; dat2=0; flag=1; dat=0; } voidmain() { init(); while (1) { keyscan(); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算器