;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;副程式名稱:INIT_8279
;功能:8279初始狀態設定
;使用暫存器:ACC,DPTR
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INIT8279:
MOV A,#0 ;8*8字元顯示,左近,編碼式,雙鍵鎖住
MOV DPTR,#IRADDR8279
MOVX @DPTR,A ;
MOV A,#00110010B ;規劃時序為CLOCK/18
MOVX @DPTR,A ;
MOV A,#11011111B ;清除顯示RAM資料為FFH
MOVX @DPTR,A ;並清除FIFO
NOTCLEAROK:
MOVX A,@DPTR ;讀取8279狀態字碼
JB A.7,NOTCLEAROK ;若未清除完畢,跳到NOTCLEAROK
MOV A,#01000000B ;設定讀取動作至FIFO RAM讀取
MOVX @DPTR,A ;
MOV A,#10010000B ;設定遞增寫入動作寫入至DISPLAY RAM
MOVX @DPTR,A ;
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;副程式名稱:press_key
;功能:查核是否按鍵,按鍵F0=1否則F0=0
;使用暫存器:ACC,DPTR,FO(PSW.5)
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
PRESSKEY:
CLR F0
MOV DPTR,#IRADDR8279
MOVX A,@DPTR ;讀取8279狀態字碼
ANL A,#0FH
JZ $1 ;鍵盤若無輸入值,跳至$1 F0=0
SETB F0
$1:
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;副程式名稱:TAKE_KEY_CODE
;功能:讀取按鍵值並儲存在key_code中
;使用暫存器:ACC
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
TAKEKEYCODE:
MOV DPTR,#DRADDR8279
MOVX A,@DPTR ;讀取FIFO RAM資料
PUSH A
ANL A,#00111000B ;擷取掃描值(SCAN CODE)
RR A ;掃描值x4
MOV B,A
POP A
ANL A,#00000111B ;擷取返回值(RETURN CODE)
ADD A,B ;鍵值= 掃描值x4 + 返回值
MOV KEYCODE,A
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;副程式名稱:CONVERT_DISPLAY_CODE
;功能:按鍵值轉換成七段顯示碼
;使用暫存器:ACC,DPTR
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
CONVERTDISPLAYCODE:
MOV A,KEYCODE
MOV DPTR,#CODETABLE
MOVC A,@A+DPTR ;讀取鍵值之七段碼
MOV DISPLAYCODE,A
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;副程式名稱:DISPLAY
;功能:顯示按鍵值
;使用暫存器:ACC,DPTR
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DISPLAY:
MOV A,DISPLAYCODE
MOV DPTR,#DRADDR8279
MOVX @DPTR,A ;寫入七段碼至DISPLAY RAM
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;CODE_TABLE 的資料為共陽型 7'S LED
;位元(7,6,5,4,3,2,1,0)連接
;7'S LED (d0T,g,f,e,d,c,b,a)
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
CODETABLE:
DB C0H,F9H,A4H,B0H ;0,1,2,3
DB 99H,92H,82H,F8H ;4,5,6,7
DB 80H,90H,88H,83H ;8,9,A,B
DB C6H,A1H,86H,8EH ;C,D,E,F
END
留言列表