本帖最后由 ahshmj 于 2015-7-31 13:49 編輯
8279鍵盤、顯示接口芯片
序號:6-10
生產廠家:Intel公司
特性:Intel8279芯片是一種通用的可編程序的鍵盤、顯示接口器件,單個芯片就能完成鍵盤輸入和LED
顯示控制兩種功能。其內部結構如圖6-10-1所示。8279包括鍵盤輸入和顯示輸出兩個部分。
鍵盤部分提供的掃描方式,可以和64個按鍵或傳感器的陣列相連。能自動消除開關抖動以及N個鍵
同時按下的保護。
顯示部分按掃描的方式工作。可以顯示8或16位LED顯示塊。
一、8279電路工作原理
根據結構框圖,分別介紹各部分電路工作原理。
1.I/O控制及數據緩沖器
數據緩沖器是雙向緩沖器,連接內、外總線,用于傳送CPU和8279之間的命令或數據;I/O控制線是
CPU對8279進行控制的引線。CS是8279的片選信號,CS=0時,8279才被允許讀出或寫入信息。WR、RD為來自
CPU的控制信號。
A0用于區別信息特性:A0=1時,表示數據緩沖器輸入為指令、輸出為狀態字;A=0時,輸入、輸出皆為數據。
2.控制與定時寄存器及定時控制
控制與定時寄存器用來寄存鍵盤及顯示的工作方式,以及由CPU編程的其它操作方式。這些寄存器一旦接受并鎖存送來的命令,就通過譯碼產生相應的信號,從而完成相應的控制功能。
定時控制包含基本記數鍵。首級計數器是一個可編程的N級計數器。N可以2~31之間由軟件編程,以便
從外界時鐘CLK分頻得到內部所需要的100KHZ時鐘。然后再經過分頻為鍵盤掃描提供適當的逐行掃描頻率和顯示掃描時間。
3.掃描計數器
掃描計數器有兩種工作方式。按編碼方式工作時,計數器作二進制記數。4位記數狀態從掃描線SL0~SL3
輸出,經外部譯碼器譯碼后,為鍵盤和顯示器提供掃描線;按譯碼方式工作時,掃描計數器的最低二位被譯碼后,從SL0~SL3輸出。因此,SL0~SL3提供了4中取1的掃描譯碼。
4.回復緩沖器、鍵盤去抖及控制
來自RL0~RL3的8根回復線的回復信號,由回復緩沖器緩沖并鎖存。
在鍵盤工作方式中,回復線作為行列式鍵盤的行列輸入線。在逐行列輸入時,在逐行列掃描時,回復線用來搜索每一行列中閉合的鍵。當某一鍵閉合時,去抖電路被置位,延時等待10ms后,再檢驗該鍵是否繼續閉和,并將該鍵的地址和附加的移位、控制狀態一起形成鍵盤數據被送入8279內部FIFO(先進先出)存儲器。鍵盤數據格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
控制 移位 掃描 回復
控制和移位(D6、D7)的狀態由兩個獨立的附加開關決定,而掃描(D5、D4、D3)和回復(D2、D1、D0)則是被按鍵置位的數據。D5、D4、D3來自動掃描計數器,是按下鍵的行列編碼,而(D7D7D7)則來自行/列計數器,它們是根據回復信號而確定的行/列編碼。
在傳感器開關狀態矩陣方式中,回復線的內容直接被送往和相應的傳感器RAM(即FIFO存儲器)。
在選通輸入方式中,回復線的內容在CNTL/STB線的脈沖上升沿被送入FIFO存儲器。
5.FIFO/傳感器及其狀態寄存器
FIFO/傳感器RAM是一個雙重功能的8×8RAM。
在鍵盤或選通方式工作時,它是FIFO存儲器,其輸入或讀出遵循先入先出的原則。FIFO狀態寄存器用于存放FIFO的工作狀態。例如,RAM是滿還是空;其中存有多少數據;是否操作出錯等。當FIFO存儲器不空,狀態邏輯將產生IRQ=1信號向CPU申請中斷。
在傳感器矩陣方式工作時,這個存儲器以是傳感器不是存儲器。它存放著傳感器矩陣中的每一個傳感器狀態。在此方式中,若檢索出傳感器的變化,IRQ信號變為高電平,向CPU申請中斷。
6.顯示RAM和顯示地址寄存器
顯示RAM用來存儲顯示數據。容量為16×8位。在顯示過程中,存儲的顯示數據輪流從顯示寄存器輸出。顯示寄存器分別為A、B兩組,OUTA0~3和OUTB0~3可以單獨送數,也可以組成一個8位的字。顯示寄存器的輸出與顯示掃描配合,不斷從顯示RAM中讀出顯示數據,同時輪流驅動被選中的顯示器件,以達到多路復用的目的,使顯示器件呈現穩定的顯示狀態。
顯示地址寄存器用來寄存由CPU進行讀/寫顯示RAM的地址,它可以由命令設定,也可以設置成每次讀寫或寫入之后自動遞減。
二.管腳、引線與功能
8279采用40引腳封裝,其管腳、引線功能如圖6-10-2所示。其引腳功能如下:
D0~D7(數據總線):雙向、三態總線,和系統數據總線相連;用于CPU和8279間的數據/命令傳遞。
CLK(系統時鐘):輸入線,為8279提供內部時鐘的輸入端。
RESET(復位):輸入線,當RESET=1時,8279復位,其復位狀態為:
16個字符顯示;
編碼掃描鍵盤--雙鍵鎖定;
程序時鐘編碼為31。
CS(片選):輸入線,當CS=0時8279被選中,允許CPU對其讀、寫,否則被禁止。
A0(數據選擇):輸入線。當A0=1時CPU寫入數據為命令字,讀出數據為狀態字;A0=0時CPU讀、寫的字節均為數據。
RD、WR(讀、寫信號):輸入線。低電平有效,來自CPU的控制信號,控制8279的讀、寫操作。
IRQ(中斷請求):輸出線。高電平有效。
在鍵盤工作方式中,當FIFO/傳感器RAM存有數據時,IRQ為高電平。CPU每次從RAM中讀出數據時,IRQ變為低電平。若RAM中仍有數據,則IRQ再次恢復高電平。
在傳感器工作方式中,每當檢測到傳感器狀態變化時,IRQ就出現高電平。
SL0~SL3(掃描線):輸出線。用來掃描鍵盤和顯示器。它們可以編程設定為編碼(4中取1)或譯碼輸出(16取1)。
RL0~RL7(回復線):輸入線。它們是鍵盤矩陣或傳感矩陣的列(或行)信號輸入線。
SHIFT(移位信號):輸入線、高電平有效。該輸入信號是鍵盤數據的最高位(D7),通常用來擴充鍵開關的功能,作為控制功能鍵用。
在選通輸入方式時,該信號的上升沿可將來自RL0~RL7的數據存入FIFO RAM中。
在傳感器輸入下,該信號無效。
OUTA0~OUTA3(A組顯示信號):輸出線。
OUTB0~OUTB3(B組顯示信號):輸出線。
這兩組引線都是顯示數據輸出線,與多位數字顯示的掃描線SL0~SL3同步,兩組可以獨立使用,也可以合并使用。
BD(顯示消隱):輸出線。低電平有效。該信號在數字切換顯示或使用消隱命令時,將顯示消隱。
三、命令格式與命令字
8279的操作方式是通過CPU對8279送入命令時來實現編程的。當數據選擇端A0置1時,CPU對8279寫入數據為命令字,讀出的數據為狀態字。
8279共有八條命令。其功能及命令字定義分述如下。
1.鍵盤/顯示方式設置命令字
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 D D K K K
其中:
D7、D6、D5=000方式設置命令特征位。
D D(D4、D3):來設定顯示方式,其定義如下:
00:8個字符顯示,左入口
00:16個字符顯示,左入口
00:8個字符顯示,右入口
00:16個字符顯示,右入口
所謂左入口,即顯示位置從最左一位(最高位)開始,以后逐次輸入的顯示字符逐個向右順序排列; 所謂右入口,即顯示位置從最右一位(最低位)開始,以后逐次輸入的顯示字符時,已有的顯示字符逐個向左順序移動。
KKK(D2、 D1、 D0):用來設定七種鍵盤、顯示工作方式:
000 編碼掃描鍵盤,雙鍵鎖定
001 譯碼掃描鍵盤,雙鍵鎖定
010 編碼掃描鍵盤,N鍵輪回
011 譯碼掃描鍵盤,N鍵輪回
100 編碼掃描傳感器矩陣
101 譯碼掃描傳感器矩陣
110 選通輸入,編碼顯示掃描
111 選通輸入,譯碼顯示掃描
雙鍵鎖定與N鍵輪回是多鍵按下時的兩種不同的保護方式。雙鍵鎖定為兩鍵同時按下提供的保護方法。再消顫周期里,如果有兩鍵同時按下,則只有其中一個鍵彈起,而另一個鍵保持在按下位置時,才被認可。N鍵輪回為N鍵同時按下的保護方法。當有若干鍵按下時,鍵盤掃描能夠根據發現他們的順序,依次將它們的狀態送入FIFO RAM中。
2.程序時鐘命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 P P P P P
其中:
D7、D6、D5=001為時鐘命令特征位。
PPPPP( D4、D3、D2、D1、D0)用來設定外部輸入CLK端的時鐘進行分頻的分頻數N。N取值為2~31。例如外部時鐘頻率為2MHZ,PPPPP被置為10100(N=20),則對輸入的外部時鐘20分頻,以獲得8279內部要求的100KMZ的基本頻率。
3.讀FIFO/傳感器RAM命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
0 1 0 AI X A A A
其中:
D7D6D5 =010為讀FIFO/傳感器RAM命令特征位。該命令字只在傳感器方式時使用。在CPU讀傳感器RAM之前,必須使用這條命令來設定傳感器RAM中的8個地址(每個地址一個字節)。
AAA(D2、D1、D0)為傳感器RAM中的八個字節地址。
AI(D4)為自動增量特征位。當AI=1時,每次讀出傳感器RAM后地址自動加1使地址指針指向下一個存儲單元。這樣,下一個數據便從下一個地址讀出,而不必重新設置讀FIFO/傳感器RAM命令。
在鍵盤工作方式中,由于讀出操做嚴格按照先入先出順序,因此,不需使用此命令。
4.讀顯示RAM命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
0 1 1 AI A A A A
其中:
D7D6D5 =011為讀顯示RAM命令字的特征位。該命令用來設定將要讀出的顯示RAM地址。
AAAA(D3、D2、D1、D0)用來尋址顯示RAM命令字的特征位。由位顯示RAM中有16個字節單元故需要4位尋址。
AI(D4)為自動增量特征位。當AI=1時,每次讀出后地址自動加1指向下一地址。
5.寫顯示RAM命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 AI A A A A
其中:
D7D6D5 =100為寫顯示RAM命令字的特征位。在寫顯示器RAM之前用該命令用來設定將要寫入的顯示RAM地址。
AAAA(D3、D2、D1、D0)為將要寫入的存儲單元地址。
AI(D4)為自動增量特征位。當AI=1時,每次寫入后地址自動加1指向下一次寫入地址。
6.顯示禁止寫入/消隱命令特征位
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 X IW
A IW
B BL
A BL
B
其中:
D7D6D5 =101為顯示禁止寫入/消隱命令特征位。
IW/A、IW/B(D3、D2)為A、B組顯示RAM寫入屏蔽位。由于顯示寄存器分成A、B兩組,可以單獨送數,故用兩位來分別屏蔽。當A組的屏蔽位D3=1時,A組的顯示RAM禁止寫入。因此,從CPU寫入顯示器RAM數據時,不會影響A的顯示。這種情況通常在采用雙4位顯示器時使用。因為兩個雙四位顯示器是相互獨立的。為了給其中一個雙四位顯示器輸入數據而又不影響另一個四位顯示器,因此必須對另一組的輸入實行屏蔽。
BL/A、BL/B(D1、D0)為消隱顯示位。用于對兩組顯示輸出消隱。若BL=1時,對應組的顯示輸出被消隱。當BL=0時,則恢復顯示。
7.清除命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
1 1 0 CD CD CD CF CA
其中:
D7D6D5 =110清除命令特征位。
CDCDCD(D4D3D2)用來設定清除顯示RAM方式。共有四種消除方式,見表6-10-1。
CF(D1)用來置空FIFO存儲器,當=1時,執行清除命令后,FIFO RAM被置空,使中斷輸出線復位。同時,傳感器RAM的讀出地址也被置0。
CA(D0)為總清的特征位。它兼有CD和CF的聯合效能。在CD=1時,對顯示的清除方式由D3、D2的編碼決定。
清除顯示RAM約需160μS。在此期間FIFO狀態時的最高位DU=1,表示顯示無效。CPU不能向顯示RAM寫入數據。
8.結束中斷/錯誤方式設置命令
命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
1 1 1 E × × × ×
其中:
D7D6D5 =111為該命令的特征位。此命令有兩種不同的作用。
(1)作為結束中斷命令。在傳感器工作方式中使用。每當傳感器狀態出現變化時,掃描檢測電路將其狀態寫入傳感器RAM,并啟動中斷邏輯,使IRQ變高,向CPU請求中斷,并且禁止寫入傳感器RAM。此時,若傳感器RAM讀出地址的自動遞增特征沒有置位(AI=0),則中斷請求IRQ在CPU第一次從傳感器RAM讀出數據時就被清除。若自動遞增特征已置位(AI=1),則CPU對傳感器RAM的讀出并不能清除IRQ,而必須通過給8279寫入結束中斷/錯誤方式設置命令才能使IRQ變低。因此在傳感器工作方式中,此命令用來結束傳感器RAM的中斷請求。
(2)作為特定錯誤方式設置命令。在8279已被設定為鍵盤掃描N鍵輪回方式以后,如果CPU給8279又寫入結束中斷/錯誤方式設置命令(E=1),則8279將以一種特定的錯誤方式工作。這種方式的特點是:在8279的消顫周期內,如果發現多個按鍵同時按下,則FIFO狀態字中的錯誤特征位S/E將置1,并產生中斷請求信號和阻止寫入FIFO RAM。
上述八種用于確定8279操作方式的命令字皆由D7D6D5特征位確定,輸入8279后能自動尋址相應的命令寄存器。因此,寫入命令字時唯一的要求是使數據選擇信號A0=1。
四、狀態格式與狀態字
8279的FIFO狀態字,主要用于鍵盤和選通工作方式,以指示FIFO RAM中的字符數和有無錯誤發生。其格式為:
D7 D6 D5 D4 D3 D2 D1 D0
DU S/E O U F N N N
其中:
DU( D7)為顯示無效特征位。當DU=1表示顯示無效。當顯示RAM由于清除顯示或全清命令尚未完成時,DU=1。
表6-10-1 CD位定義的清除方式
D4 D3 D2 清除方式
1 0 × 將顯示RAM全部清零
1 0 將顯示RAM清成20H(A組=0010;B組=0000)
1 1 將顯示RAM全部置1
0 不清除(若CA=1,則D3、D2仍有效)
;鍵盤和LED顯示程序 ; ;********************************************* ;*8279初始化* ;* KEYCOM為8279命令口KEYDAT為8279數據口* ;********************************************* KEYCOM XDATA 0E601H KEYDAT XDATA 0E600H KEYCAM EQU 30H;定義存放按鍵值RAM起始地址 ORG 0000H AJMP START ORG 0003H LJMP AAA ORG 0060H START: MOVR0,#10 MOVDPTR,#KEYCOM ;命令口地址 MOV A, #10H;鍵盤/顯示方式命令字8字符顯示左入口,編碼鍵盤,雙鍵鎖定 MOVX @DPTR,A MOV A,#34H;程序時鐘命令 26分頻對外部輸入時鐘 MOVX @DPTR,A MOV A,#0DFH ;清除顯示緩沖區命令 MOVX @DPTR,A BUSY1: MOVX A,@DPTR JBACC.7,BUSY1 MOV IE,#81H MOVDPTR,#KEYDAT MOV A,#0C8H MOVX @DPTR,A;字型送入8279 INC DPTR MOV A,#90H MOVX @DPTR,A;字位送入8279(顯示P) HA7S2:MOV30H,#80H MOV 31H,#40H HA7S3:MOVDPTR,#KEYCOM MOVX A ,@DPTR ANL A,#07H CJNE A,#00H,HA7S4; AJMP HA7S3 HA7S4:MOVDPTR ,#KEYDAT MOVX A,@DPTR MOV B,A ;取鍵值 MOV R1,#00H MOV DPTR,#KEYTAB ;數字鍵鍵值表 HA7S5:MOV A ,#00H MOVCA,@A+DPTR CJNE A , B,HA7S6;查鍵值表是否相同 AJMP HA7SA; 轉數字鍵處理程序 HA7S6:INCDPTR ;鍵值表地址加1 INC R1;查找次數加1 MOV A,R1 JB ACC.4,HA7S7;是功能鍵嗎? AJMPHA7S5 ; 繼續查找 HA7S7:MOVR1,#00H MOV DPTR,#KEYTAB1 ;功能鍵表地址 HA7S8:MOV A,#00H MOVCA,@A+DPTR ;取出功能鍵鍵值 CJNEA,B,HA7S9;鍵值相同嗎? AJMP HA7SC;轉功能鍵處理子程序 HA7S9:INCDPTR INC R1 MOV A,R1 JNBACC.2,HA7S8 ;繼續查找 LJMP START ;;;AJMP HA7SD;無按鍵返回 HA7SD:LJMPSTART HA7SA:MOV A,30H MOV DPTR,#0FE01H MOVX @DPTR,A; 字位送入8279 MOV A,R1 MOV R0,31H MOV @R0,A INC 31H MOV DPTR,#CDATA MOVCA,@A+DPTR;取字型代碼 MOVDPTR,#KEYDAT MOVX @DPTR,A;送8279顯示 INC 30H MOV A,30H ;字位加1 CJNEA,#88H,HA7SB; LJMP HA7S2 HA7SB:AJMPHA7S3 HA7SC:MOVDPTR ,#KJPADDR MOV A,R1 RL A ;;ADD A,R1 ADD A,#00H JMP @A+DPTR ; KJPADDR:LJMPLOOP0 LJMP LOOP1 LJMP LOOP2 KEYTAB: DB 0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH,0D1H,0D9H DB 0DAH,0C3H,0CBH,0D2H,0D3H,0DBH KEYTAB1:DB0E3H,0E2H,0E1H CDATA: DB0CH,9FH,4AH,0BH,99H,29H,28H,8FH,08H,09H,88H,38H,6CH,1AH,68H,0E8H LOOP0:MOVR5,#0CH;0 LJMP DISPC LOOP1:MOVR5,#9FH;1 LJMP DISPC LOOP2:MOVR5,#4aH;2 DISPC: MOVR6,#80H DISPC1: MOVDPTR ,#KEYCOM MOVX @DPTR,A;字位送8279 MOV A ,R5 MOVDPTR,#KEYDAT ;字形送8279 MOVX @DPTR ,A LCALL DELAY1 ;MOV A ,#0FFH ;MOVX @DPTR,A ;關顯示 ;INC R6 ; ;CJNER6,#88H,DISPC1 ;AJMP DISPC; LJMP HA7S2 AAA: NOP NOP RETI DELAY1:MOVR1,#0FAH DELAY2:NOP NOP DJNZR1,DELAY2 DJNZR0,DELAY1 RET END
|