?? 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; 按鍵執(zhí)行子程序
JMP MAIN
LJMP MAIN
;----------------子程序------------------
;---------------------------------
; 行列式鍵盤子程序部分
;---------------------------------
KEYBOARD:
MOV R0,#00H; r0寄存器保存鍵值,初始化清零
ROW: MOV KEYIN,#0FH; 線反轉(zhuǎn)法識別鍵盤的值,具體在下一節(jié)論述
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; 將讀到的行列信息轉(zhuǎn)化成鍵值。
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 ;按鍵執(zhí)行子程序
MOV A,R0; 讀出R0的鍵值對應的鍵值表內(nèi)容
MOVC A,@A+DPTR;
MOV R0,A;
KEY1: CJNE R0,#01H,KEY2; 判斷是否是key1
CPL P2.1; 是,則改變其亮滅狀態(tài)。
JMP KEYEND; 調(diào)轉(zhuǎn)到子程序尾。
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; 鍵值列表,可改動鍵值調(diào)整相應的鍵值安排
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 + -