数码管显示4x4键盘的键号仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
目录..................................................................................................................................................1
数码管显示4x4矩阵键盘的键号 2
摘要 2
关键词 2
第一章 硬件 2
AT89C51 2
4*4键盘 6
第二章 软件 9
KEIL4 9
汇编程序 10
Proteus 15
仿真电路图 17
第三章 实物 17
材料 17
实物展示 18
第四章 课程设计心得 19
参考文献 20
单片机源程序(汇编语言)如下:
- scan_code EQU 30H
- ORG 0000H
- JMP start
- ORG 0030H
- start:
- MOV P0,#0FFH ;初始化p0口,使输出无显示
- loop: ; 循环调用read—key获取键盘信息,若键盘按下,
- CALL read_key ; 则用R7返回键值信息
- CJNE R7,#0FFH,next ; 若R7返回值不为0xff,则调用显示函数
- JMP loop
- next: ;显示程序
- MOV A,R7
- MOV DPTR,#disp_code
- MOVC A,@A+DPTR
- MOV P0,A
- JMP loop
- read_key:
- MOV scan_code,#7FH
- MOV P1,#0FH
- MOV A,P1
- MOV R7,#0FFH
- CJNE A,#0FH,wait_key ;键盘按下则p1的值会改变
- JMP end_key
- wait_key:
- CALL delay_10ms ;延时10ms,若p1口仍右键按下,则跳到scan—key
- MOV A,P1
- MOV R7,#0FFH
- MOV R6,#4
- CJNE A,#0FH,scan_key
- JMP end_key
- scan_key:
- MOV P1,scan_code ;将0x7f循环右移并赋给P1
- MOV A,P1
- CJNE A,scan_code,get_key;p1的值改变则确定出其行数
- RR A
- MOV scan_code,A
- DJNZ R6,scan_key
- JMP end_key
- get_key:
- ; MOV P1,#0FH
- ; MOV R1,P1
- ; CJNE R1,#0FH,$
- MOV R7,#4
- get_key0:
- JNB ACC.0,add_r6;移位循环判断最低位,为0则确定其列数
- RR A
- DJNZ R7,get_key0
- MOV R7,#0FFH
- JMP end_key
- add_r6:
- DEC R6 ;从第0个键盘数起,数满(R6-1)*4个键盘,再加上第R6行
- MOV A,R6 ;的列数R7-1,便得第几个键盘按下
- MOV B,#4
- MUL AB
- DEC R7
- ADD A,R7
- MOV R7,A
- end_key:
- RET
- delay_10ms:
- MOV R7,#10
- delay0:
- MOV R6,#0FAH
- delay1:
- NOP ; 1us
- NOP ; 1us
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
数码管显示4x4矩阵键盘的键号.zip
(354.64 KB, 下载次数: 32)
|