免费预览已结束,剩余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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通、法制安全知识竞赛试题
- 上半年幼儿教师资格证考试真题及答案
- 各种中职焊工技能大赛试题
- 双重预防体系基础知识考试考试练习题及答案
- 广告设计师考试中级广告设计师考试卷模拟考试题x
- 2025年进阶能力测试题及答案
- 《组织行为学》试题及答案B
- 事业单位考试《水利工程专业试题》试题及答案解析
- 公务员遴选面试真题及解题思路
- 2025年执业药师《药理学》模拟测试
- xx医院检验科室内质控月总结报告
- 2025年秋青岛版(五四学制)(新教材)小学数学三年级上册(全册)教学设计(附目录P129)
- 【《复杂场景下的运动目标跟踪算法分析》开题报告4200字】
- 2025新疆交通投资(集团)有限责任公司所属公司招聘26人笔试历年典型考点题库附带答案详解2套试卷
- 2025榆林镇北台、红石峡景区招聘(26人)考试笔试模拟试题及答案解析
- 广东5年(2021-2025)高考生物真题分类汇编:专题04 遗传的基本规律(原卷版)
- 村干部考入事业编面试真题(含答案)
- 2025-2030律师事务所行业战略联盟与协同发展研究报告
- 铝锭贸易专业知识培训课件
- 2025年及未来5年中国建筑劳务行业投资潜力分析及行业发展趋势报告
- 2025年中考历史试题分类汇编:世界近代史(选择题汇编)(第1期)解析版
评论
0/150
提交评论