《單片機(jī)的接口技術(shù)》PPT課件.ppt
《《單片機(jī)的接口技術(shù)》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《單片機(jī)的接口技術(shù)》PPT課件.ppt(152頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、51單片機(jī)的I/O外設(shè)的接口,本章內(nèi)容,51單片機(jī)的鍵盤與顯示器接口 鍵盤、顯示器接口芯片8279,9.1 LED數(shù)碼管的接口,LED(Light Emitting Diode)發(fā)光二極管縮寫(xiě)。 LED數(shù)碼管是由發(fā)光二極管構(gòu)成的。,9.1.1 LED數(shù)碼管的結(jié)構(gòu) 常見(jiàn)的LED數(shù)碼管為“8”字型的,共計(jì)8段。每一段對(duì)應(yīng)一個(gè)發(fā)光二極管。有共陽(yáng)極和共陰極兩種,如圖9-1所示。 共陰極發(fā)光二極管的陰極連在一起,通常公共陰極接地。當(dāng)陽(yáng)極為高電平時(shí),發(fā)光二極管點(diǎn)亮。 共陽(yáng)極LED數(shù)碼管的發(fā)光二極管的陽(yáng)極連接在一起,公共陽(yáng)極接正電壓,當(dāng)某個(gè)發(fā)光二極管的陰極接低電平時(shí),發(fā)光二極管被點(diǎn)亮,相應(yīng)的段被顯示。,圖9
2、-1 8段LED數(shù)碼管結(jié)構(gòu)及外形,8段LED數(shù)碼管結(jié)構(gòu),8段LED數(shù)碼管的字型碼,為了使數(shù)碼管顯示不同的符號(hào)或數(shù)字,要把某些段發(fā)光二極管點(diǎn)亮,就要為L(zhǎng)ED數(shù)碼管提供段碼(字型碼)。 LED數(shù)碼管共計(jì)8段。正好是一個(gè)字節(jié)。習(xí)慣上是以“a”段對(duì)應(yīng)段碼字節(jié)的最低位。各段與字節(jié)中各位對(duì)應(yīng)關(guān)系如表9-1所示。,按照上述格式,顯示各種字符的8段LED數(shù)碼管的段碼如表10-2所示。,顯示各種字符的8段LED數(shù)碼管的段碼如表9-2所示,表9-2 8段LED段碼,其它顯示器,除 “8”字型的LED數(shù)碼管外,市面上還有“1”型、“米”字型和“點(diǎn)陣”型LED顯示器,如圖9-2所示。本章均以“8”字型的LED數(shù)碼管為
3、例。,圖9-2 其他各種字型的LED顯示器,9.1.2 LED數(shù)碼管工作原理,圖9-3所示為顯示4位字符的LED數(shù)碼管的結(jié)構(gòu)原理圖。N位位選線和8N條段碼線。段碼線控制顯示字型,而位選線控制著該顯示位的LED數(shù)碼管的亮或暗。,圖9-3 4位LED數(shù)碼管的結(jié)構(gòu)原理圖,LED靜態(tài)顯示方式 無(wú)論多少位LED數(shù)碼管,同時(shí)處于顯示狀態(tài)。 靜態(tài)顯示方式,各位的共陰極(或共陽(yáng)極)連接在一起并接地(或接+5V);每位的段碼線(adp)分別與一個(gè)8位的I/O口鎖存器輸出相連。如果送往各個(gè)LED數(shù)碼管所顯示字符的段碼一經(jīng)確定,則相應(yīng)I/O口鎖存器鎖存的段碼輸出將維持不變,直到送入另一個(gè)字符的段碼為止。正因?yàn)槿绱耍?/p>
4、靜態(tài)顯示方式的顯示無(wú)閃爍,亮度都較高,軟件控制比較容易。 圖9-4為4位LED數(shù)碼管靜態(tài)顯示器電路,各位可獨(dú)立顯示,靜態(tài)顯示方式接口編程容易,但是占用口線較多。 對(duì)圖9-4電路,若用I/O口線接口,要占用4個(gè)8位I/O口。因此在顯示位數(shù)較多的情況下,所需的電流比較大,對(duì)電源的要求也就隨之增高,這時(shí)一般都采用動(dòng)態(tài)顯示方式。,LED數(shù)碼管有靜態(tài)顯示和動(dòng)態(tài)顯示兩種顯示方式,圖9-4 4位LED靜態(tài)顯示電路,LED靜態(tài)顯示方式,LED動(dòng)態(tài)顯示方式,無(wú)論在任何時(shí)刻只有一個(gè)LED數(shù)碼管處于顯示狀態(tài),即單片機(jī)采用“掃描”方式控制各個(gè)數(shù)碼管輪流顯示。 在多位LED顯示時(shí),為簡(jiǎn)化硬件電路,通常將所有顯示位的段碼
5、線的相應(yīng)段并聯(lián)在一起,由一個(gè)8位I/O口控制,而各位的共陽(yáng)極或共陰極分別由相應(yīng)的I/O線控制,形成各位的分時(shí)選通。 圖9-5所示為一個(gè)4位8段LED動(dòng)態(tài)顯示電路。其中段碼線占用一個(gè)8位I/O口,而位選線占用一個(gè)4位I/O口。必須采用動(dòng)態(tài)的“掃描”顯示方式。即在某一時(shí)刻,只讓某一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),同時(shí),段碼線上輸出相應(yīng)位要有顯示的字符的段碼。,圖9-5 4位8段LED動(dòng)態(tài)顯示電路,LED動(dòng)態(tài)顯示方式,雖然這些字符是在不同時(shí)刻出現(xiàn),而在同一時(shí)刻,只有一位顯示,其他各位熄滅,由于余輝和人眼的“視覺(jué)暫留”作用,只要每位顯示間隔足夠短,則可以造成“多位同時(shí)亮”的假象
6、,達(dá)到同時(shí)顯示的效果。 LED不同位顯示的時(shí)間間隔(掃描間隔)應(yīng)根據(jù)實(shí)際情況而定。顯示位數(shù)多,將占大量的單片機(jī)時(shí)間,因此動(dòng)態(tài)顯示的實(shí)質(zhì)是以犧牲單片機(jī)時(shí)間來(lái)?yè)Q取I/O端口的減少。 圖9-6所示為8位LED動(dòng)態(tài)顯示2009.10.10的過(guò)程。圖9-6(a)所示為顯示過(guò)程,某一時(shí)刻,只有一位LED被選通顯示,其余位則是熄滅的; 圖9-6(b)所示為實(shí)際的顯示結(jié)果,人眼看到的是8位穩(wěn)定的同時(shí)顯示的字符。 動(dòng)態(tài)顯示的優(yōu)點(diǎn)是硬件電路簡(jiǎn)單,顯示器越多,優(yōu)勢(shì)越明顯。缺點(diǎn)是顯示亮度不如靜態(tài)顯示的亮度高。如果“掃描”速率較低,會(huì)出現(xiàn)閃爍現(xiàn)象。,LED動(dòng)態(tài)顯示方式,圖9-6 8位LED動(dòng)態(tài)顯示過(guò)程和結(jié)果,LED動(dòng)態(tài)
7、顯示方式,9. 2 單片機(jī)鍵盤接口技術(shù),鍵盤輸入需解決三個(gè)問(wèn)題 (1)判別是否有鍵按下?若有,進(jìn)入下一步工作。 (2)識(shí)別哪一個(gè)鍵被按下,并求出相應(yīng)的鍵值。 (3)根據(jù)鍵值,找到相應(yīng)鍵值的處理程序入口。,9.2.1 鍵盤接口的任務(wù),鍵盤輸入的特點(diǎn),常見(jiàn)鍵盤:觸摸式鍵盤、薄膜鍵盤和按鍵式鍵盤,最常用的是按鍵式鍵盤。按鍵實(shí)質(zhì)上就是一個(gè)開(kāi)關(guān)。如圖9-7(a)所示,按鍵開(kāi)關(guān)的兩端分別連接在行線和列線上,通過(guò)鍵盤開(kāi)關(guān)機(jī)械觸點(diǎn)的斷開(kāi)、閉合,其行線電壓輸出波形如圖9-7(b)所示。,圖9-7 鍵盤開(kāi)關(guān)及其行線波形,鍵盤輸入的特點(diǎn),圖9-7(b)所示的t1和t3分別為鍵的閉合和斷開(kāi)過(guò)程中的抖動(dòng)期(呈現(xiàn)一串負(fù)脈
8、沖),抖動(dòng)時(shí)間長(zhǎng)短與開(kāi)關(guān)的機(jī)械特性有關(guān),一般為510ms,t2為穩(wěn)定的閉合期,其時(shí)間由按鍵動(dòng)作確定,一般為十分之幾秒到幾秒,t0、t4為斷開(kāi)期。,圖9-7 鍵盤開(kāi)關(guān)及其行線波形,按鍵的識(shí)別,鍵的閉合與否,行線輸出電壓上就是呈現(xiàn)高電平或低電平。高電平,表示鍵斷開(kāi),低電平則表示鍵閉合,通過(guò)對(duì)行線電平的高低狀態(tài)的檢測(cè),可確認(rèn)按鍵按下以及按鍵釋放與否。 為了確保對(duì)一次按鍵動(dòng)作只確認(rèn)一次按鍵有效,必須消除抖動(dòng)期t1和t3的影響。通常t1和t3小于10ms。按鍵閉合時(shí)的電壓抖動(dòng)波形見(jiàn)圖9-8。,圖9.8 鍵閉合和斷開(kāi)時(shí)的電壓抖動(dòng),如何消除按鍵的抖動(dòng),按鍵去抖動(dòng)的方法有兩種: 一種軟件延時(shí),思想是:在檢測(cè)到
9、有鍵按下時(shí),該鍵所對(duì)應(yīng)的行線為低電平,執(zhí)行一段延時(shí)10ms的子程序后,確認(rèn)該行線電平是否仍為低電平,如果仍為低電平,則確認(rèn)該行確實(shí)有鍵按下。當(dāng)按鍵松開(kāi)時(shí),行線的低電平變?yōu)楦唠娖剑瑘?zhí)行一段延時(shí)10ms的子程序后,檢測(cè)該行線為高電平,說(shuō)明按鍵確實(shí)已經(jīng)松開(kāi)。采取本措施,可消除兩個(gè)抖動(dòng)期t1和t3的影響。 另一種是采用專用的鍵盤/顯示器接口芯片,這類芯片中都有自動(dòng)去抖動(dòng)的硬件電路,9. 2.2 鍵盤工作原理,鍵盤可分為兩類:非編碼鍵盤和編碼鍵盤。 非編碼鍵盤 非編碼鍵盤是利用按鍵直接與單片機(jī)相連接而成,它通常使用在按鍵數(shù)量較少,系統(tǒng)功能較簡(jiǎn)單,需處理的任務(wù)較少的場(chǎng)合,可以降低成本、簡(jiǎn)化電路設(shè)計(jì)。非編碼
10、鍵盤可分為獨(dú)立式和矩陣式。 (1)獨(dú)立式鍵盤: 結(jié)構(gòu):一組相互獨(dú)立的鍵盤,每個(gè)鍵盤都與單片機(jī)的I/O口的一條口線連接,相互獨(dú)立。獨(dú)立式鍵盤的結(jié)構(gòu)見(jiàn)圖9-9。 原理:當(dāng)任何一個(gè)鍵被按下時(shí),與其相連的輸入線被置成 “0”,平時(shí)該線為“1”。通過(guò)檢測(cè)I/O輸入線的電平狀態(tài),判斷哪個(gè)按鍵被按下。 特點(diǎn):接口簡(jiǎn)單,但若鍵較多,將占用許多I/O線。,,,圖9-9 獨(dú)立式鍵盤結(jié)構(gòu),對(duì)于圖9-8的鍵盤,圖中的上拉電阻保證按鍵釋放時(shí),輸入檢測(cè)線上有穩(wěn)定的高電平。,鍵處理子程序,KEYIN: MOVA,#0FFH;置P1口為“1”,設(shè)置P1口為輸入狀態(tài) MOVP1,A MOVA,P1 ;輸入鍵狀態(tài) CJNEA,#
11、0FFH,QUDOU;有鍵按下,跳去抖動(dòng) LJMPRETURN;無(wú)鍵按下,返回 QUDOU: MOV R3,A;8個(gè)按鍵的狀態(tài)送R3保存 LCALL DELAY10;調(diào)用延時(shí)子程序,軟件去鍵抖動(dòng) MOVA,P1;再一次讀入8個(gè)按鍵的狀態(tài) CJNEA,R3,RETURN;兩次鍵值比較,不同,是抖動(dòng)引起,轉(zhuǎn)RETURN JNBACC.0,P0F;查詢0號(hào)鍵 JNBACC.1,P1F;查詢1號(hào)鍵 JNBACC.2,P2F;查詢2號(hào)鍵 JNBACC.3,P3F;查詢3號(hào)鍵 JNBACC.4,P4F;查詢4號(hào)鍵 JNB ACC.5,P5F;查詢5號(hào)鍵 JNB ACC.6,P6F;查詢6號(hào)鍵 JNB AC
12、C.7,P7F;查詢7號(hào)鍵,鍵處理程序(續(xù)),LJMPRETURN P0F:LJMPPROM0;入口地址表 P1F:LJMPPROM1 P6F:LJMPPROM6 P7F:LJMPPROM7 PROM0:;0號(hào)鍵功能程序 LJMPRETURN;0號(hào)鍵處理完返回鍵盤掃描 PROM7: ;7號(hào)鍵功能程序 LJMPRETURN;7號(hào)鍵處理完返回鍵盤掃描 RETURNRET,(2)矩陣式(行列式)鍵盤,結(jié)構(gòu):鍵的數(shù)目多,將鍵按行列排成矩陣形式。矩陣式鍵盤由行線和列線組成,按鍵位于行、列線的交叉點(diǎn)上。圖9-10為44的矩陣式鍵盤結(jié)構(gòu)。 優(yōu)點(diǎn):在按鍵數(shù)目較多的場(chǎng)合,節(jié)省I/O口線,圖9-10 44矩陣式鍵
13、盤結(jié)構(gòu),矩陣式(行列式)鍵盤的按鍵識(shí)別,矩陣式鍵盤按鍵的識(shí)別方法分為掃描法和反轉(zhuǎn)法。 掃描法 第1步,識(shí)別鍵盤有無(wú)鍵按下: 列線輸出全0 然后輸入行線狀態(tài),若行線狀態(tài)為全1( 1111 )則沒(méi)有鍵按下; 若行線狀態(tài)一定不為全為1,則一定有任一鍵按下。 第2步,識(shí)別出具體的鍵位: 逐列掃描,先第一列輸出為0,其他列為1,列編碼為1110。然后輸入行線狀態(tài),若行線狀態(tài)為全1( 1111 ),即按鍵不在此列線交叉點(diǎn)上,繼續(xù)掃描。 第二列輸出為0,其他列為1,列編碼為1101,再輸入行線狀態(tài),若行狀態(tài)不是全1,即按鍵在該列交叉點(diǎn)上,否則繼續(xù)掃描。,掃描法識(shí)別按鍵,將此時(shí)的掃描列碼與行碼組合得到的按鍵碼
14、,即可確定按鍵的位置。 如圖9-10所示的“3”鍵,它位于第4列和第1行交叉點(diǎn)上,其列碼為:0111,行碼為:1110,鍵碼為:0111,1110B = 7EH,圖9-10 44矩陣式鍵盤結(jié)構(gòu),每個(gè)鍵的鍵碼,,負(fù)邏輯表示----行列線數(shù)據(jù)求反組合,上例中的各鍵值分別為: 88H84H82H81H 48H44H42H41H 28H24H22H21H 18H14H12H11H,正邏輯表示----行列線數(shù)據(jù)直接組合,圖9-10中的各鍵碼分別為: 77H7BH7DH7EH B7HBBHBDHBEH D7HDBHDDHDEH E7HEBHEDHEEH,線反轉(zhuǎn)法,讓行線編程為輸入線,列線編程為輸出線,并使
15、輸出線輸出為全低電平,則行線中電平由高變低的所在行為按鍵所在行。 再把行線編程為輸出線,列線編程為輸入線,并使輸出線輸出為全低電平,則列線中電平由高變低所在列為按鍵所在列。 線反轉(zhuǎn)法只需經(jīng)過(guò)兩步便能獲得此按鍵所在的行列值,比較簡(jiǎn)練。 下面以圖9-11所示的矩陣式鍵盤為例,介紹線反轉(zhuǎn)法的具體步驟。,圖9-11 采用線反轉(zhuǎn)法的矩陣式鍵盤,線反轉(zhuǎn)法,假設(shè)鍵3被按下。 第一步,P1.0P1.3輸出全為“0”,然后,讀入P1.4P1.7線的狀態(tài),結(jié)果P1.4=0,而P1.5P1.7均為1,因此,第1行出現(xiàn)電平的變化,說(shuō)明第1行有鍵按下; 第二步,讓P1.4P1.7輸出全為“0”,然后,讀入P1.0P1.
16、3位,結(jié)果P1.0=0,而P1.1P1.3均為1,因此第4列出現(xiàn)電平的變化,說(shuō)明第4列有鍵按下。 綜上所述,即第1行、第4列按鍵被按下,此按鍵即鍵3按下。,圖9-11 采用線反轉(zhuǎn)法的矩陣式鍵盤,鍵盤接口完成的主要功能:,鍵盤掃描:判斷是否有鍵按下; 鍵識(shí)別:確定閉合鍵的行列位置; 產(chǎn)生閉合鍵鍵碼; 排除多鍵、串鍵(復(fù)按)及去抖動(dòng)。,鍵的識(shí)別和鍵功能實(shí)現(xiàn),鍵的識(shí)別由接口電路完成,即鍵盤接口問(wèn)題; 鍵的功能實(shí)現(xiàn)由中斷程序完成。,鍵處理子程序,在計(jì)算機(jī)中每一個(gè)鍵都對(duì)應(yīng)一個(gè)處理子程序,得到閉合鍵的鍵碼后,轉(zhuǎn)相應(yīng)的健處理子程序,實(shí)現(xiàn)該鍵所設(shè)定的功能。,鍵處理程序的流程如圖9-12,圖9-12鍵處理流程圖
17、,9.3 51單片機(jī)鍵盤接口和鍵功能的實(shí)現(xiàn),單片機(jī)的鍵盤鍵接口可以有多種方法實(shí)現(xiàn)。 使用單片機(jī)本身的并行口或串行口; 使用通用接口芯片(8255、8155等); 使用專用接口芯片如8279,周立功公司的ZLG7289A,ZLG7290B,MAX7219,南京沁恒公司的CH451,HD7279和BC7281等。 在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)中,一般都是把鍵盤和顯示器放在一起考慮。也有的系統(tǒng)僅單獨(dú)需要鍵盤或顯示器。介紹幾種實(shí)用的鍵盤/顯示器接口的設(shè)計(jì)方案。,9.3.1 利用AT89S51串行口實(shí)現(xiàn)的鍵盤/顯示器接口(舉例),使用AT89S51的串行口的方式0的輸出方式,構(gòu)成鍵盤/顯示器接口,如圖9-13所
18、示。 8個(gè)74LS164:74LS164(0)74LS164(7)作為8位LED數(shù)碼管的段碼輸出口,AT89S51的P3.4、P3.5作為兩行鍵的行狀態(tài)輸入線,P3.3作為TXD引腳同步移位脈沖輸出控制線,P3.3=0時(shí),與門封死,禁止同步移位脈沖輸出。這種方案主程序可不必掃描顯示器,軟件設(shè)計(jì)簡(jiǎn)單,使單片機(jī)有更多的時(shí)間處理其他事務(wù)。 下面列出顯示子程序和鍵盤掃描子程序。,圖9-13 用AT89S51串行口擴(kuò)展鍵盤/顯示器,顯示子程序:,DIR: SETBP3.3; P3.3=1,允許TXD腳同步移位脈沖輸出 MOVR7,08H; 送出的段碼個(gè)數(shù) MOVR0,7FH; 7FH78H為顯示數(shù)據(jù)
19、緩沖區(qū) DL0: MOV A,R0; 取出要顯示的數(shù)送A ADD A,0DH; 加上偏移量 MOVC A,APC; 查段碼表SEGTAB, 取出段碼 MOV SBUF ,A; 將段碼送串行口的SBUF DL1: JNB TI,DL1; 查詢1個(gè)字節(jié)的段碼輸出完否? CLRTI; 1字節(jié)的段碼輸出完,清TI標(biāo)志 DECR0; 指向下一個(gè)顯示數(shù)據(jù)單元,DJNZR7,DL0;段碼個(gè)數(shù)計(jì)數(shù)器R7是否為0,如不 ;為0,繼續(xù)送段碼 CLR P3.3; 8個(gè)段碼輸出完畢,關(guān)閉顯示器輸出 RET ; 返回 SEGTAB: DB 0C0H,0F9H,0A4H,0B0H;共陽(yáng)極段碼表 DB99H,9
20、2H,82H,0F8H,90H DB88H,83H,0C6H,0A1H,86H DB8FH,0BFH,8CH,0FFH,0FFH,顯示子程序:,鍵盤掃描子程序:,KEYI:MOVA,00H; 判斷有無(wú)鍵按下, 使所有列線為0 MOVSBUF,A; 掃描鍵盤的(8)號(hào)74LS164輸出為 ;00H,使所有列線為0 KL0: JNBTI,KL0; 串行輸出完否? CLRTI; 串行輸出完畢,清TI KL1:JNBP3.4,PK1; 第1行有閉合鍵嗎?如有,跳PK1進(jìn)行處理 JB P3.5,KL1; 在第2行鍵中有閉合鍵嗎?無(wú)閉合鍵跳KL1 PK1: ACALL DL10; 調(diào)用延時(shí)10ms
21、子程,軟件消抖動(dòng) JNB P3.4,PK2; 判斷是否由抖動(dòng)引起? JB P3.5,KL1 PK2: MOV R7,08H; 不是抖動(dòng)引起的 MOV R6,0FEH;判別是哪一個(gè)鍵按下,F(xiàn)EH為最左1列為低 MOV R3,00H; R3為列號(hào)寄存器 MOV A,R6 KL5: MOV SBUF,A; 列掃描,列掃描碼從串行口輸出,KL2: JNB TI,KL2;等待串行口發(fā)送完 CLR TI;串行口發(fā)送完畢,清TI標(biāo)志 JNB P3.4,PKONE;讀第1行線狀態(tài),第1行有鍵閉合跳PKONE JB P3.5,NEXT;讀第2行狀態(tài),2行某鍵否? MOV R4,08H;2行中有鍵
22、被按下,行首鍵號(hào)08H送R4 AJMP PK3 PKONE:MOV R4,00H;1行鍵中有鍵按下,行首鍵號(hào)00H送R4 PK3: MOV SBUF,00H;等待鍵釋放,發(fā)送00H使所有列線為低 KL3: JNB TI,KL3; 判1個(gè)字節(jié)是否發(fā)送完畢 CLR TI; 發(fā)送完畢,清標(biāo)志 KL4: JNB P3.4,KL4; 判行線狀態(tài) JNB P3.5,KL4 MOV A,R4; 兩行線均為高,說(shuō)明鍵已釋放 ADD A,R3; 計(jì)算得鍵碼A RET,鍵盤掃描子程序:,NEXT:MOV A,R6;列掃描碼左移一位,判下一列鍵 RL A MOV R6,A; 記住列掃描碼于R6中
23、 INC R3; 列號(hào)增1 DJNZ R7,KL5; 列計(jì)數(shù)器R7減1,8列鍵都檢查完否? AJMP KEYI; 8列掃描完,開(kāi)始下一個(gè)鍵盤掃描周期 DL10: MOV R7,0AH; 延時(shí)10ms子程序 DL: MOV R6,0FFH DL6: DJNZ R6,DL6 DJNZ R7,DL RET,鍵盤掃描子程序:,本例中,如只需LED數(shù)碼管顯示部分,可把鍵盤部分的電路去掉即可;如只需鍵盤,可把LED數(shù)碼管部分的電路去掉。,9.3.2 使用8155作為鍵盤接口,接口電路邏輯圖(見(jiàn)圖9-14),圖9-14 8031用8155擴(kuò)展I/O口組成的矩陣式鍵盤連線圖,8155 PA口地址7F01H
24、 PC口地址7F03H,判斷有無(wú)鍵按下,PA口輸出00H,PC口輸入行狀態(tài)信號(hào); 若PC3PC01111,有鍵按下,,去抖動(dòng),延時(shí)510ms后再判斷有無(wú)鍵按下,確認(rèn)哪個(gè)鍵被按下及其鍵號(hào),8155的PA口依次輸出下列掃描字:,鍵掃描及識(shí)別過(guò)程,8155:PA口輸出列掃描信號(hào),PC口輸入行狀態(tài)信號(hào),,,則每個(gè)鍵的鍵值(列行組合),FE E 、FD E 、 FB E 、F7 E 、EF E 、DE E 、BF E 、 7F E FE D 、FD D 、 FB D 、F7 D 、EF D 、DE D 、BF D 、7F D FE B 、FD B 、 FB B 、F7 B 、EF B 、DE B 、BF
25、 B 、 7F B FE 7 、 FD 7 、 FB 7 、F7 7 、EF 7 、 DE 7 、 BF 7 、 7F 7,每個(gè)鍵的鍵號(hào)(自己安排),N = 行首鍵號(hào)+列號(hào),確認(rèn)哪個(gè)鍵被按下及其鍵號(hào)(續(xù)),8155的PC口輸入行狀態(tài)可能為下列之一:,等待鍵釋放后再進(jìn)行進(jìn)一步處理。,鍵掃描程序框圖,入口,有鍵按下?,,,,,,延時(shí)12ms,有鍵按下?,,,,,,,,,,N,Y,N,Y,,鍵號(hào)入棧保存,按鍵抬起?,,,,N,Y,,,鍵號(hào)送A,,返回,,判斷按鍵是否抬起(以防止重復(fù)進(jìn)行鍵處理),,鍵掃描程序,ORG1000H KEY1: ACALLKS1;調(diào)用判斷有無(wú)鍵按下子程序 JNZLK1;有鍵
26、按下,轉(zhuǎn)去抖動(dòng) AJMPKEY1 ;無(wú)鍵按下,返回 LK1: ACALLTM12S ;延時(shí)12ms ACALLKS1;再查有無(wú)鍵按下 JNZLK2;確實(shí)有鍵按下,逐行掃描,確定具體鍵 AJMPKEY1;無(wú)鍵按下,返回 LK2: MOVR2 ,#0FEH;首列掃描字送R2 MOVR4 ,#00H;首列號(hào)R4 LK4: MOVDPTR ,#7F01H;首列掃描字送8155的PA口 MOVA ,R2;第一列掃描 MOVXDPTR ,A;使第i列為0(R2中Di位為0),鍵掃描程序(續(xù)),INCDPTR INCDPTR;指向8155的PC口 MOVXA ,DPTR;讀入行狀態(tài) JBACC.0 ,LON
27、E;0行無(wú)鍵按下,轉(zhuǎn)查1行 MOVA ,#00H;0行有鍵按下,行首鍵號(hào)#00H送A AJMPLKP;求鍵號(hào) LONE: JBACC.1 ,LTWO;1行無(wú)鍵按下,轉(zhuǎn)查2行 MOVA ,#08H;1行有鍵按下,行首鍵號(hào)#08H送A AJMPLKP;求鍵號(hào) LTWO: JBACC.2 ,LTHR;2行無(wú)鍵按下,轉(zhuǎn)查3行 MOVA ,#10H;2行有鍵按下,行首鍵號(hào)#10H送A AJMPLKP;求鍵號(hào) LTHR: JBACC.3 ,NEXT;3行無(wú)鍵按下,轉(zhuǎn)查下一列 MOVA ,#18H;3行有鍵按下,行首鍵號(hào)#18H送A,鍵掃描程序(續(xù)),LKP: ADDA ,R4;求鍵號(hào) = 行首鍵號(hào)+列號(hào)
28、PUSHACC;鍵號(hào)入棧 LK3: ACALLKS1;等待鍵釋放 JNZLK3;未釋放,繼續(xù)等待 POPACC;已釋放,鍵號(hào)送A RET NEXT: INCR4;指向下一列,列號(hào)加1 MOVA ,R2;判斷8列掃描完沒(méi)有 JNBACC.7,KND;8列掃描完,返回 RLA;沒(méi)掃描完,置下一列掃描字 MOVR2 , A;掃描字送A AJMPLK4;繼續(xù)下列掃描 KND: AJMPKEY1;8列掃描完,返回,鍵掃描程序(續(xù)),KS1: MOVDPTR,#7F01H;查有無(wú)鍵按下子程序 MOVA,#00H MOVXDPTR,A;8155 PA口輸出全掃描字#00H INCDPTR INCDPTR;指
29、向8155的PC口 MOVXA,DPTR;讀入行狀態(tài),若有鍵按下,則A0FFH CPLA;改成正邏輯,若有鍵按下,則A00H ANLA,#0FH;屏蔽高四位 RET;子程序返回,當(dāng)有鍵按下時(shí),AA00H T12sm: MOVR7,#18H;12sm延時(shí)子程序 TM: MOVR6,#0FFH TM6: DJNZR6,TM6;td=1+(1+255*2+2)*24+2*MC DJNZR7,TM RET,鍵操作及功能處理,求出鍵號(hào)后要進(jìn)行鍵處理: 先判斷是何種鍵,然后: 對(duì)數(shù)字鍵----送顯示緩沖區(qū)顯示; 對(duì)功能鍵----執(zhí)行相應(yīng)的功能鍵處理程序。,設(shè): 015號(hào)鍵為數(shù)字鍵,即鍵號(hào)<10H的是數(shù)字鍵
30、; 1631號(hào)鍵為功能鍵,即鍵號(hào)10H的是功能鍵; 其功能鍵處理程序入口地址分別為: AAA、BBB、CCC、PPP。,鍵操作及功能處理(續(xù)),ORG8000H KEYADR: MOVA,BUFF;鍵號(hào)送A CLRC SUBBA,#10H;Y與10H比較 JCDIGPRO;<10H,數(shù)字鍵,轉(zhuǎn) KEYTBL: MOV DPTR,#JMPTBL RLA;使鍵值為0、2、4、6、偶數(shù) AJMPA+DPTR,則轉(zhuǎn)入功能鍵處理程序清單如下:,,,,鍵操作及功能處理(續(xù)),JMPTBL: AJMPAAA;2 字節(jié)指令散轉(zhuǎn)到16個(gè)功能鍵處理 AJMPBBB; 程序入口 AJMPCCC AJMPDDD AJ
31、MPEEE AJMPFFF AJMPGGG AJMPHHH AJMPIII AJMPJJJ AJMPKKK AJMPLLL AJMPMMM AJMPNNN AJMPOOO AJMPPPP,9.3.2 各種專用的鍵盤/顯示器接口芯片簡(jiǎn)介,使用鍵盤接口專用芯片,可省去編寫(xiě)鍵盤/顯示器動(dòng)態(tài)掃描程序以及鍵盤去抖動(dòng)程序編寫(xiě)的繁瑣工作。 目前各種專用接口芯片種類繁多,各有特點(diǎn),總體趨勢(shì)是并行接口芯片逐漸退出,串行接口芯片越來(lái)越多的得到應(yīng)用。 早期的較為流行的鍵盤/顯示器芯片8279,目前流行的鍵盤/顯示器接口芯片均采用串行通信方式,占用口線少。常見(jiàn)的芯片有:周立功公司的ZLG7289A、ZLG7290B、
32、MAX7219、南京沁恒公司的CH451、HD7279和BC7281等。,可編程鍵盤/顯示器接口芯片8279,8279是一種專用于鍵盤/顯示器的可編程接口電路,能對(duì)鍵盤自動(dòng)掃描,給出閉合鍵的鍵碼,能自動(dòng)向數(shù)碼管顯示器輸出顯示代碼和位代碼。 其中鍵盤接口電路可與64鍵點(diǎn)陣式鍵盤聯(lián)接,具有二鍵封鎖或N鍵巡回功能,可自動(dòng)消除按鍵抖動(dòng)。 顯示器接口電路可與8位或16位數(shù)碼管顯示器聯(lián)接。,8279內(nèi)部結(jié)構(gòu),電路邏輯分為三個(gè)部分: (1)芯片接口控制邏輯 數(shù)據(jù)緩沖器 I/O控制電路 (2)鍵盤接口控制邏輯 掃描計(jì)數(shù)器 掃描回送電路 鍵盤去抖動(dòng)與控制電路 88FIFO/傳感器RAM與狀態(tài)電路 控制與時(shí)序寄存
33、器及時(shí)序控制電路,8279內(nèi)部結(jié)構(gòu),(3)顯示器接口控制邏輯 168顯示用RAM 顯示寄存器 顯示地址寄存器,電路邏輯結(jié)構(gòu)示于圖9-15,8279內(nèi)部結(jié)構(gòu),,圖9-15 8279的邏輯結(jié)構(gòu),8279內(nèi)部結(jié)構(gòu)圖,控制與定時(shí)寄存器:寄存鍵盤及顯示器工作方式,完成控制功能 定時(shí)控制:包括基本的計(jì)數(shù)器是可編程N(yùn)計(jì)數(shù)器,N由編程指定(231),對(duì)CLK分頻,獲得內(nèi)部所需100kHz工作時(shí)鐘;其他再分頻,為鍵盤及顯示器掃描提供掃描時(shí)鐘,4位的計(jì)數(shù)器,有譯碼、編碼兩種方式,由編程設(shè)定 譯碼方式:最低兩位經(jīng)譯碼,由SL03輸出,作為鍵盤及顯示器的掃描信號(hào).(任何時(shí)刻, SL03只有一個(gè)信號(hào)有效,實(shí)現(xiàn)4
34、選1) 編碼方式:計(jì)數(shù)器的狀態(tài)由SL03直接輸出,再經(jīng)外部譯碼,才能作為掃描信號(hào).(實(shí)現(xiàn)16選1),(1)芯片接口控制邏輯,實(shí)現(xiàn) 8279 和單片機(jī)接口,主要包括: 數(shù)據(jù)緩沖器 雙向、三態(tài)的數(shù)據(jù)緩沖器用于芯片內(nèi)部總線和系統(tǒng)總線的連接,進(jìn)行單片機(jī)和 8279 之間的數(shù)據(jù)傳送,信號(hào)引腳為 DBODB7。 I/O控制電路 I / O 控制電路用于接收單片機(jī)方面送來(lái)的控制信號(hào),并產(chǎn)生所需的8279內(nèi)部控制信號(hào),例如控制數(shù)據(jù)緩沖器的數(shù)據(jù)輸入輸出等。 中斷請(qǐng)求產(chǎn)生電路 根據(jù)鍵盤存儲(chǔ)區(qū)的狀態(tài)產(chǎn)生中斷請(qǐng)求信號(hào)。,(2)鍵盤接口控制邏輯,掃描計(jì)數(shù)器 掃描計(jì)數(shù)器電路用于為鍵盤提供掃描信號(hào), 4 位掃描信號(hào)從掃描線
35、 SL3SL0輸出,并具有兩種輸出形式 譯碼方式(也稱內(nèi)部譯碼形式) 指掃描代碼直接由掃描線SL0SL3輸出,每次只有1位是低電平(4選1) 編碼方式(也稱外部譯碼形式) 指掃描代碼經(jīng)SL0SL3外接譯碼器輸出 SL3SL0輸出波形見(jiàn)圖9-16,圖9-16 掃描輸出波形,(2)鍵盤接口控制邏輯(續(xù)),控制與時(shí)序寄存器及時(shí)序控制電路 用于對(duì)鍵盤掃描進(jìn)行控制。 時(shí)序控制部件包括基本定時(shí)計(jì)數(shù)器,其中第一個(gè)N計(jì)數(shù)器是一個(gè)N預(yù)分頻定標(biāo)器,可通過(guò)編程使內(nèi)部時(shí)序與CPU相適應(yīng)。 預(yù)分頻定標(biāo)器的分頻系數(shù)可由程序設(shè)定為231。使內(nèi)部計(jì)數(shù)頻率為100KHz時(shí),給出5.1mS的鍵盤掃描時(shí)間和10.3mS的去抖動(dòng)時(shí)間
36、。 其它計(jì)數(shù)器將此基本計(jì)數(shù)頻率再分頻,以提供適當(dāng)?shù)逆I掃描、行掃描、鍵盤矩陣掃描及顯示器掃描時(shí)間。,(2)鍵盤接口控制邏輯(續(xù)),回送緩沖器與鍵盤去抖動(dòng)和控制電路 輸入每次掃描的列線RL0 RL7狀態(tài),以進(jìn)行閉合鍵的搜索。 回送緩沖器具有鎖存功能,對(duì)回送線RL7RL0上的信息進(jìn)行緩沖和鎖存。 在鍵盤工作方式下,對(duì)回送線逐條掃描,以確定該行中哪一個(gè)鍵閉合。當(dāng)去抖動(dòng)電路測(cè)得某一按鍵閉合后,等待10mS,然后再重新檢查該鍵是否閉合,如果仍然閉合,那么該鍵在陣列中的地址及SHIFT和CNTL的狀態(tài)被送入先進(jìn)先出寄存器FIFO。 在掃描傳感器矩陣方式下,每次掃描按鍵時(shí)直接把回送線上的內(nèi)容送入傳感器RAM的
37、相應(yīng)單元中去。 在選通輸入方式下,回送線的狀態(tài)將在控制/選通線上的脈沖上升沿送入先進(jìn)先出寄存器。,(2)鍵盤接口控制邏輯(續(xù)),FIFO/傳感器RAM與狀態(tài)電路 FIFO/傳感器RAM是一個(gè)雙功能88 RAM,在鍵盤或選通輸入方式下是一個(gè)先進(jìn)先出寄存器(FIFO); 信息輸入時(shí),每一組信息寫(xiě)入RAM中的下一單元,然后按寫(xiě)入順序讀出; FIFO狀態(tài)電路存放FIFO中的字符數(shù)目以及FIFO滿或空的狀態(tài); FIFO寫(xiě)入或讀出次數(shù)超過(guò)FIFO的容量時(shí),視為出錯(cuò); 在掃描傳感器矩陣方式下,該存儲(chǔ)器用作傳感器RAM; 當(dāng)檢測(cè)到一個(gè)傳感器狀態(tài)發(fā)生變化時(shí),IRQ變?yōu)楦唠娖?,向CPU發(fā)中斷請(qǐng)求,(3)顯示器接口
38、控制邏輯,顯示存儲(chǔ)區(qū) 8279 可連接8位和16位的 LED 顯示器; 為給每位顯示器提供顯示數(shù)據(jù),在8279 芯片中有一個(gè)168的RAM存儲(chǔ)區(qū),其中每一個(gè)8位 RAM 單元對(duì)應(yīng)一位LED顯示器,即0 到 15 地址對(duì)應(yīng) LED 顯示器的015 位,顯示器的0位在最左邊, 15 位在最右邊。 顯示緩沖器(顯示更新寄存器) 用于為顯示器提供段控?cái)?shù)據(jù); 使用時(shí),8279 自動(dòng)對(duì)顯示器掃描,將顯示緩沖器中的數(shù)據(jù)輸出在顯示器上顯示出來(lái)。,顯示器地址寄存器及顯示用RAM,顯示器地址寄存器用來(lái)存放CPU正在讀/寫(xiě)的字節(jié)地址,以及正在顯示的兩個(gè)4位的半字節(jié)地址。 讀/寫(xiě)地址由編程設(shè)定,也可設(shè)定每次讀/寫(xiě)后地
39、址自動(dòng)加1。 在設(shè)定適當(dāng)?shù)墓ぷ鞣绞胶偷刂芬院?,CPU可直接讀出顯示用RAM中的內(nèi)容。 A、B兩個(gè)半字節(jié)地址由8279自動(dòng)刷新,以便與CPU輸出值相對(duì)應(yīng)。 A、B兩半字節(jié)可以分別輸出,也可作為一個(gè)字節(jié)輸出,由工作方式確定。 數(shù)據(jù)送顯示器的方式可設(shè)定為左端送入,也可以設(shè)定為右端輸入。,8279 的信號(hào)引腳,8279共有40個(gè)引腳,采用雙列直插式封裝(見(jiàn)圖9-17),圖9-17 8279引腳與邏輯符號(hào)圖,8279的引腳功能如下:,(1)數(shù)據(jù)線 DB7DB0:數(shù)據(jù)輸入/輸出線,雙向,在接口電路中與系統(tǒng)數(shù)據(jù)總線相連,用以傳送CPU和8279之間的數(shù)據(jù)和命令。 (2)地址線 CS#:片選線。CS#=0,選
40、中8279。 A0:信息特征線。當(dāng)A0=1時(shí),為命令字及狀態(tài)字地址;當(dāng)A0=0時(shí),為片內(nèi)數(shù)據(jù)地址,故8279芯片占用2個(gè)端口地址。 (3)控制線 CLK:時(shí)鐘脈沖輸入端。,(3)控制線,RD#:讀信號(hào),輸入,低電平有效,將緩沖器中的數(shù)據(jù)讀出,送外部數(shù)據(jù)總線。 WR#:寫(xiě)信號(hào),輸入,低電平有效,將外部數(shù)據(jù)總線上的數(shù)據(jù)寫(xiě)入內(nèi)部單元。 IRQ:中斷請(qǐng)求,輸出,高電平有效。當(dāng)鍵被按下,F(xiàn)IFO RAM中有數(shù)據(jù)時(shí),該信號(hào)有效。 SL3SL0:掃描輸出線,用來(lái)掃描按鍵開(kāi)關(guān)或傳感器矩陣以及顯示器的各位數(shù)字。 RL7RL0:鍵掃描輸入(回送)線,通過(guò)按鍵或傳感器開(kāi)關(guān)與掃描線聯(lián)接,內(nèi)設(shè)上拉電路,使之保持為高電平
41、。當(dāng)某一按鍵閉合時(shí),其中一條變?yōu)榈碗娖?。在選通輸入方式下可作為8條輸入線。,(3)控制線,SHIFT:換檔線。來(lái)自外部鍵盤或傳感器矩陣的輸入信號(hào),它是8279鍵盤數(shù)據(jù)的次高位即D6位的狀態(tài),該位狀態(tài)控制鍵盤上/下檔功能。在傳感器方式和選通方式中,該引腳無(wú)用。 CNTL/STB:控制/選通輸入線,高電平有效。鍵盤方式時(shí),鍵盤數(shù)據(jù)最高位(D7)的信號(hào)輸入到該引腳,以擴(kuò)充鍵功能;選通方式時(shí),當(dāng)該引腳信號(hào)上升沿到時(shí),把RL0RL7的數(shù)據(jù)存入FIFO RAM中。 OUTA30,OUTB30:是164顯示器更新寄存器的兩個(gè)輸出端,輸出數(shù)據(jù)與掃描線(SL3SL0)同步,以供多路轉(zhuǎn)換數(shù)字顯示器使用。兩個(gè)端口可
42、并為一個(gè)8位端口使用。 OUTA30:通常作為顯示信號(hào)的高4位輸出線; OUTB30:通常作為顯示信號(hào)的低4位輸出線。,(3)控制線,BD#:空格顯示,輸出,低電平有效。在數(shù)字切換過(guò)程中使顯示器熄滅,或者由顯示熄滅命令使顯示器熄滅。 RESET:復(fù)位信號(hào)輸入端,高電平有效。 Vcc:5V電源。 Vss:地。,8279的工作方式,(1) 鍵盤工作方式 8279在鍵盤工作方式時(shí),可設(shè)置為雙鍵互鎖方式和N鍵循回方式 雙鍵互鎖方式: 若有兩個(gè)或多個(gè)鍵同時(shí)按下時(shí),不管按鍵先后順序如何,只能識(shí)別最后一個(gè)被釋放的鍵,并把該鍵值送入FIFO RAM中。 N鍵循回方式: 一次按下任意個(gè)鍵均可被識(shí)別,按鍵值按掃描
43、次序被送入FIFO RAM中。,(2)傳感器(掃描)方式,FIFO RAM中8個(gè)單元用于寄存?zhèn)鞲衅鞯默F(xiàn)時(shí)狀態(tài),又稱傳感器RAM,其地址編號(hào)與掃描線順序一致; 傳感器方式是把傳感器的開(kāi)關(guān)狀態(tài)送入傳感器RAM中。 當(dāng)CPU對(duì)傳感器陣列掃描時(shí),一旦發(fā)現(xiàn)傳感器陣列(最多為88位)中某一位狀態(tài)發(fā)生變化時(shí),產(chǎn)生IRQ(高電平),中斷響應(yīng)后轉(zhuǎn)入中斷處理程序。,(3)選通輸入方式 與8255A通輸入端口的功能完全一樣,CNTL/STB作為選通信號(hào),上升沿鎖存RL0RL7到FIFO RAM;,(4) 顯示方式,8279的顯示方式又可分為左端入口和右端入口方式; 顯示數(shù)據(jù)只要寫(xiě)入顯示RAM則可由顯示器顯示出來(lái),因
44、此顯示數(shù)據(jù)寫(xiě)入顯示RAM的順序,決定了顯示的次序; 左端入口方式:顯示位置從顯示器最左端1位(最高位)開(kāi)始,以后顯示的字符逐個(gè)向右順序排列; 顯示器位置編號(hào)與顯示RAM地址一一對(duì)應(yīng)(0號(hào)單元顯示在0號(hào)顯示器上); 右端入口方式:顯示位置從顯示器最右端1位(最低位)開(kāi)始,已顯示的字符逐個(gè)向左移位。 但無(wú)論左右入口,后輸入的總是顯示在最右邊。,8279的寄存器,8279共有三個(gè)寄存器: 命令寄存器 狀態(tài)寄存器 數(shù)據(jù)寄存器 命令和狀態(tài)寄存器對(duì)應(yīng)同一個(gè)地址。 (1)命令寄存器 命令寄存器是8位寄存器,只能寫(xiě),不能讀; 高3位( D7 、 D6、 D5)是命令的特征位,8種不同的狀態(tài)組合代表著不同的命令
45、。 命令的格式見(jiàn)表9-8,8279的寄存器(續(xù)),(2)狀態(tài)寄存器 8279 的狀態(tài)寄存器為 8 位寄存器,只能讀,不能寫(xiě); 用于在鍵輸入及選通輸入方式中,指出鍵數(shù)據(jù)緩沖器 FIFO RAM 中的數(shù)據(jù)字節(jié)個(gè)數(shù)和是否出錯(cuò)。 狀態(tài)字格式如表9-3,DU:顯示無(wú)效標(biāo)志, 當(dāng)清除命令尚未完成時(shí),該位置1 S/E:鍵盤輸入方式下作特殊錯(cuò)誤標(biāo)志,=1:多鍵同時(shí)按下 O:溢出標(biāo)志,向已滿的FIFO RAM寫(xiě)時(shí)置1 U:不足標(biāo)志,從已空的FIFO RAM讀時(shí)置1 F:表示 FIFO RAM 已滿(存有 8 個(gè)鍵碼) N2N1N0:FIFO RAM中字符的個(gè)數(shù),,表9-3 8279的狀態(tài)字格式,8279的寄存器
46、(續(xù)),狀態(tài)寄存器各位的意義 D2,D1,D0(N2,N1,N0):其值為 FIFO RAM 中數(shù)據(jù)的個(gè)數(shù); D3(F):D3=1,表示 FIFO RAM 已滿(存有 8 個(gè)鍵碼) D4(U):D4=1,表示“不足”錯(cuò)誤; D5(O):D5=1,表示“超出”錯(cuò)誤; D6(S/E):用于傳感器矩陣輸入方式,D6=1表示多鍵同時(shí)閉合; D7(Du):顯示無(wú)效標(biāo)志。 當(dāng)清除命令尚未完成時(shí),該位置1。,,8279的寄存器(續(xù)),(3)數(shù)據(jù)寄存器 數(shù)據(jù)寄存器實(shí)際上就是 FIFO RAM 中最前面的那個(gè)單元,其內(nèi)容為被按鍵的信息,通過(guò)讀它把鍵盤信息輸入單片機(jī)。 該寄存器的數(shù)據(jù)格式如表9-4所示: D2D1
47、D0:閉合鍵的列號(hào)(由RL7 RL0值確定); D5 D4D3:閉合鍵的行號(hào)(掃描計(jì)數(shù)值); D6: 換擋健 SHIFT 的狀態(tài); D7:控制健 CNTL 的狀態(tài)。 注意,在傳感器掃描方式和選通輸入方式中,輸入數(shù)據(jù)即為 RL7RL0的輸入狀態(tài)。,8279數(shù)據(jù)輸入/輸出格式,輸入/輸出數(shù)據(jù)不僅要先確定地址口,而且數(shù)據(jù)存放也要按一定格式,其格式在鍵盤和傳感器方式有所不同。,(1) 鍵盤掃描方式數(shù)據(jù)輸入格式(見(jiàn)表9-4),,D7:控制鍵 “CNTL”狀態(tài) D6:控制鍵 “SHIFT”狀態(tài) D5 D4 D3:被按鍵所在列號(hào)(由SL0---SL2)狀態(tài)確定) D2 D1 D0:被按鍵所在行號(hào)(由RL0-
48、--RL7)狀態(tài)確定,表9-4 鍵盤掃描方式數(shù)據(jù)輸入格式,8279數(shù)據(jù)輸入/輸出格式(續(xù)),(2)傳感器方式及選通方式數(shù)據(jù)輸入格式,,此種方式8位輸入數(shù)據(jù)為RL0---RL7的狀態(tài) 數(shù)據(jù)輸入格式見(jiàn)表9-5,表9-5 傳感器及選通方式的數(shù)據(jù)輸入格式,8279的命令字及其格式,8279的各種工作方式都要通過(guò)對(duì)命令寄存器的設(shè)置來(lái)實(shí)現(xiàn)。 8279共有8種命令,通過(guò)這些命令設(shè)置工作寄存器,選擇各種工作方式。 命令寄存器共8位,格式如下:,8279的命令字及其格式(續(xù)),8279的一條命令由兩大部分組成; 命令寄存器高3位D7D5為命令特征位,表征命令類型。D7D5三位的狀態(tài)可組合出8種形式,對(duì)應(yīng)8類命令
49、。 命令寄存器的低5位D4D0為命令的具體內(nèi)容。,8279的命令字類型設(shè)置,每種特征所代表的命令如表9-6所示,,表9-6 8279命令特征,(1) 鍵盤/顯示命令:(特征位 D7D6D5=000),D4、D3兩位用來(lái)設(shè)定4種顯示方式; D2、D1、D0三位用以設(shè)定8種鍵盤/顯示掃描方式 鍵盤/顯示命令格式見(jiàn)表9-7,,,,,,,,,,設(shè)置工作方式,00:8字符,左入口 01:16字符,左入口 10:8字符,右入口 11:16字符,右入口,00:鍵盤,雙鍵鎖定 01:鍵盤,N鍵輪回 10:傳感器掃描 11:選通輸入,0:編碼掃描 1:譯碼掃描,,表9-7 8279的鍵盤/顯示命令格式,顯示器方
50、式設(shè)置(見(jiàn)表9-8),,(1) 鍵盤/顯示命令(續(xù)),,鍵盤方式設(shè)置:,,(1) 鍵盤/顯示命令(續(xù)),譯碼掃描(內(nèi)譯碼):指掃描代碼直接由掃描線SL0SL3輸出,每次只有1位是低電平(4選1); 編碼掃描(外譯碼):是指掃描代碼經(jīng)SL0SL3外接譯碼器輸出 由于鍵盤最大88=64個(gè)鍵,由SL0SL2接3:8譯碼器,譯碼器的8位輸出作為鍵盤掃描輸出線(列線),RL0RL7為輸入線(行線)。 8279最多驅(qū)動(dòng)16位顯示器,故可由SL0SL3接4:16譯碼器,譯碼器的16位輸出作為顯示掃描輸出線(16選1),決定第幾位顯示。 顯示字段碼由OUTA0OUTA3和OUTB0OUTB3輸出。,例9-1:
51、若希望設(shè)置8279為鍵盤譯碼掃描方式、N鍵輪回,顯示8個(gè)字符、右端入口方式,確定其命令字。 根據(jù)題目要求可進(jìn)行分析,因?yàn)榫哂邢铝袟l件: 是鍵盤/顯示命令特征位:D7 D6 D5=000 (表9-6) ; 8個(gè)字符右端入口顯示:D4 D3=10(表9-8); 鍵盤譯碼掃描,N鍵輪回:D2 D1 D0=011(表9-9); 所以8位命令器存器狀態(tài)D7D0=00010011B,即該命令字13H送入命令寄存器口地址則可滿足題目要求。 例9-2:若已知命令字為08H,判斷8279工作方式。 因?yàn)槊钭譃?8H,即D7D0=00001000B,顯然D7 D6 D5=000,該條命令為鍵盤/顯示命令,D4D
52、3=01為16字符左端入口顯示方式,D2D1D0=000,鍵盤為編碼掃描、雙鍵鎖定方式。,(2)內(nèi)部時(shí)鐘設(shè)置命令( D7D6D5001 ),例9-3:若8279 CLK的輸入信號(hào)頻率為3.1 MHz,則分頻系數(shù)應(yīng)為31D=1FH,于是 D4D0=11111,控制字為:D7D0=00111111B=3FH,,,分頻目的:得到100KHz的基本工作時(shí)鐘,,(2)內(nèi)部時(shí)鐘設(shè)置命令(續(xù))(D7D6D5001),8279的內(nèi)部時(shí)鐘信號(hào)是由外部輸入的時(shí)鐘信號(hào)經(jīng)過(guò)分頻產(chǎn)生; 分頻系數(shù)由D4D0來(lái)設(shè)定,分頻系數(shù)范圍在231之間 有的設(shè)計(jì)會(huì)用單片機(jī)的ALE端接8279的CLK端,但ALE端輸出的脈沖頻率比827
53、9所需工作時(shí)鐘頻率(100KHz)高出很多,通過(guò)設(shè)置分頻系數(shù)就可使8279得到所需的時(shí)鐘頻率。,例9-4 已知80C51的fosc=12MHz,要求8279的內(nèi)部時(shí)鐘信號(hào)頻率為100kHz,求分頻系數(shù)N。 【解】: fosc=12MHz,fALE=1/6 fosc=2MHz = fCLK N=2MHz/100kHz =20D=10100B 因此,時(shí)鐘編程命令字:00110100B=34H。,(3)讀FIFO/傳感器RAM命令(D7D6D5=010)(表9-12),D2D0:為8279中FIFO及傳感器RAM的首地址 D3: 無(wú)效位。 D4 :控制RAM地址自動(dòng)加1位: D4=1時(shí),CPU讀
54、完一個(gè)數(shù)據(jù),RAM地址自動(dòng)加1,準(zhǔn)備讀下一個(gè)單元數(shù)據(jù); D4=0時(shí),CPU讀完一個(gè)數(shù)據(jù),地址不變。,鍵盤方式無(wú)效,寫(xiě)0,0:讀出后地址不變 1:每次讀出地址自動(dòng)加1,,例9-5:欲編程使單片機(jī)連續(xù)讀8279內(nèi)FIFO/傳感器RAM中000-111單元的數(shù)據(jù),設(shè)置讀命令。,分析: 因?yàn)橐B續(xù)讀數(shù),地址又連續(xù)。所以最好設(shè)置為自動(dòng)加1方式,即D4=1; RAM內(nèi)首地址000,即D2D0=000,再加上特征位,所以該命令控制字為:D7D0=01010000B=50H (無(wú)用位D3設(shè)為0); 送入50H控制字,在執(zhí)行讀命令時(shí),先從FIFO/傳感器RAM中000單元讀數(shù),讀完一個(gè)數(shù),地址自動(dòng)加1,又從00
55、1單元讀數(shù),依次類推,直到讀完所需數(shù)據(jù)。,(4)讀顯示緩沖器(RAM)命令(D7D6D5011),從 8279 向單片機(jī)讀出顯示數(shù)據(jù)(用于檢查)之前,應(yīng)先執(zhí)行該命令。命令格式如前表9-11 命令中 D3D0表示起始地址, D4位為自動(dòng)增量標(biāo)志 D41時(shí),每次讀出后,RAM地址自動(dòng)加 1 D40時(shí),每次讀出后,RAM地址不加 1,例9-6 欲讀顯示RAM中1000單元地址,求命令字。 分析:因?yàn)橹蛔x一個(gè)數(shù),地址不需自動(dòng)加1,即設(shè)置: D4=0,特征位為011,地址為1000, 所以其控制命令字為:D7D0=01101000B=68H。,,(5)寫(xiě)顯示RAM命令(D7D6D5 = 100),從單片
56、機(jī)向 8279 寫(xiě)入顯示數(shù)據(jù)之前應(yīng)先執(zhí)行該命令命令中 D3D0表示起始地址,數(shù)據(jù)寫(xiě)入按左輸入或右輸入方式進(jìn)行; D4:地址自動(dòng)加1控制位,為自動(dòng)增量標(biāo)志 D41時(shí),每次寫(xiě)入后地址自動(dòng)加 1。 D4=0,地址不加1。,,D3D0是欲寫(xiě)入的RAM地址,若連續(xù)寫(xiě)入則表示RAM的首地址。 命令格式同讀顯示RAM(參考表9-11)。,,(6)寫(xiě)入和消隱屏蔽命令( D7D6D5101 )格式見(jiàn)表9-12,,,,,,,,,1:相應(yīng)顯示RAM禁止寫(xiě)入,,1:消隱,,,(6)寫(xiě)入和消隱屏蔽命令(續(xù)),設(shè)置了這條命令使接口的四位顯示器相互獨(dú)立。 D3、 D2位用于寫(xiě)入屏蔽; D31時(shí),屏蔽A組,B可以寫(xiě)入數(shù)據(jù)且不
57、影響A組; D21時(shí),屏蔽B組,A可以寫(xiě)入數(shù)據(jù)且不影響B(tài)組; 兩位同時(shí)為“ 1 ”時(shí)則不進(jìn)行寫(xiě)入屏蔽。 D1、D0位用于消隱屏蔽; D11 時(shí),消隱A組; D01 時(shí),消隱B組; 兩位同時(shí)為“ 1 ”時(shí)則不進(jìn)行消隱屏蔽。,,例9-6 假設(shè)A、B兩組燈均已被點(diǎn)亮,現(xiàn)在希望A組燈繼續(xù)亮,B組燈熄滅,確定其命令字。,分析: 根據(jù)命令格式,A組燈繼續(xù)亮應(yīng)禁止A組RAM再寫(xiě)入其他數(shù)據(jù),故D3=1; B組顯示熄滅D0=1, 除特征位外其余位設(shè)為“0”。 故其控制命令字為:D7D0=10101001B=A9H,(7)清除顯示RAM和FIFO中的內(nèi)容命令(D7D6D5110),該命令用于清除顯示、清除鍵輸入標(biāo)
58、志和中斷請(qǐng)求標(biāo)志 命令中的 D4、D3 、D2位用于設(shè)置清除方式 D4D3D210,將顯示RAM 置成00H; D4D3D2110 ,將顯示RAM置成20H; D4D3D2111 ,將顯示RAM置成FFH; D4D3D20,不清除顯示 RAM 。 D1:清除標(biāo)志位。 D11,清除FIFO 狀態(tài)標(biāo)志,F(xiàn)IFO被置為空狀態(tài)(無(wú)數(shù)據(jù)),并復(fù)位中斷請(qǐng)求線 IRQ 。 D0:總清除。D01,清除包括FIFO RAM和顯示RAM。 清除顯示RAM 大約需100s,在此期間,單片機(jī)不能向顯示RAM寫(xiě)入數(shù)據(jù)。,,例:將全部顯示RAM清0, 其命令字為:D7D0=11010001B=D1H,,(7)清除(顯示R
59、AM和FIFO中的內(nèi)容)命令(續(xù)),(8)結(jié)束中斷錯(cuò)誤方式設(shè)置命令(D7D6D5111),在傳感器工作方式下,該命令用于結(jié)束傳感器 RAM 的中斷請(qǐng)求。 此外,該命令還用于設(shè)置一種特定的錯(cuò)誤工作方式。 命令字格式如表9-13所示,,,,,D4=1時(shí)(其D3---D0位任意)有兩種不同作用。,,結(jié)束中斷錯(cuò)誤方式設(shè)置命令的作用,作為結(jié)束中斷命令。在傳感器工作方式中,每當(dāng)傳感器狀態(tài)出現(xiàn)變化時(shí),掃描檢測(cè)電路接將其狀態(tài)寫(xiě)入傳感器RAM,并啟動(dòng)中斷邏輯,使IRQ變高,向CPU請(qǐng)求中斷。并且禁止寫(xiě)入傳感器RAM。此時(shí),如傳感器RAM讀出地址的自動(dòng)遞增特征沒(méi)有置位(AI=0),則中斷請(qǐng)求IRQ在CPU第一次從
60、傳感器RAM讀出數(shù)據(jù)時(shí)就被清除。若自動(dòng)遞增特征已置位(AI=1),則CPU對(duì)傳感器RAM的讀出并不能清除IRQ,而必須通過(guò)給8279寫(xiě)入結(jié)束中斷/錯(cuò)誤方式設(shè)置命令才能使IRQ變低。因此,在傳感器工作方式中,此命令用來(lái)結(jié)束傳感器RAM的中斷請(qǐng)求。,結(jié)束中斷錯(cuò)誤方式設(shè)置命令的作用,作為特定錯(cuò)誤方式的設(shè)置命令。在8279已被設(shè)定為鍵盤掃描N鍵輪回方式以后,如果CPU給8279又寫(xiě)入結(jié)束中斷/錯(cuò)誤方式設(shè)置命令(E=1)。則8279的消振周期內(nèi),如果發(fā)現(xiàn)有多個(gè)鍵被同時(shí)按下,則FIFO狀態(tài)字中的錯(cuò)誤特征位S/E將置位。并產(chǎn)生中斷請(qǐng)求信號(hào)和阻止寫(xiě)入FIFO RAM。 錯(cuò)誤特征位S/E在讀出FIFO狀態(tài)字時(shí)被
61、讀出。而在執(zhí)行CF=1的清除命令時(shí)被復(fù)位,8279的編程通常編3個(gè)程序段:初始化、鍵盤服務(wù)程序和顯示器服務(wù)程序,(1) 初始化:寫(xiě)入3個(gè)命令字 清除控制字: 考慮到應(yīng)允許清除顯示器,并將FIFO和RAM復(fù)位或清零(0D1H)。 設(shè)置鍵盤和顯示方式控制字 設(shè)置時(shí)鐘頻率控制字:(34H) 設(shè)內(nèi)部時(shí)鐘時(shí)鐘頻率100KHZ,CLK輸入時(shí)鐘頻率2MHZ,8279的編程使用,(2) 鍵盤服務(wù)程序:3個(gè)部分,寫(xiě)入讀FIFO/傳感器RAM控制字,由按下鍵產(chǎn)生的的字符允許通過(guò)FIFO讀??; 寫(xiě)入上述控制字后,再?gòu)臓顟B(tài)口讀取狀態(tài)字,查詢FIFO/傳感器RAM的狀態(tài)(是否有數(shù)據(jù)), 若有,則從數(shù)據(jù)口讀取掃描值SL0
62、SL3,回送RL0RL7,形成一個(gè)字節(jié)數(shù)據(jù); 修改地址指針,依次輸入n個(gè)鍵盤字,形成一個(gè)n字節(jié)的數(shù)據(jù)塊 。,(3) 顯示器服務(wù)程序,寫(xiě)入顯示RAM控制字 將字形碼從數(shù)據(jù)口用指令輸出,才能實(shí)現(xiàn)顯示,,8279與單片機(jī)的一般接口方法(連線圖見(jiàn)圖9-17),圖9-17 51單片機(jī)用8279擴(kuò)展I/O連接鍵盤與8段顯示器,初始化8279; 把顯示字符送到8279內(nèi)部的一個(gè)16字節(jié)寄存器內(nèi); 將字符轉(zhuǎn)換成段碼,經(jīng)A0A3、B0B3線把段碼送到顯示器; 同時(shí)經(jīng)SL0SL3線發(fā)出4位數(shù)位選通碼; 4-16譯碼器對(duì)選通碼進(jìn)行譯碼后輪流選通各位顯示器。 SL0SL2線同時(shí)連到3-8譯碼器,該譯碼器的輸出用于掃描
63、鍵盤8行; 8279經(jīng)8根返回線(RL0RL7)讀取鍵盤的狀態(tài); 如果發(fā)現(xiàn)按鍵閉合則等待10ms,顫動(dòng)過(guò)去后再檢驗(yàn)按鍵是否閉合;,工作流程,若按鍵仍然閉合,則把被按鍵的鍵值選通輸入8279內(nèi)部的先進(jìn)先出(FIFO)存儲(chǔ)器,同時(shí)經(jīng)INT線發(fā)出一個(gè)高電平,指出FIFO內(nèi)已經(jīng)有一個(gè)字符; INT線連接到CPU的中斷請(qǐng)求輸入線。當(dāng)單片機(jī)接收到中斷請(qǐng)求后,若開(kāi)中斷,則轉(zhuǎn)到鍵盤服務(wù)程序,從FIFO中讀取按鍵的鍵值。 在這種接口中,單片機(jī)要做的事僅是初始化8279、送出要顯示的字符、接到中斷請(qǐng)求后讀取按鍵的鍵值,其它工作均由8279自動(dòng)完成。,工作流程,8279應(yīng)用舉例(連線圖見(jiàn)圖9-18),接口與地址,P
64、2.0=1,對(duì)應(yīng)命令/狀態(tài)寄存器; P2.0=0,對(duì)應(yīng)數(shù)據(jù)寄存器。,P2.7=0:8279被選通,則 命令/狀態(tài)寄存器的地址:7FFFH(A0=1); 數(shù)據(jù)寄存器的地址:7EFFH(A0=0)。,圖9-18 用8279擴(kuò)展I/O口連接鍵盤與8段顯示器,按照?qǐng)D設(shè)計(jì)一個(gè)程序,在6位LED數(shù)碼管上依次顯示從05這6個(gè)數(shù),START:MOVDPTR ,#7FFFH;8279命令口地址 MOVA,#90H ;8279寫(xiě)顯示RAM命令字 MOVXDPTR ,A;送命令字 MOVR0 ,#0;清零 MOVR1 ,#6;顯示位數(shù) D1:MOVDPTR ,#TAB;調(diào)用顯示數(shù)據(jù) MOVA ,R0 MOVCA ,
65、A+DPTR MOVDPTR ,#7EFFH;8279數(shù)據(jù)口地址 MOVXDPTR ,A ;寫(xiě)顯示RAM INC R0;寄存器內(nèi)容加1 DJNZR1 ,D1;R1內(nèi)容減1不為0則繼續(xù)執(zhí) LJMPSTART;D1,為零則結(jié)束。 TAB:DB 3FH,06H,5BH,4FH,66H DB 6DH, 7DH,07H,7FH,6FH,按照?qǐng)D設(shè)計(jì)一個(gè)程序,讀入鍵盤輸入,并判斷是哪個(gè)按鍵被按下。,MOVDPTR, #7FFFH ;8279命令口地址 MOVA,#0D1H ;8279清顯示RAM命令字 MOVXDPTR,A LOOP:MOVXA,DPTR;讀狀態(tài)字 ANLA,#0FH JZLOOP;有鍵按下
66、?沒(méi)有則返回 MOVA,#0A0H;顯示/消隱命令 MOVXDPTR,A MOV A,#40H;讀FIFO命令 MOVXDPTR,A MOVDPTR, #7EFFH ;讀鍵值 MOVXA,DPTR MOVR1,A,單片機(jī)與8279的具體接口電路(見(jiàn)圖9-19),圖9-19 51單片機(jī)用8279擴(kuò)展I/O接口連接鍵盤與8段顯示器,分析,8031的P2.7接到8279的片選端,最低位地址A0接到8279的C/D端,因此該接口對(duì)用戶來(lái)說(shuō)只有二個(gè)口地址: 命令口地址:7FFFH 數(shù)據(jù)口地址:7FFEH 圖中8279外接48鍵盤和8位共陰極LED顯示器,采用編碼掃描方式,譯碼器74LS138對(duì)掃描線譯碼后一方面接鍵盤的列線,同時(shí)通過(guò)驅(qū)動(dòng)器接到顯示器上。,INI79:MOVDPTR ,7FFFH ;清除命令8279 MOVA ,0D1H MOVXDPTR,A WNDU:MOVXA,DPTR;等8279清除結(jié)束 JBACC.7,WNDU MOVA,0 ;方式命令8279 MOVXDPTR,A MOVA,34H;掃描頻率設(shè)置命令8279 MOVXDPTR,A MOVIE,84H;允許8031中斷 RE
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案