📄 ex3-2.asm
字号:
;--------------程序信息-----------------
;文件名 : ex3-2.asm
;版本 : 1.0
;作者 :
;修改时间 :
;--------------程序说明------------------
;CHAP 3.2 行列式键盘输入实例
;-----------常量和变量声明---------------
KEYIN EQU P1; 定义宏变量,易于硬件连线更改时,程序的修改
;--------------预定义--------------------
ORG 0000H
LJMP START
;------------中断入口地址分配------------
;ORG 0003H
;LJMP INT0PRG
;ORG 000BH
;LJMP INT1PRG
;ORG 0013H;
;LJMP
;ORG 0030H
START:
MOV SP,#60H; 初始化堆栈指针
MOV R2,#0FFH;
;--------------初始化子程序--------------
MOV SP,60H;
;--------------主程序--------------------
MAIN:
LCALL KEYBOARD; 按键识别子程序
LCALL KEYEXE; 按键执行子程序
JMP MAIN
LJMP MAIN
;----------------子程序------------------
;---------------------------------
; 行列式键盘子程序部分
;---------------------------------
KEYBOARD:
MOV R0,#00H; r0寄存器保存键值,初始化清零
ROW: MOV KEYIN,#0FH; 线反转法识别键盘的值,具体在下一节论述
ROW00: JNB KEYIN.0,ROW0;
ROW01: JNB KEYIN.1,ROW1;
ROW02: JNB KEYIN.2,ROW2;
ROW03: JNB KEYIN.3,ROW3;
JMP KEYBOARD;
ROW0: LCALL delay10ms;
JB KEYIN.0,ROW01;
MOV R0,#00H;
JMP COL;
ROW1: LCALL delay10ms;
JB KEYIN.1,ROW02;
MOV R0,#01H;
JMP COL;
ROW2: LCALL delay10ms;
JB KEYIN.2,ROW03;
MOV R0,#02H;
JMP COL;
ROW3: LCALL delay10ms;
JB KEYIN.3,ROW;
MOV R0,#03H;
JMP COL;
COL: MOV KEYIN,#0FH;
COL00: JNB KEYIN.0, COL0;
COL01: JNB KEYIN.1, COL1;
COL02: JNB KEYIN.2, COL2;
COL03: JNB KEYIN.3, COL3;
JMP KEYBOARD;
COL0: CALL delay10ms;
JB KEYIN.4,COL01;
MOV A,#00H;
ORL A,R0;
MOV R0,A;
JMP KEY;
COL1: CALL delay10ms;
JB KEYIN.5,COL02;
MOV A,#10H;
ORL A,R0;
MOV R0,A;
JMP KEY;
COL2: CALL delay10ms;
JB KEYIN.6,COL03;
MOV A,#20H;
ORL A,R0;
MOV R0,A;
JMP KEY;
COL3: CALL delay10ms;
JB KEYIN.7,COL00;
MOV A,#30H;
ORL A,R0;
MOV R0,A;
JMP KEY;
JB KEYIN.4,COL01;
MOV A,#00H;
ORL A,R0;
MOV R0,A
JMP KEY;
KEY: MOV A,R0; 将读到的行列信息转化成键值。
SWAP A; R0的高位是行号,低位是列号
ANL A,#0FH; 则 键值=R0的高位×8+R0的低位
RL A;
RL A;
ADD A,R0;
ANL A,#0FH;
MOV R0,A; 把得到的键值存在R0中。
MOV KEYIN,#0FFH;
KEYBOARDEND:
RET;
KEYEXE: MOV DPTR,#KEYVA ;按键执行子程序
MOV A,R0; 读出R0的键值对应的键值表内容
MOVC A,@A+DPTR;
MOV R0,A;
KEY1: CJNE R0,#01H,KEY2; 判断是否是key1
CPL P2.1; 是,则改变其亮灭状态。
JMP KEYEND; 调转到子程序尾。
KEY2: CJNE R0,#02H,KEY3;
CPL P2.2
JMP KEYEND;
KEY3: CJNE R0,#04H,KEY4;
CPL P2.3
JMP KEYEND;
KEY4: CJNE R0,#08H,KEY5;
CPL P2.4
JMP KEYEND;
KEY5: CJNE R0,#10H,KEY6;
CPL P2.5
JMP KEYEND;
KEY6: CJNE R0,#20H,KEY7;
CPL P2.6
JMP KEYEND;
KEY7: CJNE R0,#40H,KEY8;
CPL P2.7
JMP KEYEND;
KEY8: CJNE R0,#80H,KEYEND;
CPL P2.0
JMP KEYEND;
KEYEND: RET;
;--------------中断子程序----------------
;---------------延时子程序---------------
Delay10ms: MOV R5,#04H;
DELAY20: MOV R6,#00F4H;
DELAY21: MOV R7,#033H;
DELAY22: DJNZ R7,DELAY22;
DJNZ R6,DELAY21;
DJNZ R5,DELAY20;
RET;
KEYVA: DB 01H,02H,03H,04H; 键值列表,可改动键值调整相应的键值安排
DB 05H,06H,07H,08H
DB 09H,00H,0AH,0BH
DB 0CH,0DH,0EH,0FH
END
;---------------注意事项-----------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -