这次做的单片机 键盘扫描显示汇编源码
一、实验目的- ORG 0000H
- AJMP MAIN
- LEDMAP:
- DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
- DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
- ; 八段管显示码
- Delay: MOV R6, #01H; 延时子程序
- Delay1:MOV R7, #00H
- Delay2:DJNZ R7, Delay2
- DJNZ R6, Delay1
- RET
- DisplayLED:
- MOV R0, #60H
- MOV R1, #06H ; 共 共 6 个八段管
- MOV R2, #00100000B ; 从左边开始显示
- Loop:
- MOV DPTR, #8002H
- MOV A, #00H
- MOVX @DPTR, A; 关所有八段管
- MOV A, @R0
- MOV DPTR, #8004H ; 段控制口
- MOVX @DPTR, A
- MOV DPTR, #8002H ; 位控制口
- MOV A, R2
- MOVX @DPTR,A ; 显示一位八段管
- ACALL Delay
- MOV A, R2 ; 显示下一位
- RR A
- MOV R2,A
- INC R0
- DJNZ R1, Loop
- RET
- TestKey:
- MOV DPTR, #8002H
- MOV A, #00H
- MOVX @DPTR, A; 输出线置为 0
- MOV DPTR, #8001H
- MOVX A, @DPTR ; 读入键状态
- CPL A
- ANL A, #0FH ; 高四位不用
- RET
- KeyTable: ; 键码定义
- DB 16H, 15H, 14H, 0FFH
- DB 13H, 12H, 11H, 10H
- DB 0DH, 0CH, 0BH, 0AH
- DB 0EH, 03H, 06H, 09H
- DB 0FH, 02H, 05H, 08H
- DB 00H, 01H, 04H, 07H
- GetKey:
- MOV DPTR, #8002H
- MOV R1, #00100000B
- MOV R2, #06H
- KLoop:
- MOV A, R1 ; 找出键所在列
- CPL A
- MOV DPTR, #8002H
- MOVX @DPTR, A
- CPL A
- RR A
- MOV R1,A ; 下一列
- MOV DPTR, #8001H
- MOVX A, @DPTR
- CPL A
- ANL A, #0FH
- JNZ Goon1 ; 该列有键入
- DJNZ R2, KLoop
- MOV R2, #0FFH ; 没有键按下,
- 回 返回 0FFH
- AJMP Exit
- Goon1:
- MOV R1,A; 值 键值 = 列 列 *4 + 行 行
- MOV A, R2
- DEC A
- RL A
- RL A
- MOV R2, A ; R2 = (R2-1)*4
- MOV A, R1 ; R1 中为读入的行值
- MOV R1, #04H
- LoopC:
- RRC A ; 移位找出所在行
- JC Exit
- INC R2 ; R2 =R2+ 行值
- DJNZ R1, LoopC
- Exit:
- MOV A, R2 ; 取出键码
- MOV DPTR, #KeyTable
- MOVC A, @A+DPTR
- MOV R2, A
- WaitRelease:
- MOV DPTR, #8002H ; 等键释放
- CLR A
- ACALL TestKey
- JNZ WaitRelease
- MOV A, R2
- RET
- MAIN:
- MOV 60H, #0FFH ; 示 显示 8.8.8.8.
- MOV 61H, #0FFH
- MOV 62H, #0FFH
- MOV 63H, #0FFH
- MOV 64H, #00H
- MOV 65H, #00H
- MLoop: ACALL DisplayLED ; 显示
- ACALL TestKey ; 有键入?
- JZ MLoop ; 无键入, 继续显示
- ACALL GetKey ; 读入键码
- ANL A, #0FH ; 显示键码
- MOV DPTR, #LEDMap
- MOVC A, @A+DPTR
- MOV 65H,A
- LJMP MLoop
- END
复制代码
1 .掌握键盘和显示器的接口方法和编程方法
2 .掌握键盘扫描和数码管显示器的工作原理
二、 实验内容
利用实验仪上的键盘扫描电路和显示电路 , 做一个扫描键盘和数码显示实验 , 把按键
输入的键码在六位数码管上显示出来。实验程序分为三个模块:
① 键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
② 显示模块:将显示单元的内容在显示器上动态显示。
|