单片机中用矩阵键盘实现计算器_第1页
单片机中用矩阵键盘实现计算器_第2页
单片机中用矩阵键盘实现计算器_第3页
单片机中用矩阵键盘实现计算器_第4页
单片机中用矩阵键盘实现计算器_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、计算器程序要求:用矩阵按键实现简单的加减乘除运算。程序代码:#include#includesbitcol_1=P1A4;sbitcol_2=PlA5;sbitcol_3=P1A6;sbitcol_4=PlA7;unsignedcharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;共阴极数码管unsignedcharkeynum,flag;unsignedcharnuml,num2,flagl,flag2,flag3,flag4;voidkeyscan(void);voiddisplay();void

2、keyfind(unsignedchar);voidkeyprocess(void);voiddelay(unsignedintz)/延时lmsunsignedintx,y;for(x=ll0;x0;x-)for(y=z;y0;y-);voidmain(void)while(l)keyscan();/按键扫描函数keyprocess();/数据处理display();/数据显示voidkeyscan(void)col_l=0;col_2=0;col_3=0;col_4=0;if(P1&0 x0f)!=0 x0f)/判断行线是否全为1,不是则处理col_1=0;/第一列输出0col_2=1;co

3、l_3=1;col_4=1;keyfind(0);col_1=1;/第二列输出0col_2=0;col_3=1;col_4=1;keyfind(4);col_1=1;/第三列输出0col_2=1;col_3=0;col_4=1;keyfind(8);col_1=1;/第四列输出0col_2=1;col_3=1;col_4=0;keyfind(12);col_1=0;/列线输出全为0col_2=0;col_3=0;col_4=0;flag+;/每按一下标志位加1while(P1&0 x0f)!=0 x0f);/等待按键释放voidkeyfind(unsignedcharcol_dat)unsig

4、nedchartemp;temp=(P1)&0 x0f;/求取各行状态switch(temp)/键值计算case1:keynum=1+col_dat;break;case2:keynum=2+col_dat;break;case4:keynum=3+col_dat;break;case8:keynum=4+col_dat;break;voidkeyprocess(void)switch(keynum)case1:if(flag=1)/flag=1表示是第一次按下,按得是被除数num1=7;/第一个键按下对应是数字7if(flag=3)/flag=3表示是第三次按下,按的是除数num2=7;br

5、eak;case2:if(flag=1)num1=4;if(flag=3)num2=4;break;case3:if(flag=1)num1=1;if(flag=3)num2=1;break;case5:if(flag=1)num1=8;if(flag=3)num2=8;break;case6:if(flag=1)num1=5;if(flag=3)num2=5;break;case7:if(flag=1)num1=2;if(flag=3)num2=2;break;case8:if(flag=1)num1=0;if(flag=3)num2=0;break;case9:if(flag=1)num1

6、=9;if(flag=3)num2=9;break;case10:if(flag=1)num1=6;if(flag=3)num2=6;break;case11:if(flag=1)num1=3;if(flag=3)num2=3;break;case4:flagl=l;“C”清除键按下,用flag1=1来记下break;casel2:flag1=2;“=”等号键按下,用flag1=2标记下break;case13:flag2=1;/“/”除号键按下,用flag2=1来标记break;case14:flag2=2;/“*”break;case15:flag2=3;/-“”break;case16:

7、flag2=4;/“+”break;keynum=0;/清除keynum的值voiddisplay()unsignedcharnum,num_shi,num_ge;if(flag1=1)/清除键按下了,将所有的数据清0num1=0;num2=0;num=0;flag=0;flag1=0;flag2=0;flag3=0;flag4=0;P2=0 xff;if(flag=1|flag3=1)/第一次按下的是被除数,在数码管的第一位来显示按下的数据,并用flag3=1来标记flag3=1;P2=0 xfe;P0=tablenum1;delay(10);if(flag=3|flag4=1)/除数按下,

8、在数码管的第二位来显示按下的数据,并用flag4=1来标记flag4=1;P2=0 xfd;P0=tablenum2;delay(10);if(flag2=1&flag1=2)/第二次按下的是运算符键,判断是哪个运算符被按下,并执行相应的操作num=num1/num2;if(flag2=2&flag1=2)/乘号和等号被按下num=num1*num2;if(flag2=3&flagl=2)/减号和等号被按下num=num1-num2;if(flag2=4&flag1=2)/加号和等号被按下num=num1+num2;num_shi=num/10;将所得结果数据分离,用来在数码管上显示num_ge=num%10;if(flag=4)等号以按下,显示结果P2=0 xfb;PO=tablenum_shi;第三个数码管显示十位数delay(10);P2=0 xf7;PO=tablenum_ge;第四个数码管显示个位数delay(10);实验结果iJSXSPE-af-CXKliUblilf&ALIKIE,lL中tbcLii日叫的尚trwi苣略kkraryTqylMA-詡rJLj趣E)国占T*爲鱼赠口Zz9Urri:tJKF.-5MjWWXRrauxiO.i-KT

温馨提示

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

评论

0/150

提交评论