否有键按下,也可先将全部行线同时置为低电平,然后检测列线的电平状态,若所有列线均为高电平,则说明键盘中无键按下,立即返回;若要有一列的电平为低,则表示键盘中有键被控下,然后再如上那样进行逐行扫描。
四、实验设备和仪器
PC机一台AT89S52单片机学习板、下载线一套
五、实验步骤
1.按时实验要求编写源程序(实验前写)进行软件模拟调试。2.软件调试好,连接硬件电路。
第
页
f天津机电职业技术学院教师备课纸
3.下载程序,进行硬件调试,观察数码管显示的情况,与设计的是否相同。
六、实验参考程序
14位LED数码管动态显示扫描程序
ORG0000H
MAIN
MOV30H0定义4个字节空间,放置待显示数字“1、2、3、4”
MOV31H1
MOV32H2
MOV33H3
MOVP000H
DISP
MOVR030H把待显示数字首地址送给R0寄存器
MOVR14
把R1作为显示数码管位数计数器
MOVR20FEH把首位数码管的位选码暂存在R2寄存器中
MOVDPTRTAB把段选码存储空间的首地址给DPTR
LOOP1
MOVAR0
把待显示数字的段选码提取出来
MOVCAADPTR
MOVP0A
把段选码放在数据总线上
SETBP11
段选码锁存器的锁存允许置位
NOP
CLRP11
MOVP0R2
把位选码放在数据总线上
SETBP12
位选码锁存器的锁存允许置位
NOP
CLRP12
RLA
下一位待显示数码管位选码预处理
MOVR2A
INCR0
ACALLDEL调用延时子程序
DJNZR1LOOP14位没有显示完,转去显示下一位
第
页
f天津机电职业技术学院教师备课纸
SJMPDISP4位显示完,再次进行新一轮的扫描定义段选码TAB
DB0C0H0DB0F9H1DB0A4H2DB0B0H3DB099H4DB092H5DB082H6DB0F8H7DB080H8DB090H9延时5ms子程序DELMOVR710LOOP2MOVR6250DJNZR6DJNZR7LOOP2RETEND
2键盘扫描及数码管动态显示程序
ORG0000HMAIN
MOV30H10定义4个字节空间,放置待显示数字MOV31H10MOV32H10MOV33H10MOVP000HMOV40H0FFH定义1个字节空间,放置键值
第
页
f天津机电职业技术学院教师备课纸
KEYACALLKEYSCAN调用键盘全扫描子程序
JNCLK1
有按键按下,转去延时去抖
ACALLDISPLAY无按键按下,调用显示子程序
AJMPKBZ
送无键按下标志
LK1ACALLDISPLAY两次调用显示,实现延时功能
ACALLDISPLAY
ACALLKEYSCAN延时去抖后,再次调用键盘全扫描子程序
JNZLK2
确实有按键按下,转入逐行扫描
AJMPKBZ
抖动,无按键
逐行扫描程序模块
LK2MOVR70EFH第一行行线置为0
MOVR600H行数寄存器
COL0MOVP3R7第一行行线置为0MOVAP3读入列线状态JBACC0COL1若不是第一列按键按下,转查第二列MOVA01H若是第一列按键按下,则记下列值为1AJMPLKPr