




免费预览已结束,剩余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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 斜屋面梁板高支模专项施工方案
- 小学天宫课堂活动方案策划
- 2025年注册设备监理师考试 设备监理实务考点精讲冲刺试卷
- 云计算技术在各行业中的应用前景分析
- 网红推广营销方案策略
- 夜间施工专项安全保障方案
- 期货从业资格之期货投资分析考试押题卷附参考答案详解【黄金题型】
- 2025年安徽蚌埠市事业单位招聘154人(市区)笔试备考题库及参考答案详解一套
- 2025年度民政部所属单位公开招聘应届毕业生笔试高频难、易错点备考题库及参考答案详解一套
- 2023年度收银审核员考前冲刺练习试题附答案详解(夺分金卷)
- 人力资源管理流程手册
- 微生物学第九章 微生物生态
- YS/T 226.12-2009硒化学分析方法第12部分:硒量的测定硫代硫酸钠容量法
- 雪落在中国土地上
- GB/T 29114-2012燃气轮机液体燃料
- GB/T 18690.1-2009农业灌溉设备微灌用过滤器第1部分:术语、定义和分类
- FCI测试试题附答案
- 部编版四年级上册语文全册1-8单元课文思维导图
- 耳部解剖及急慢性中耳炎课件
- 【成都】麓湖生态城地产视角分析总结
- 盘扣支模架工程监理细则
评论
0/150
提交评论