?? ps2.asm
字號:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PS2鍵盤接口程序 ;;;;;;;;;;;;;;;;;;;;;;;
;; 言軍工作室 ;;;;;;;;;;;;;;;;;;;;;;;
;; 2005.7.10 ;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLOCK EQU P3.2 ;時鐘線
KDATA EQU P3.1 ;數據線
CAPSLOCK EQU 00H ;大小寫切換
SHIFT EQU 01H ;雙切換
BFLAG0 EQU 30H ;位計數
BFLAG1 EQU 31H ;位計數
BDATA0 EQU 32H ;數據暫存
BDATA1 EQU 33H
ORG 0000H
LJMP START
ORG 0003H
LJMP INTEX0 ;外部中斷0
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
START:CLR CAPSLOCK
CLR SHIFT
MOV BDATA0,#0
MOV BDATA1,#0
MOV BFLAG0,#9
MOV BFLAG1,#11
SETB EA
SETB EX0
LCALL INIT_LCD
AJMP $
DECODE:JNB CAPSLOCK,CODE0 ;譯碼
MOV DPTR,#TABLE0
AJMP CODE1
CODE0:MOV DPTR,#TABLE
CODE1:JNB SHIFT,CODE2
MOV DPTR,#TABLE1
CODE2:MOV A,BDATA0
MOVC A,@A+DPTR
MOV BDATA0,A
;CLR SHIFT
RET
TABLE:DB ' ',' ',' ',' ',' ',' ',' ',' '
DB ' ',' ',' ',' ',' ',' ','`',' '
DB ' ',' ',' ',' ',' ','q','1',' '
DB ' ',' ','z','s','a','w','2',' '
DB ' ','c','x','d','e','4','3',' '
DB ' ',' ','v','f','t','r','5',' '
DB ' ','n','b','h','g','y','6',' '
DB ' ',' ','m','j','u','7','8',' '
DB ' ',',','k','i','o','0','9',' '
DB ' ','.','/','l',';','p','-',' '
DB ' ',' ','"',' ','[','=',' ',' '
DB 58H,' ',' ',']',' ',' ',' ',' '
DB ' ',' ',' ',' ',' ',' ',' ',' '
DB ' ','1',' ','4','7',' ',' ',' '
DB '0','.','2','5','6','8',' ',' '
DB ' ','+','3','-','*','9',' ',' '
TABLE0:DB ' ',' ',' ',' ',' ',' ',' ',' '
DB ' ',' ',' ',' ',' ',' ','~',' '
DB ' ',' ',' ',' ',' ','Q','1',' '
DB ' ',' ','Z','S','A','W','2',' '
DB ' ','C','X','D','E','4','3',' '
DB ' ',' ','V','F','T','R','5',' '
DB ' ','N','B','H','G','Y','6',' '
DB ' ',' ','M','J','U','7','8',' '
DB ' ',',','K','I','O','0','9',' '
DB ' ','.','/','l',';','P','-',' '
DB ' ',' ','"',' ','[','=',' ',' '
DB 58H,' ',' ',']',' ',' ',' ',' '
DB ' ',' ',' ',' ',' ',' ',' ',' '
DB ' ','1',' ','4','7',' ',' ',' '
DB '0','.','2','5','6','8',' ',' '
DB ' ','+','3','-','*','9',' ',' '
TABLE1:DB ' ',' ',' ',' ',' ',' ',' ',' '
DB ' ',' ',' ',' ',' ',' ','~',' '
DB ' ',' ',' ',' ',' ','Q','!',' '
DB ' ',' ','Z','S','A','W','@',' '
DB ' ','C','X','D','E','$','#',' '
DB ' ',' ','V','F','T','R','%',' '
DB ' ','N','B','H','G','Y','^',' '
DB ' ',' ','M','J','U','&','*',' '
DB ' ','<','K','I','O',')','(',' '
DB ' ','>','?','l',':','P','_',' '
DB ' ',' ','"',' ','{','+',' ',' '
DB 58H,' ',' ','}',' ',' ',' ',' '
DB ' ',' ',' ',' ',' ',' ',' ',' '
DB ' ','1',' ','4','7',' ',' ',' '
DB '0','.','2','5','6','8',' ',' '
DB ' ','+','3','-','*','9',' ',' '
LCDDISP:;LCALL FIRST
MOV A,BDATA0
LCALL WRDATA
RET
INIT_LCD: ;液晶初始化
ACALL DL10MS
MOV A,#30H ;功能設定
ACALL WRCOM
ACALL DL500 ;延時500us
MOV A,#0CH
ACALL WRCOM
ACALL DL500
MOV A,#01H ;清屏
ACALL WRCOM
ACALL DL500
MOV A,#6H ;AC遞增
ACALL WRCOM
ACALL DL500
RET
FIRST:;MOV A,#80H
ACALL WRCOM
RET
SECOND:MOV A,#0C0H
ACALL WRCOM
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;寫指令
WRCOM:ACALL BUSY
CLR P1.0
CLR P1.1
MOV P0,A
NOP
SETB P1.2
NOP
CLR P1.2
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;寫數據
WRDATA:ACALL BUSY
SETB P1.0
CLR P1.1
MOV P0,A
NOP
SETB P1.2
NOP
CLR P1.2
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;讀忙
BUSY:PUSH ACC
WAIT:CLR P1.0
SETB P1.1
NOP
SETB P1.2
MOV A,P0
JB ACC.7,WAIT
CLR P1.2
POP ACC
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;延時程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DL500:MOV R6,#0FAH
LOOP1:DJNZ R6,LOOP1
RET
DL1MS:MOV R7,#2H
LOOP2:LCALL DL500
DJNZ R7,LOOP2
RET
DL10MS:MOV R5,#0AH
LOOP3:LCALL DL1MS
DJNZ R5,LOOP3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;外部中斷0程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTEX0:CLR EX0 ;中斷禁能
MOV A,BFLAG0 ;判斷第九位是否接收
JZ EX00
MOV C,KDATA ;右移一位
MOV A,BDATA0
RRC A
MOV BDATA0,A
DEC BFLAG0 ;位計數減一
DEC BFLAG1
LJMP EX0OUT
EX00:MOV A,BFLAG1 ;判斷11位是否接收
JZ EX01
DEC BFLAG1
AJMP EX0OUT
EX01:MOV A,BDATA0
CJNE A,#58H,EX02 ;是否是CAPSLOC鍵按下
CPL CAPSLOCK
AJMP EX06
EX02:CJNE A,#12H,EX03 ;是否是左SHIFT鍵按下
CPL SHIFT
AJMP EX06
EX03:CJNE A,#59H,EX04 ;是否是右SHIFT鍵按下
CPL SHIFT
AJMP EX06
EX04:CJNE A,#0F0H,EX05 ;鍵斷碼
AJMP EX06
EX05:LCALL DECODE ;調譯碼程序
LCALL LCDDISP ;調顯示程序
EX06:LCALL DL10MS ;延時10MS
MOV BDATA0,#0
MOV BFLAG0,#9 ;位計數重置數
MOV BFLAG1,#11
EX0OUT:SETB EX0 ;中斷使能
JNB CLOCK,$ ;低電平等待
RETI ;返回
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -