51单片机简易计算器代码.doc_第1页
51单片机简易计算器代码.doc_第2页
51单片机简易计算器代码.doc_第3页
51单片机简易计算器代码.doc_第4页
51单片机简易计算器代码.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#includereg52.h #define uchar unsigned char#define uint unsigned intsbit busy=P07;void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);char i,j,temp,num;long a,b,c; /a,第一个数 b,第二个数 c,得数uchar flag,fuhao;/flag表示是否有符号键按下,fuhao表征按下的是哪个符号uchar code table=7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0;uchar code table1=7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30; /按键显示编码表sbit lcden=P22;sbit lcdwrite=P21;sbit lcdrs=P20;/lcd的写指令void write_com(uchar com) lcdrs=0; lcden=0; P0=com; delay(1); lcden=1; delay(1); lcden=0;/lcd的写数据void write_date(uchar da) lcdrs=1; lcden=0; P0=da; delay(1); lcden=1; delay(1); lcden=0;/初始化void init() /初始化 uchar num; num=-1; lcdwrite=0; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); delay(500);/延时0.5s write_com(0x01); i=0; j=0; a=0; /第一个参与运算的数 b=0; /第二个参与运算的数 c=0; flag=0; /flag表示是否有符号键按下, fuhao=0; / fuhao表征按下的是哪个符号void keyscan() / 键盘扫描程序 P3=0xfe; if(P3!=0xfe) delay(10); /延迟20ms if(P3!=0xfe) temp=P3&0xf0; switch(temp) case 0xe0:num=0; break; case 0xd0:num=1; break; case 0xb0:num=2; break; case 0x70:num=3; break; while(P3!=0xfe); if(num=0|num=1|num=2)/如果按下的是7,8或9 if(j=1)/确认一次计算完毕,清屏 write_com(0x01); j=0; if(flag=0)/没有按过符号键 a=a*10+tablenum; else/如果按过符号键 b=b*10+tablenum; else/如果按下的是/ flag=1; fuhao=4;/4表示除号已按 i=table1num; write_date(0x30+i); P3=0xfd; if(P3!=0xfd) delay(10); if(P3!=0xfd) temp=P3&0xf0; switch(temp) case 0xe0:num=4; break; case 0xd0:num=5; break; case 0xb0:num=6; break; case 0x70:num=7; break; while(P3!=0xfd); if(num=4|num=5|num=6)/如果按下的是4,5或6 if(j=1) write_com(0x01); j=0; if(flag=0)/没有按过符号键 a=a*10+tablenum; else/如果按过符号键 b=b*10+tablenum; else/如果按下的是X flag=1; fuhao=3;/3表示乘号已按 i=table1num; write_date(0x30+i); P3=0xfb; if(P3!=0xfb) delay(10); if(P3!=0xfb) temp=P3&0xf0; switch(temp) case 0xe0:num=8; break; case 0xd0:num=9; break; case 0xb0:num=10; break; case 0x70:num=11; break; while(P3!=0xfb); if(num=8|num=9|num=10)/如果按下的是1,2或3 if(j=1) write_com(0x01); j=0; if(flag=0)/没有按过符号键 a=a*10+tablenum; else/如果按过符号键 b=b*10+tablenum; else if(num=11)/如果按下的是- flag=1; fuhao=2;/2表示减号已按 i=table1num; write_date(0x30+i); P3=0xf7; if(P3!=0xf7) delay(10); if(P3!=0xf7) temp=P3&0xf0; switch(temp) case 0xe0:num=12; break; case 0xd0:num=13; break; case 0xb0:num=14; break; case 0x70:num=15; break; while(P3!=0xf7); switch(num) case 12:/按下的是清零 write_com(0x01); a=0; b=0; flag=0; fuhao=0; break; case 13:/按下的是0 if(flag=0)/没有按过符号键 a=a*10; write_date(0x30); if(flag=1)/如果按过符号键 b=b*10; write_date(0x30); break; case 14: j=1; if(fuhao=1) write_com(0x80+0x4f);/按下加号键,光标前进至第二行最后一个显示处 write_com(0x04); /设置从后住前写数据 c=a+b; while(c!=0) write_date(0x30+c%10); c=c/10; write_date(0x3d); /写= a=0;b=0;flag=0;fuhao=0; else if(fuhao=2) write_com(0x80+0x4f);/按下减号按键 write_com(0x04); /设置从后住前写数据 if(a-b0) c=a-b; else c=b-a; while(c!=0) write_date(0x30+c%10); c=c/10; if(a-b0) write_date(0x2d); /写负号- write_date(0x3d); /再写= a=0;b=0;flag=0;fuhao=0; else if(fuhao=3)/按下乘号按键 write_com(0x80+0x4f); write_com(0x04); c=a*b; while(c!=0) write_date(0x30+c%10); c=c/10; write_date(0x3d); a=0;b=0;flag=0;fuhao=0; else if(fuhao=4)/按下除号按键 write_com(0x80+0x4f); write_com(0x04); i=0; c=(long)(float)a/b)*1000); while(c!=0) write_date(0x30+c%10); c=c/10; i+; if(i=3) /精确到小数点后3位 write_date(0x2e); /写小数点2e i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论