资源work1和work2(完整工程文件在笔者本人主页的资源中,免费欢迎下载)分别完成下面两个任务:
1、单片机接矩阵键盘和2个静态数码管,自行设计硬件电路,利用汇编语言,要求将按键值(0~15)在数码管显示。
主要代码:
……
MAIN:
KEYSCAN:
MOV P1, #0F0H ; 读行(高4位)引脚前先送高电平
MOV A, P1 ;读入高4位行状态,判断是否有键按下
CJNE A, #0F0H, KEYC ; 行不全为1,说明有键按下,转按下键的处理
LJMP KEYSCAN; 没有键按下,退出键盘识别
KEYC:
LCALL DELAY10ms ; 延时消除抖动
MOV A, P1
CJNE A, #0F0H, KEYID ; 确实有键按下,则转入键识别处理
LJMP KEYSCAN ; 是干扰引起的抖动,不予处理
DELAY10ms:
MOV R7, #25 // ;延时10ms子程序
L1:
MOV R6, #200
L2:
DJNZ R6, L2
DJNZ R7,L1
RET
KEYID:
MOV SCANCODE, A ; 低四位代表列,为0000;高四位代表行
//行列反转,置列全扫描输出,行为输入
MOV P1, #0FH ;读列(低4位)引脚前先送高电平
NOP
NOP ; 适当短延时,待端口电平稳定
MOV A, P1 ; 闭合键的对应行被拉低,将行状态存入A中
ADD A, SCANCODE
MOV SCANCODE, A ; 将行列相加,得到键扫描码SCANCODE
//下面等待键释放
KEYUP:
MOV A, P1
CJNE A, #0FH, KEYUP ; 按键没有松开,则继续等待
LCALL DELAY10ms ; 延时消除抖动
MOV A, P1
CJNE A, #0FH, KEYUP
MOV DPTR, #KEYCODE ; 按键编码处理
MOV KEY_index, #0
KEYLOOP:
MOV A, KEY_index
MOVC A, @A+DPTR
CJNE A, SCANCODE, NEXTKEY
MOV B,#10
MOV A,KEY_index
DIV AB
MOV DPTR, #TABLE // ;查8段码表
MOVC A, @A+DPTR
MOV P2, A // ;段码,输出显示十位
MOV A,B
MOV DPTR, #TABLE // ;查8段码表
MOVC A, @A+DPTR
MOV P3, A // ;段码,输出显示个位
LJMP KEYSCAN
NEXTKEY:
INC KEY_index
AJMP KEYLOOP
……
效果如图1:
图1
2、单片机接独立按键和2个动态数码管,自行设计硬件电路,利用汇编语言,要求将按键次数(0~255)在数码管显示。
主要代码:
……
START:
MOV R1,#0
MOV P1,#0
CHK_KEY:
MOV P3, #0FFH //;读引脚前先写1
MOV A, P3 // ;读按键值
CPL A // ;取反,按下的键相应为1
JZ CHK_KEY // ;无键按下,重新查询
LCALL D10ms // ;延时去抖动
MOV A, P3
CPL A
JZ CHK_KEY
JB ACC.2, KEY //;是键按下,转KEY处理
LJMP CHK_KEY
KEY:
JNB P3.2,KEY//若键未松开原地等待
INC R1//松开加一
SHOW:
MOV A,R1
CLR P1.6
SETB P1.4
CLR P1.5//百位位选,先将个位位选清零
MOV B,#100
DIV AB
MOV DPTR, #TAB // ;查8段码表
MOVC A, @A+DPTR
MOV P2, A // ;段码,输出显示百位
LCALL D1ms
CLR P1.4
CLR P1.6
SETB P1.5//十位位选,先将百位位选清零
MOV A,B
MOV B,#10
DIV AB
MOV DPTR, #TAB // ;查8段码表
MOVC A, @A+DPTR
MOV P2, A // ;段码,输出显示十位
LCALL D1ms
CLR P1.5
CLR P1.4//个位位选,先将十位位选清零
SETB P1.6
MOV A,B
MOV DPTR, #TAB // ;查8段码表
MOVC A, @A+DPTR
MOV P2, A // ;段码,输出显示个位
LCALL D1ms
JB P3.2,SHOW
LJMP CHK_KEY
D10ms:
MOV R7, #25 // ;延时10ms子程序
L1:
MOV R6, #200
L2:
DJNZ R6, L2
DJNZ R7,L1
RET
D1ms:
MOV R7, #25 // ;延时1ms子程序
LL1:
MOV R6, #20
LL2:
DJNZ R6, L2
DJNZ R7,L1
RET
……
效果如图2:
文章来源:https://www.toymoban.com/news/detail-785017.html
图2文章来源地址https://www.toymoban.com/news/detail-785017.html
到了这里,关于利用AT89C52单片机实现数码管的静态与动态显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!