单片机中用矩阵键盘实现计算器.doc_第1页
单片机中用矩阵键盘实现计算器.doc_第2页
单片机中用矩阵键盘实现计算器.doc_第3页
单片机中用矩阵键盘实现计算器.doc_第4页
单片机中用矩阵键盘实现计算器.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

计算器1.程序要求: 用矩阵按键实现简单的加减乘除运算。2.程序代码:#include #include sbit col_1=P14;sbit col_2=P15;sbit col_3=P16;sbit col_4=P17;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/共阴极数码管unsigned char keynum,flag;unsigned char num1,num2,flag1,flag2,flag3,flag4;void keyscan(void);void display();void keyfind(unsigned char);void keyprocess(void);void delay(unsigned int z) /延时1msunsigned int x,y;for(x=110;x0;x-)for(y=z;y0;y-);void main(void) while(1) keyscan();/按键扫描函数 keyprocess(); /数据处理 display(); /数据显示 void keyscan(void) col_1=0; col_2=0; col_3=0; col_4=0; if (P1&0x0f)!=0x0f) /判断行线是否全为1,不是则处理 col_1=0; /第一列输出0 col_2=1; col_3=1; col_4=1; keyfind(0); col_1=1; /第二列输出0 col_2=0; col_3=1; col_4=1; keyfind(4); col_1=1; /第三列输出0 col_2=1; col_3=0; col_4=1; keyfind(8); col_1=1; /第四列输出0 col_2=1; col_3=1; col_4=0; keyfind(12); col_1=0; /列线输出全为0 col_2=0; col_3=0; col_4=0; flag+; /每按一下标志位加1 while(P1&0x0f)!=0x0f); /等待按键释放void keyfind(unsigned char col_dat) unsigned char temp;temp=(P1)&0x0f; /求取各行状态switch(temp) /键值计算 case 1: keynum=1+col_dat; break; case 2: keynum=2+col_dat; break; case 4: keynum=3+col_dat; break; case 8: keynum=4+col_dat; break;void keyprocess(void) switch(keynum) case 1:if(flag=1) /flag=1表示是第一次按下,按得是被除数 num1=7; /第一个键按下对应是数字7 if(flag=3) /flag=3表示是第三次按下,按的是除数 num2=7; break; case 2:if(flag=1) num1=4; if(flag=3) num2=4; break; case 3:if(flag=1) num1=1; if(flag=3) num2=1; break; case 5:if(flag=1) num1=8; if(flag=3) num2=8; break; case 6:if(flag=1) num1=5; if(flag=3) num2=5; break; case 7:if(flag=1) num1=2; if(flag=3) num2=2; break; case 8:if(flag=1) num1=0; if(flag=3) num2=0; break; case 9:if(flag=1) num1=9; if(flag=3) num2=9; break; case 10:if(flag=1) num1=6; if(flag=3) num2=6; break; case 11:if(flag=1) num1=3; if(flag=3) num2=3; break; case 4: flag1=1;/“C”清除键按下,用flag1=1来记下 break; case 12: flag1=2;/“=” 等号键按下,用flag1=2标记下 break; case 13: flag2=1;/“/” 除号键按下 ,用flag2=1来标记 break; case 14: flag2=2;/“*” break; case 15: flag2=3;/“-” break; case 16: flag2=4;/“+” break;keynum=0; /清除keynum的值void display()unsigned char num,num_shi,num_ge;if(flag1=1) /清除键按下了,将所有的数据清0num1=0;num2=0;num=0;flag=0;flag1=0;flag2=0;flag3=0;flag4=0;P2=0xff;if(flag=1|flag3=1) /第一次按下的是被除数,在数码管的第一位来显示按下的数据,并用flag3=1来标记flag3=1;P2=0xfe;P0=tablenum1;delay(10);if(flag=3|flag4=1)/ 除数按下,在数码管的第二位来显示按下的数据,并用flag4=1来标记flag4=1;P2=0xfd;P0=tablenum2;delay(10);if(flag2=1&flag1=2) /第二次按下的是运算符键,判断是哪个运算符被按下,并执行相应的操作num=num1/num2;if(flag2=2&flag1=2) /乘号和等号被按下num=num1*num2;if(flag2=3&flag1=2) /减号和等号被按下num=num1-num2;if(flag2=4&flag1=2) /加号和等号被按下num=num1+num2;num_shi=num/10; /将所得结果数据分离,用来在数码管上显示num_ge=nu

温馨提示

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

评论

0/150

提交评论