基于单片机的矩阵式键盘计数器设计课程设计.doc

上传人:文库蛋蛋多 文档编号:4148711 上传时间:2023-04-07 格式:DOC 页数:11 大小:408.50KB
返回 下载 相关 举报
基于单片机的矩阵式键盘计数器设计课程设计.doc_第1页
第1页 / 共11页
基于单片机的矩阵式键盘计数器设计课程设计.doc_第2页
第2页 / 共11页
基于单片机的矩阵式键盘计数器设计课程设计.doc_第3页
第3页 / 共11页
基于单片机的矩阵式键盘计数器设计课程设计.doc_第4页
第4页 / 共11页
基于单片机的矩阵式键盘计数器设计课程设计.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《基于单片机的矩阵式键盘计数器设计课程设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的矩阵式键盘计数器设计课程设计.doc(11页珍藏版)》请在三一办公上搜索。

1、单片机课程设计报告计算器一、设计目的1、进一步熟悉89C51单片机外部引脚线路连接,掌握单片机全系统调试的过程及方法。2、通过计算器控制系统的设计,掌握矩阵式键盘的使用方法,和简单程序的编写,3、通过单片机课程设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力二、设计要求1、设计一个十六个按键的矩阵式计算器的模拟系统2、该系统具有加减乘除等功能。3、用Proteus 7仿真工作的全过程,用Protel 99se画出原理图及PCB图4、有相应的实物图5、掌握44矩阵式键盘程序识别原理,掌握44矩阵式键盘按键的设计方法。三、设计分析图()(1)行列式键盘的结构用单片

2、机的并行口P1连接44矩阵键盘,并以单片机的P1.0P1.7各管脚作输入线,以单片机的P2.0P2.7和P0.0P0.7各管脚作输出线,在数码管上显示每个按键 “09”的序号。键盘中对应按键的序号排列如图()所示。数字0、1、2、3接X0;4、5、6、7接X1;8、9、10、11接X2;12、13、14、15接X3。即16个按钮空接,即十六个键一端低电平,另一端接高电平;当按下任意一个按钮时显示对应数字。该系统可以实现四则运算,当分别按下个数字,再按任意一个功能键即可实现相应的运算。(2)按键的识别判断键盘上有无按键闭合,先判断行线X0X3输出低电平“0”,然后判断列线Y0Y3的状态,若为全1

3、,即列线全为高电平,说明键盘上没有按键闭合,若Y0Y3不全为1,说明有键按下。(3)消抖处理当判断有键按下后,需要进行消除抖动,这里使用了软件方法即程序中采用时间延时0.5秒,待信号稳定后再判别键盘的状态,若有键按下,则再进行键号的计算。(4)判别键号先判断行线X0X3是否有输出低电平“0”,若有键按下,则相应的列线也为低电平“0”,例如行线X1输出为低电平“0”,且列线Y2为低电平,即X1与Y2相交的键被按下,进行键号=行号*4+列号 的计算。 图()(5)显示结果图显示器接高电频,左边显示器接.,右边接.,当按下一个数字时右显示器显示相应的数字,按第个数字时左边显示器显示相应数字;当进行除

4、法运算时,除的的数据要看接口.接高还是低电频,低电频则结果为几点几,为高电频则几十几。其它运算直接看数据即可。图()(6)复位电路图为复位电路,接AT89C51上的RST接口,当显示器显示数据时,按下16键时显示器不显示任何数据。如果进行了某一运算后,若这时还要进行运算时,可以直接按要进行运算的键号。四、程序流程图开始AP1口高4位置1送入P0显示第二次键入的值扫描键盘再按一次键按下键? N加法?Y调用延时0.5s子程序消除抖动Y 减法? NY计算键入的值十进制?N乘法? NY送入P2显示第一次键入的值Y除法? N Y 按下键?十进制,E、F?N N Y调用延时0.5s子程序消除抖动 Y 送出

5、结果P2显示个位,P0显示十位 计算键入的值返回十进制? NA Y五、程序ORG 0000HL1:LCALL SCAN MOV 40H,32H ;将键号保存在40H MOV R1,40H ;暂存在R1 LCALL M0 LCALL XY1 MOV P0,#0FFH ;使P0口置1 LCALL SCAN MOV 41H,32H ;将键号保存在41H MOV R1,41H ;暂存在R1 LCALL M0 LCALL XY2L2:LCALL SCAN MOV 42H,32H MOV R7,42H CJNE R7,#10D,L3 ;是否进行加法运算 MOV A,40H ADD A,41H MOV B,

6、#10D DIV AB ;商存在A中即十位,余数存在B中即个位 CJNE A,#00H,L8 ;判断十位是否为0,不为0跳转 MOV P0,#0FFH ;置1不显示 LJMP L9L8:MOV 32H,A LCALL XY2 ;商非0则调用显示十位数L9:MOV 32H,B LCALL XY1 ;调用显示个位数 LJMP L1 l3:cjne r7,#11d,l4 ;是否进行减法运算 MOV A,40H subb A,41H ;结果存在A JB ACC.7,N1 ;判断正负 MOV 32H,A MOV P0,#0FFH LCALL XY1 ;减法结果为正 LJMP L1 N1:MOV P0,#

