;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;副程式名稱: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

 


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Joy 的頭像
    Joy

    正Man's World

    Joy 發表在 痞客邦 留言(0) 人氣()