?? key.asm
字號:
//========================================================================================
// Progarm: The head file for key.asm in assembly view
// Arranged by: Andy Hsu
// Last modified date:
// 2000/06/23: first version
// 2000/07/20: modified
//
// Functions:
// F_Key_Scan_Initial;
// F_Key_Scan_ServiceLoop;
// F_Key_DebounceCnt_Down;
//
// call F_SP_GetCh;
//========================================================================================
.INCLUDE hardware.inc;
.RAM
.PUBLIC KeyBuf //保存鍵值
.VAR KeyBuf
.VAR KeyValue
.PUBLIC keysum //掃描有鍵按下的次數
.VAR keysum
.DATA
KeyTbl: //鍵盤編碼表
.DW 0x007F,0x00BF,0x00DF,0x00EF //K1,K2,K3,K4
.DW 0x00F7,0x00FB,0x00FD,0x00FE //K5,K6,K7,K8
.CODE
//*****************************************//
//鍵盤掃描函數
//函數名稱:unsigned F_Key_Scan()
//出口參數:按鍵值
//*******************************************//
.PUBLIC _SP_GetCh
_SP_GetCh: .proc
PUSH BP TO [SP]
R1=0x0000 //屏蔽數碼管顯示
[P_IOB_Data]=R1
R1=0x0100 //A0-A7為下拉輸入口,A8輸出低電平
[P_IOA_Dir]=R1
[P_IOA_Attrib]=R1
R1=0xfeff
[P_IOA_Data]=R1
NOP
NOP
NOP
R1=[P_IOA_Data] //讀入鍵碼
R1&=0x00ff //屏蔽高8位
CMP R1,0x00ff
JE NoKey //無鍵處理
[KeyBuf]=r1 //是否連續兩次按鍵掃描值相同
call Delay10ms
R1=0x00ff
R1&=[P_IOA_Data]
CMP R1,[KeyBuf]
JNE NoKey
R1=[KeyBuf] //取回鍵碼
BP=KeyTbl //對鍵碼進行8-3編碼,使K1-K7對應1-8鍵值
R1=0x0001
Check:
R3=[BP++]
CMP R3,[KeyBuf]
JE Key
R1+=0x0001
CMP R1,0x0009
JE NoKey
JMP Check
Key:
[KeyValue]=R1
WaitDebon:
R1=0x00ff //等待按鍵抬起
R1&=[P_IOA_Data]
CMP R1,0x00ff
JNE WaitDebon
R1=[KeyValue]
POP BP FROM [SP]
RETF
NoKey:
R1=0
[KeyBuf]=R1 //清鍵盤緩沖區
POP BP FROM [SP]
RETF
.endp
//****************************************//
//延時函數
//函數名稱:Delay10ms()
//****************************************//
Delay10ms:
R4=0x2FFF
Delay10LOOP:
R4-=1
JNZ Delay10LOOP
RETF
//========================================================================================
// End of key.asm
//========================================================================================
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -