资源描述:
《单片机课程设计__简易计算器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、4×4键盘的简易计算器和LED数码管的显示1、设计要求1、设计一个十六个按键的矩阵式计算器的模拟系统。2、该系统具有加减乘除等功能。3、用Proteus7仿真工作的全过程。4、有相应的实物图5、掌握4×4矩阵式键盘程序识别原理,掌握4×4矩阵式键盘按键的设计方法。2、设计思想2.1硬件设计思想用单片机的并行口P1连接4×4矩阵键盘,并以单片机的P1.0-P1.7各管脚作输入线,以单片机的P2.0-P2.7和P0.0—P0.7各管脚作输出线,在数码管上显示每个按键“0-9”的序号。键盘中对应按键的序号排列如图(1)所示。数字0、
2、1、2、3接X0;4、5、6、7接X1;8、9、10、11接X2;12、13、14、15接X3。即16个按钮空接,即十六个键一端低电平,另一端接高电平;当按下任意一个按钮时显示对应数字。该系统可以实现四则运算,当分别按下2个数字,再按任意一个功能键即可实现相应的运算。2.2软件设计思想整个程序可以实现十进制内的加减乘除,其中包含了延时子程序(去抖动),加法、减法、除法、乘法等子程序。(1)按键的识别判断键盘上有无按键闭合,先判断行线X0—X3输出低电平“0”,然后判断列线Y0—Y3的状态,若为全1,即列线全为高电平,说明键盘上
3、没有按键闭合,若Y0—Y3不全为1,说明有键按下。(2)消抖处理14当判断有键按下后,需要进行消除抖动,这里使用了软件方法即程序中采用时间延时0.5秒,待信号稳定后再判别键盘的状态,若有键按下,则再进行键号的计算。(3)判别键号先判断行线X0—X3是否有输出低电平“0”,若有键按下,则相应的列线也为低电平“0”,例如行线X1输出为低电平“0”,且列线Y2为低电平,即X1与Y2相交的键被按下,进行键号=行号*4+列号的计算。(4)显示结果显示器接高电频,左边显示器接P0,右边显示接P2,当按下一个数字时右显示器显示相应的数字,按
4、第2个数字时左边显示器显示相应数字;当进行除法运算时,除的的数据要看接口P0.7接高还是低电频,低电频则结果为几点几,为高电频则几十几。其它运算直接看数据即可。3、电路原理与电路图3.1电路原理单片机最小系统。一个AT89C51单片机做为控制电路,运用其P0、P1口来控制数码管和键盘,通过P0和P2口来显示键值(0~9)。通过P1口来控制键盘。3.2电路原理图图3.1电路原理图4、流程图与算法描述4.1流程图14开始P1口高四位置一扫描键盘按下键?消除抖动计算键入的值十进制?送入P2口显示第一次键入的值消除抖动计算键入的值十进
5、制?送入A按下键?NNYYYYNN送入P0显示第二次送入的值再按一次键加法?减法?乘法?除法?结束NNYYYYN把结果送入P0,P2口,P0存十位,P2存个位图4.1主程序流程图14开始R7送100R5送10R6送250R5减一为0?R6减一为0?R7减一为0?返回NNNYYY图4.2延时子程序流程图Y4.2算法描述1、设计一个延时子程序,延时0.5s。本程序通过两个DJNZ的语句来实现。延时程序的代码段如下:DELAY:MOVR7,#100DDEL1:MOVR6,#250DDEL2:MOVR5,#10DDJNZR5,$DJN
6、ZR6,DEL2DJNZR7,DEL1RET2、仅实现十进制的加减乘除运算。CJNE是判断两个数是否相等,不想等则转移,代码段如下:M0:CJNER1,#10D,M114LJMPL1M1:CJNER1,#11D,M2LJMPL1M2:CJNER1,#12D,M3LJMPL1M3:CJNER1,#13D,M4LJMPL1M4:CJNER1,#14D,M5LJMPL1M5:CJNER1,#15D,M6LJMPL1M6:RET;返回重新按入新的键号5、仿真结果5.1仿真结果1、加法仿真如下:(1加2)图5.1加法仿真结果图14图5.
7、2加法仿真结果图2、减法仿真如下:(2减3)图5.3减法仿真结果图14图5.4减法仿真结果图3、乘法仿真如下:(3乘以2)图5.5乘法仿真结果图14申图5.6乘法仿真结果图4、除法仿真如下:(2除以4)图5.7除法仿真结果图14图5.8除法仿真结果图5、复位仿真如下:图5.10复位仿真结果图146、源程序ORG0000HL1:LCALLSCANMOV40H,32H;将键号保存在40HMOVR1,40H;暂存在R1LCALLM0LCALLXY1MOVP0,#0FFH;使P0口置1LCALLSCANMOV41H,32H;将键号保存
8、在41HMOVR1,41H;暂存在R1LCALLM0LCALLXY2L2:LCALLSCANMOV42H,32HMOVR7,42HCJNER7,#10D,L3;是否进行加法运算MOVA,40HADDA,41HMOVB,#10DDIVAB;商存在A中即十位,余数存在B中即个位C