7、0BFH ;显示负号 MOV A,41H SUBB A,40H ADD A,#1D MOV 32H,A LCALL XY1 ;显示结果 LJMP L1l4:cjne r7,#12d,l5 ;是否进行乘法运算 MOV A,40H MOV B,41H MUL AB ;结果存在A中 MOV 50H,A MOV B,#10D DIV AB ;商存在A中即十位,余数存在B中即个位 CJNE A,#00H,L10 ;判断十位是否为0,不为0跳转 MOV P0,#0FFH ;置1不显示 LJMP L11L10:MOV 32H,A LCALL XY2L11:MOV 32H,B LCALL XY1 LJMP L

8、1l5:cjne r7,#13d,l6 ;是否进行除法运算 MOV A,40H MOV B,41H DIV AB ;X/Y 除法 MOV R6,B CJNE R6,#00H,L12 ;判断余数是否为0,不为0跳转 MOV P0,#0FFH ;置1不显示十位 MOV 32H,A LCALL XY1 LJMP L13L12:MOV 32H,A LCALL XY2 ;p0显示小数点前的数 CLR P0.7 ;有小数点 MOV A,B MOV B,#10D MUL AB ;余数的十倍 MOV B,41H DIV AB ;余数的十倍再除以除数 MOV 32H,A ;结果保留小数点后一位 LCALL XY

9、1 ;p2显示小数点后的数L13:LJMP L1l6:CJNE R7,#0D,L7 CJNE R7,#1D,L7 ;屏蔽十进制,实现加减乘除 CJNE R7,#2D,L7 CJNE R7,#3D,L7 CJNE R7,#4D,L7 CJNE R7,#5D,L7 CJNE R7,#6D,L7 CJNE R7,#7D,L7 CJNE R7,#8D,L7 CJNE R7,#9D,L7 CJNE R7,#14D,L7 ;屏蔽E、F CJNE R7,#15D,L7L7:LJMP L2SCAN:MOV P1,#0F0H ;P1口高4位置1 JNB P1.4,Y0 ;判断Y0列是否有键按下,有就跳至Y0 J

10、NB P1.5,Y1 JNB P1.6,Y2 JNB P1.7,Y3 LJMP SCAN ;无键按下继续扫描 Y0:MOV 31H,#00H ;列线Y0有键按下 MOV P1,#0FEH JNB P1.4,X0 ;判断X0横是否有键按下 MOV P1,#0FDH JNB P1.4,X1 ;判断X1横是否有键按下 MOV P1,#0FBH JNB P1.4,X2 ;判断X2横是否有键按下 MOV P1,#0F7H JNB P1.4,X3 ;判断X3横是否有键按下 LJMP Y0 ;返回继续判断 Y1:MOV 31H,#01H ;列线Y1有键按下 MOV P1,#0FEH JNB P1.5,X0

11、MOV P1,#0FDH JNB P1.5,X1 MOV P1,#0FBH JNB P1.5,X2 MOV P1,#0F7H JNB P1.5,X3 LJMP Y1 Y2:MOV 31H,#02H ;列线Y2有键按下 MOV P1,#0FEH JNB P1.6,X0 MOV P1,#0FDH JNB P1.6,X1 MOV P1,#0FBH JNB P1.6,X2 MOV P1,#0F7H JNB P1.6,X3 LJMP Y2 Y3:MOV 31H,#03H ;列线Y3有键按下 MOV P1,#0FEH JNB P1.7,X0 MOV P1,#0FDH JNB P1.7,X1 MOV P1,

12、#0FBH JNB P1.7,X2 MOV P1,#0F7H JNB P1.7,X3 LJMP Y3 X0:MOV 30H,#00H ;行线X0有键按下 LCALL DELAY ;0.5s延时消除抖动 LJMP JS ;跳转键值计算程序 X1:MOV 30H,#01H ;行线X1有键按下 LCALL DELAY LJMP JS X2:MOV 30H,#02H ;行线X2有键按下 LCALL DELAY LJMP JS X3:MOV 30H,#03H ;行线X3有键按下 LCALL DELAY LJMP JS JS:MOV A,30H ;计算键入的值 MOV B,#04H MUL AB ADD

13、A,31H MOV 32H,A RETXY1:MOV A,32H MOV DPTR,#TAB MOVC A,A+DPTR MOV P2,A ;显示第一次按入的键号及结果的个位 RETXY2:MOV A,32H MOV DPTR,#TAB MOVC A,A+DPTR MOV P0,A ;显示第二次按入的键号及结果的十位 RETDELAY:MOV R7,#100D ;延时0.5s子程序 DEL1:MOV R6,#250D DEL2:MOV R5,#10D DJNZ R5,$ DJNZ R6,DEL2 DJNZ R7,DEL1 RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92

14、H DB 82H,0F8H,80H,90H,88H,83H DB 0C6H,0A1H,86H,8EH,0FFH RETM0:CJNE R1,#10D,M1 ;仅实现十进制的加减乘除运算 LJMP L1M1:CJNE R1,#11D,M2 LJMP L1M2:CJNE R1,#12D,M3 LJMP L1M3:CJNE R1,#13D,M4 LJMP L1M4:CJNE R1,#14D,M5 LJMP L1M5:CJNE R1,#15D,M6 LJMP L1M6:RET ;返回重新按入新的键号六:roteus仿真图七、调试运行按照原理图焊接好最小系统,列线Y0Y3接上上拉电阻,电阻另一端接上+5V的电源,7段码显示器一样,行线X0X3空接。并且使用万用表检查线路是否完好;再使用排线将键盘和两个显示管与TA89C51的P1、P0、P2连接。上图的计算过程可为:先按2号键,再按9号键,最后按下11号键,即可得出-7的结果。更多结果见最小系统。八:rotel 99se 图九、PCB图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号