?? 8279.txt
字號:
(1)8279的初始化程序
8279初始化主要是設置其鍵盤/顯示方式、分頻系數等。初始化子程序如下:
匯編程序:
INIT:MOV DPTR,#7FFFH ;命令/狀態口地址
MOV A,#0D1H ;清除顯示命令
MOVX @DPTR,A ;命令送入
WAIT:MOVX A,@DPTR ;讀狀態
JB ACC.7,WAIT ;等待清除顯示RAM
MOV A,#2AH ;分頻系統為10,特征碼001
MOVX @DPTR,A ;分頻系統送入
MOV A,#00H ;鍵盤/顯示方式,特征碼000
MOVX @DPTR,A ;鍵盤/顯示方式送入
RET
C程序:
cs8279 = 0xd1;//8279清除
delay(2);
cs8279 = 0x00;//左邊輸入 八位字符顯示,外部譯碼鍵掃描方式,雙鍵互鎖
delay(2);
cs8279 = 0x2A;//10分頻,(ALE = 1/6 OSC)
delay(2);
cs8279 = 0x60;//讀8279RAM不自動加1
delay(2);
cs8279 = 0x90;//寫顯示RAM自動加1
(2)顯示子程序
8279在初始化后,只需把顯示數據(顯示字型段選碼)送入內部顯示緩沖區(其16個),就能自動完成掃描輸出,無需CPU干擾,提高了CPU的處理能力。
若要顯示CPU內部RAM地址30H至37H單元中的8個數據,顯示子程序如下:
DISP:MOV DPTR,#7FFFH ;命令/狀態口地址
MOV A,#90H ;寫顯示RAM命令,地址自動加1
MOVX @DPTR,A ;命令送入
MOV R0,#30H ;顯示數據首地址
MOV R7,#8 ;顯示數據個數
MOV DPTR,#7FFEH ;數據口地址
MOV A,@R0 ;取顯示數據(數據為段選碼)
LP:MOVX @DPTR,A ;寫入顯示RAM
INC R0 ;下一個顯示數據地址
DJNZ R7,LP ;8位數據未送完,繼續
RET
C程序:
void display()//數碼管顯示
{
uchar i,dispvalue;
for(i=0;i<8;i++)//將顯示緩沖區數據送數碼管顯示
dt8279 = table[cash[i]];//緩沖區內容送數碼管顯示
}
(3)鍵盤處理程序
8279所連接鍵盤是自動掃描并把掃描鍵值存入FIFO RAM中,當FIFO RAM中不為空時,INT輸出高電平通知CPU把數據取走,故鍵盤處理程序一般放在中斷服務程序中,中斷服務程序如下:
KEYCH:MOV DPTR,#7FFFH ;命令/狀態口地址
MOV A,#40H ;讀FIFO RAM命令,特征碼010
MOVX @DPTR,A ;命令送入
MOV DPTR,#7FFEH ;數據口地址
MOVX A,@DPTR ;鍵值讀入A
CJNE A,#00H,K0 ;判斷鍵值是否0號鍵,是,轉處理
CJNE A,#01H,K1 ;判斷鍵值是否1號鍵,是,轉處理
Μ ;其他鍵判斷程序(略)
CJNE A,#0FH,K16 ;判斷鍵值是否16號鍵,是,轉處理
JMP EXIT
K0: Μ ;0號鍵處理程序(略)
JMP EXIT
K1: Μ ;1號鍵處理程序(略)
JMP EXIT
K16:Μ
JMP EXIT ;16號鍵處理程序(略)
EXIT:RETI ;中斷返回
C程序:
void readkey() interrupt 0//按鍵中斷響應
{ unsigned char key,read;
EX0 = 0;//關中斷
cs8279 = 0x50; //8279讀FIFO自動加一
delay(5);
read = dt8279;
key = read & 0x3f;//取鍵值
EX0=1;//開中斷
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -