基于单片机的矩阵式键盘计数器设计课程设计_第1页
基于单片机的矩阵式键盘计数器设计课程设计_第2页
基于单片机的矩阵式键盘计数器设计课程设计_第3页
基于单片机的矩阵式键盘计数器设计课程设计_第4页
基于单片机的矩阵式键盘计数器设计课程设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

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,92h 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

温馨提示

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

评论

0/150

提交评论