單片機(jī)并行接口擴(kuò)展技術(shù)第六章文檔_第1頁
單片機(jī)并行接口擴(kuò)展技術(shù)第六章文檔_第2頁
單片機(jī)并行接口擴(kuò)展技術(shù)第六章文檔_第3頁
單片機(jī)并行接口擴(kuò)展技術(shù)第六章文檔_第4頁
單片機(jī)并行接口擴(kuò)展技術(shù)第六章文檔_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第六章 AT89S51 單片機(jī)并行接口擴(kuò)展技術(shù)6.1 鍵盤 / 顯示器接口擴(kuò)展     鍵盤和顯示器是單片機(jī)系統(tǒng)的中最重要的組成部分,鍵盤為輸入設(shè)備,通過鍵盤可以設(shè)置系統(tǒng)的參數(shù)或輸命令;顯示器則為輸出設(shè)備,單片機(jī)通過顯示器顯示采集的數(shù)據(jù)或處理結(jié)果。本節(jié)首先介紹單片機(jī)系統(tǒng)擴(kuò)展鍵盤和LED顯示技術(shù)。 6.1.1  鍵盤的工作原理   ( 1 )按鍵的去抖動處理。鍵盤是一組按鈕開關(guān)矩陣,通常情況下,按鈕開關(guān)處于斷開狀態(tài),當(dāng)按下鍵時它們才閉合 ( 短路 ) ,如圖6.1所示。按照識別按鍵的方法不同,鍵盤可分為編碼鍵盤和非編碼鍵盤。按鍵的識別由專用的硬件

2、實現(xiàn),并能產(chǎn)生鍵值的稱為編碼鍵盤,自編軟件識別的鍵盤稱為非編碼鍵盤。由于采用非編碼鍵盤可以降低成本,在單片機(jī)系統(tǒng)中,當(dāng)按鍵數(shù)量不多時,大家更喜歡采用非編碼鍵盤。      通常情況下,當(dāng)按下和松開按鈕開關(guān)K1時,由于機(jī)械觸點的彈性作用,圖 6.1中O點的電壓變化如圖6.2所示。沒按鍵時,O點為高電平(t1);按下的瞬間,O點的電壓處于一種不穩(wěn)定(抖動)狀態(tài)(t2);然后,進(jìn)入閉合期,O點電壓為低電平(t3);當(dāng)松開的瞬間,O點的電壓再一次處于抖動狀態(tài)(t4);最后,O點電壓恢復(fù)為高電平(t5)。按一次鍵要經(jīng)過兩個抖動期t1和t2,每次抖動的時間大約在51

3、0ms之間。由于單片機(jī)工作在微秒數(shù)量級,必須進(jìn)行去抖動處理,否則,按鍵一次會造成單片機(jī)的多次響應(yīng)。常用的去抖動方法有兩種,一種是采用硬件電路如濾波電路、雙穩(wěn)態(tài)電路等實現(xiàn)去抖;另一種是通過軟件實現(xiàn),即發(fā)現(xiàn)有鍵按下時,延時1020ms再查詢一次,若仍為低電平說明確實有鍵被按下,然后,等待按鍵的釋放,即查詢到圖6.1中的O點為高電平時,還要延時1020ms ,當(dāng)O點仍為高電平時,才為一次按鍵結(jié)束。如果不檢測按鍵的釋放,當(dāng)按鍵時間很長時,同樣可能一次按鍵造成單片機(jī)的多次處理。   ( 2 )鍵盤的結(jié)構(gòu)與工作原理。 非編碼鍵盤按照結(jié)構(gòu)的不同可分為:獨立式鍵盤和行列式鍵盤。獨立式鍵盤的

4、處理程序簡單,適合于鍵數(shù)較少的場合,行列式鍵盤處理程序稍復(fù)雜點,適合于鍵數(shù)較多的場合。     1 )獨立式鍵盤及其工作原理。獨立式鍵盤是各按鍵互相獨立,分別接一條輸入數(shù)據(jù)線,各按鍵的狀態(tài)互不影響,結(jié)構(gòu)如圖6.3所示。      當(dāng)沒有鍵被按下時,由于外邊有上拉電阻,讀得P1口的值為0FFH,當(dāng)有鍵被按下時,如K4被按下,則讀得P1口的值為0F7H。只要讀得數(shù)據(jù)口的值即可知道是否有鍵被按下,或按下了哪個鍵。    2 )行列式鍵盤的結(jié)構(gòu)與工作原理。鍵數(shù)較多時,獨立式鍵盤結(jié)構(gòu)需要占用很多I/O口線

5、,會浪費許多資源,這時,常采用行列式鍵盤結(jié)構(gòu),即將鍵盤排列成行、列矩陣式,如圖6.4 所示。    圖6.4中,每一水平線(行線)與垂直線(列線)的交叉處連接一個按鈕開關(guān),即開關(guān)的兩端分別接在行線和列線上,N個行線和M個列線可組成M×N個按鍵的鍵盤。工作原理為所有行線輸出為高電平,所有列線輸出為低電平,讀行線,若有鍵閉合,讀回的行線值不全為高。    對按鍵的識別方法如下:    第一步:確定是否有鍵被按下。具體方法為所有的行線輸出高電平,所有的列線輸出低電平,讀行線,若行線中有低電平,延時20

6、ms再讀一次行線(去抖動),若仍為低電平說明有鍵閉合,把讀到的四位行線狀態(tài)保存起來;    第二步:當(dāng)確認(rèn)有鍵閉合時,使所有的行線輸出低電平,所有的列線輸出高電平,然后,讀列線狀態(tài);    第三步:將第一次讀得的四位行線值作為低4位,第二次讀得的4位列線值做為高4位組成一個字節(jié),然后,將該字節(jié)取反得到的值稱為鍵值。    鍵值和鍵號是兩個不同的概念,鍵值即當(dāng)有鍵按下時,單片機(jī)讀得的值,鍵號是印在鍵帽上的值,兩者存在一一對應(yīng)的關(guān)系。如在圖6.4中,設(shè)鍵號為“6”的鍵閉合,則第一次讀的行線P1.3、P1.2、

7、P1.1、P1.0的狀態(tài)為1101;第二次的列線P1.7、P1.6、P1.5、P1.4的狀態(tài)為1011,列、行狀態(tài)組合后為10111101B,取反后為01000010B,以十六進(jìn)數(shù)計為42H,即鍵號為“6”的鍵對應(yīng)的鍵值為42H。同理可以求出圖6.4中的其它鍵號與鍵值的對應(yīng)關(guān)系如表6.1 所示:     表6.1中的鍵值由兩位16進(jìn)制數(shù)組成,高位和低位分別為閉合鍵所在列號和行號,1、2、 4、8分別表示第1、2、3、4行或列,如果需要可以通過軟件將鍵值轉(zhuǎn)成鍵號。   【 例 6.1 】 設(shè)某單片機(jī)系統(tǒng)的鍵盤電路如 圖6.4所示,編寫程序當(dāng)有鍵閉

8、合時,將閉合鍵的鍵號存于鍵盤緩沖KEYBUFF單元,并將按鍵標(biāo)志KPRESSED置1。    解:設(shè)鍵盤緩沖KEYBUFF為30H單元,按鍵標(biāo)志KPRESSED的位地址為00H,系統(tǒng)的晶體振蕩器頻率為6MHz,子程序段如下:             KEYBUFF  EQU 30H             KPRESS

9、ED EQU 00H    KEYHAND:             MOV      P1, #0FH      ;行線為高電平,列線為低電平             MOV      A, P1   

10、60;         ANL      A, #0FH             XOR      A, #0FH             JZ       NOKEY  

11、;       ;NO key pressed,退出             ACALL    DLY20MS       ;延時20ms , 執(zhí)行去抖動操作             MOV     

12、 A, P1             ANL      A, #0FH             MOV      KEYBUFF, A             XOR   

13、;   A, #0FH             JZ       NOKEY         ;沒鍵閉合,退出             MOV      P1, #0F0H 

14、60;   ;列線為高電平,行線為低電平             MOV      A, P1             ANL      A, #0F0H      ;      

15、       ORL      A, KEYBUFF             CPL      A ;得到鍵值             MOV      B , A   

16、     ;暫保存鍵值到寄存器B             MOV      KEYBUFF, #0   ;鍵號單元清0    ROW    :CLR      C         

17、    RRC      A             JC       LINE             XCH      A , KEYBUFF  

18、           ADD      A , #4       ;相鄰兩行同列鍵號相差為4             XCH      A , KEYBUFF     &

19、#160;       SJMP     ROW    LINE   :MOV      A , B             SWAP     A    LINE1  :CLR  

20、    C             RRC      A             JC       KEY         

21、60;   INC      KEYBUFF        ;同一行相鄰兩列的鍵號差1             SJMP     LINE1    KEY    :SETB     KPRESSED&

22、#160;   WAIT   : MOV      A, P1          ;等待按鍵釋放             ANL      A, #0F0H        

23、;     XOR      A, #0F0H             JNZ      WAIT             SJMP     EXIT  

24、60; NOKEY  :CLR      KPRESSED    EXIT   :RET    ;    ;  ;    ; DLY20ms:20ms延時程序    ;    ;    DLY20MS: MOV      R7, #40 &

25、#160;  DEL1   : MOV      R6, #125    DEL2   : DJNZ     R6, DEL2       ;4*125=500S             DJNZ     R7

26、, DEL1             RET6.1.2 數(shù)碼管顯示器 LED 簡介     顯示器單片機(jī)系統(tǒng)中最重要的輸出設(shè)備,用顯示系統(tǒng)的運行結(jié)果與運行狀態(tài)等。常見的顯示器主要有LED數(shù)碼管顯示器、LCD液晶顯示器和CRT顯示器。由于 LED 數(shù)碼顯示器具有顯示清晰、亮度高、使用電壓低、壽命長的特點,因此使用非常廣泛。本節(jié)一下 LED 顯示器的結(jié)構(gòu)、工作原理。   ( 1 ) LED顯示器的結(jié)構(gòu)與原理。LED顯示器是由發(fā)光二

27、極管組成的顯示器件,其外形、引腳及結(jié)構(gòu)如圖6.5(a)、(b)所示。     8段LED顯示器由8個發(fā)光二極管組成,其中,7個條形發(fā)光二極管排列成“日”字形,另一個圓點形的發(fā)光二極管位于顯示器的右下角,用作顯示小數(shù)點。每個發(fā)通過不同的發(fā)光管的組合可以顯示數(shù)字09、AF、小數(shù)點“.”以及一些特殊的字樣。    LED顯示器可以分為兩種類型。一種是8個發(fā)光二極管的陽極連在一起,稱為共陽極LED顯示器;另一種是8個發(fā)光二極管的陰極連在一起的,稱為共陰極LED顯示器。如圖7.19(b)所示。兩種類型的LED顯示器各筆劃(段)的安排位置是相同的

28、,當(dāng)二極管導(dǎo)通時相應(yīng)的筆劃發(fā)光(發(fā)亮),由發(fā)亮的筆劃組合顯示各種字符。    為了顯示字符,必須給LED的a、b、c、d、e、f、g和dp端一個確定的電平,如對于共陰極LED,為了顯示0',則要求a、b、c、d、e、f端為高電平,g和dp端為低電平,用數(shù)據(jù)表示即為11111100。習(xí)慣上,大家常喜歡將D7連接至dp,D6連接至g,以次類推,將D0連接到a,這樣顯示0'時對應(yīng)的“數(shù)據(jù)”為00111111(3FH),這里的數(shù)據(jù)“3FH”常被稱為字形碼,有的書上稱之為“段碼”,顯然,將共陽極LED的段碼按位取反即可得到共陽極LED的段碼。8段共陰LED的

29、段碼如表6.2所示:   ( 2 ) LED顯示器的顯示方式有靜態(tài)顯示和動態(tài)顯示兩種。靜態(tài)顯示時,所有數(shù)碼管同時發(fā)亮,顯示字符清晰、穩(wěn)定,編程簡單,其缺點是需要的元件較多;動態(tài)顯示時,每一時刻只有一個LED發(fā)亮,多個LED按順序循環(huán)發(fā)亮,由于人的眼睛具有視覺暫留特性,只能分辨出時間大于40ms的變化,只要循環(huán)亮一次的時間小于40ms,則可以給人所有LED都在發(fā)亮的感覺。動態(tài)顯示需要元件個數(shù)少,其缺點是當(dāng)刷新頻率不高時,LED顯示有點閃爍,關(guān)于LED靜態(tài)和動態(tài)顯示的例子見6.2節(jié)。 6.1.3 專用可編程鍵盤顯示器接口芯片 8279 及應(yīng)用    

30、; 8279是一種可編程鍵盤/LED顯示器接口器件,具有鍵盤、傳感器以及選通三種輸入方式和8位或16位LED顯示器控制功能,由于傳感器輸入或選通輸入方式很少使用,在本節(jié)只介紹其鍵盤輸入方式的使用方法。實際的應(yīng)用系統(tǒng)中采用8279芯片,不僅可以大大地節(jié)省CPU處理鍵盤或顯示操作的時間,減輕CPU的負(fù)擔(dān),而且,顯示穩(wěn)定,編程簡單。   ( 1 ) 8279的內(nèi)部結(jié)構(gòu)和工作原理。按功能分,8279的內(nèi)部結(jié)構(gòu)可分為3個部分,如圖6.6所示。    1 )接口、時序和控制部分。    數(shù)據(jù)緩沖器。8279中有一個雙向的數(shù)據(jù)緩

31、沖器,用于連接內(nèi)、外部總線,實現(xiàn)單片機(jī)和8279之間交換信息(命令和數(shù)據(jù));    I/O 控制電路。I/O控制電路接收系統(tǒng)的/RD、/WR、/CS和A0信號,實現(xiàn)對8279進(jìn)行讀寫操作。其中A0用于交換的區(qū)別信息類型,當(dāng)A0=1時,表示寫入8279的信息為命令,從8279讀出的信息為狀態(tài);當(dāng)A0=0時,表示寫入或讀出8279的信息均為數(shù)據(jù);    控制寄存器。8279中有多個控制寄存器,用于指定鍵盤和顯示器的工作方式,這些控制寄存器共用一個地址,由于8279的每個命令字中都含有特定的信息,使得寫入8279的命令會被送到不同的控制寄存

32、器中,然后,通過譯碼產(chǎn)生相應(yīng)的信號,從而完成相應(yīng)的功能。    時鐘預(yù)分頻器(Clock Pre Scaler)。8279 內(nèi)部工作的時鐘頻率為100KHz,為了得到這個時鐘,有一個專門的時鐘分頻器(計數(shù)器),通過編程指定該分頻器對外部CLK信號進(jìn)行 231級分頻,以便得到內(nèi)部所需的100KHz時鐘。    掃描計數(shù)器。8279通過掃描計數(shù)器產(chǎn)生鍵盤和顯示器的掃描信號(SL3SL0),掃描計數(shù)器可輸出兩種不同的掃描信號。當(dāng)鍵盤工作在編碼(encoded)方式時,掃描計數(shù)器作二進(jìn)制計數(shù),從SL3SL0輸出的是4位二進(jìn)制計數(shù)狀態(tài),必須通過外部譯碼電

33、路產(chǎn)生對鍵盤和顯示器的掃描信號;當(dāng)鍵盤工作在譯碼 (decoded) 方式時,由8279的內(nèi)部對計數(shù)器的最低兩位進(jìn)行譯碼,從SL3SL0輸出的就是對鍵盤或顯示器的掃描信號,在這種情況下,只能有4位LED顯示器。      2 )顯示控制部分。顯示控制部分主要由顯示控制邏輯電路和16個字節(jié)的顯示RAM以及顯示寄存器組成。顯示RAM用來存放顯示數(shù)據(jù);顯示寄存器分為兩組,OUTA30和OUTB30可以單獨4位輸出,也可以合成為8位(一個字節(jié))輸出,以字節(jié)輸出時,OUTA3對應(yīng)數(shù)據(jù)總線的D7, OUTB0對應(yīng)數(shù)據(jù)總線的D0。8279工作時,顯示寄存器不停地從顯示

34、RAM中讀出顯示數(shù)據(jù),然后,從OUTA30和OUTB30輸出,與輸出的掃描信號(SL3SL0)配合實現(xiàn)多位LED的循環(huán)顯示。    3 )鍵盤控制部分。鍵盤控制部分主要由去抖動控制電路、8個字節(jié)的先進(jìn)先出(FIFO) RAM和FIFO RAM狀態(tài)寄存器組成。    去抖動控制電路。鍵盤工作方式中,回復(fù)線(Retrun line)RL7RL0是行列式鍵盤的輸入線,當(dāng)8279發(fā)現(xiàn)有鍵閉合時,就把回復(fù)線的狀態(tài)鎖存到回復(fù)緩沖器中,延時10ms(內(nèi)部時鐘頻率為100KHz時),再一次檢測閉合鍵的狀態(tài),如果仍然閉合,就把閉合鍵的信息以及SHIFT

35、和CNTL引腳的狀態(tài)一起形成一個鍵盤數(shù)據(jù)送入FIFO RAM。    FIFO RAM。在鍵盤方式時,F(xiàn)IFO RAM用于存放鍵盤數(shù)據(jù)。鍵盤數(shù)據(jù)的格式如下:    D2D0  :指出閉合鍵所在行號(RL7RL0 的狀態(tài))    D5D3  :指出閉合鍵所在列號(掃描計數(shù)器的值)    D7、D6 :分別為控制線CNTL和移位線SHIFT的狀態(tài);    CNTL線和SHIFT線外部可單獨接一個開關(guān)鍵,類似于計算機(jī)的鍵盤,通過CN

36、TL和SHIFT線可以使8279外接64個按鍵擴(kuò)充到256個。    FIFO RAM狀態(tài)寄存器。在鍵盤輸入方式時,F(xiàn)IFO RAM狀態(tài)寄存器中含有FIFO RAM中閉合鍵的個數(shù)以及是否出錯等信息,其格式為:     D2D0(NNN):表示FIFO RAM中鍵盤數(shù)據(jù)的個數(shù);    D3(F)     :當(dāng)F=1時,表示FIFO RAM已滿(即FIFO RAM已有8個鍵盤數(shù)據(jù))    D4(U)   

37、60; :當(dāng)FIFO RAM中沒有數(shù)據(jù),單片機(jī)對FIFO RAM執(zhí)行讀操作時,則置U為                  “1”    D5(O)     :當(dāng)FIFO已滿,又有鍵閉合時,F(xiàn)IFO RAM溢出,置O為“1”    D6(S/E)   :用于傳感器方式時,當(dāng)幾個傳感器同時閉合時被置“1” 

38、60;  D7(DU)    :在執(zhí)行清除命令期間DU=1,當(dāng)DU=1時,對顯示RAM的寫操作無效。因此,                   在執(zhí)行清除命令后,需要讀FIFO RAM狀態(tài)寄存器,只有在清除命令執(zhí)行               

39、60;   完成后(DU=0),才能進(jìn)行對顯示RAM的寫操作。    當(dāng)FIFO RAM中有鍵盤數(shù)據(jù)時,IRQ被8279置為高電平,程序可以通過查詢IRQ確認(rèn)是否有鍵被按下;IRQ信號取反后也可以作為中斷請求信號,當(dāng)有鍵閉合時,單片機(jī)通過中斷方式讀取鍵值。   ( 2 ) 8279的引腳定義。常見的8279芯片為40腳的DIP封裝,引腳的定義如圖6.7所示:    D0D7(Pin 12 Pin 19):數(shù)據(jù)總線,用于傳送單片機(jī)和8279之間的數(shù)據(jù)、命令或狀態(tài)信息。  

40、60; CLK(Pin 3):外部時鐘輸入,作于產(chǎn)生內(nèi)部工作時序。8279內(nèi)部有一個可編程的5位計數(shù)器,對外部時鐘進(jìn)行231分頻,產(chǎn)生100KHz的內(nèi)部定時信號。    RESET(Pin 9):復(fù)位信號,高電平有效。當(dāng)8279復(fù)位后,8279工作于左入、16位LED顯示,譯碼鍵盤掃描,雙鍵互鎖,外部時鐘分頻為31。    /CS(Pin 22):選信號,低電平有效。當(dāng)/CS有效時,允許對8279進(jìn)行讀、寫操作。    A0(Pin 21):緩沖器地址。A0用于標(biāo)識單片機(jī)和 8279 交換的信息特征,當(dāng)A

41、0=1時,寫入8279的信息為命令,讀出的是狀態(tài);當(dāng)A0=0時,寫入和讀出的信息均為數(shù)據(jù)。    /RD、/WR(Pin 10、Pin 11):讀、寫控制信號。    IRQ (Pin 4):中斷請求(Interrupt Request)。在鍵盤方式時,當(dāng)FIFO RAM中有數(shù)據(jù)時,IRQ變?yōu)楦唠娖?,?dāng)讀FIFO RAM時, IRQ變?yōu)榈碗娖剑x一次后,若FIFO RAM中仍有數(shù)據(jù),IRQ重新變?yōu)楦唠娖?;在傳感器方式,?dāng)檢測到一個傳感器變化時,IRQ變?yōu)楦唠娖健?#160;   Vss、Vcc(Pin 20、Pin

42、 40):數(shù)字地和電源引腳。    SL0SL3(Pin 32 Pin 35):掃描線(Scan Line):掃描線用于對鍵盤和對LED顯示器的位進(jìn)行掃描。    RL0RL7(Pin 38、Pin 39、Pin 1、Pin 2、Pin 5 Pin 8):反饋輸入線(Return Line )。RL0RL7為輸入引腳,外接鍵盤或傳感器陣列,內(nèi)部有上拉電阻。當(dāng)有鍵閉合時, 8279通過組合RL0RL7和SL0SL3的狀態(tài)可以確定閉合所在的行和列,并把閉合鍵的鍵位置送入鍵盤FIFO RAM中,同時設(shè)置IRQ為高電平。  

43、;  SHIFT(Pin 36)線:SHIFT為輸入引腳,內(nèi)部有上拉電阻,外部常接一個獨立的開關(guān)按鍵,類似于計算機(jī)鍵盤上的換檔鍵(SHIFT),8279可以直接連接64個的開關(guān)按鍵,通過SHIFT線,可以將按鍵數(shù)量擴(kuò)充到128個。SHIFT的狀態(tài)會被記錄在FIFO RAM中。    CNTL(Pin 37)控制線(Control):與SHIFT類似,通過CNTL也可以擴(kuò)充按鍵數(shù)量。 SHIFT和CNTL共有4種組合,通過SHIFT和CNTL可使8279連接的按鍵數(shù)量增加到256個。    OUTA3 OUTA0、OUTB3

44、OUTB0(Pin 24 Pin27、Pin28 Pin31)顯示數(shù)據(jù)段碼(字形碼)輸出線。8279工作時,由OUTA3 OUTA0、OUTB3 OUTB0輸出顯示數(shù)據(jù)的段碼,OUTA3 對應(yīng)8段LED的dp,OUTB0對應(yīng)8段LED的a,由SL0 SL3輸出顯示的位,兩者配合實現(xiàn)8位或16 位LED的動態(tài)顯示。    /BD(pin 23)消隱輸出線(Blank Display),低電平有效。當(dāng)顯示器切換或使用消隱命令時,輸出為低。   ( 3 ) 8279的操作命令字    8279共有8個命令字。每個命令字的

45、高3位D7、D6和D5為命令特征位,雖然所有的命令都送到同一的端口,但由于特征位不同,8279可以區(qū)別各個不同的命令。    1 )鍵盤顯示工作方式設(shè)置命令字。該命令字用于設(shè)置鍵盤和顯示器的工作方式,格式如下:    命令特征位:D7D6D5=000    D4D3位:用來設(shè)定顯示(Display)方式,定義如下:       00 :8個字符顯示,從左邊輸入。       0

46、1 :16個字符顯示,從左邊輸入。       10 :8個字符顯示,從右邊輸入。       11 :16個字符顯示,從右邊輸入。    8279最多可用來控制16位的LED顯示,當(dāng)顯示位數(shù)超過8位時,均設(shè)定為16位字符顯示。LED有兩種顯示方式:即左邊輸入和右邊輸入。左邊輸入是較簡單的方式,顯示RAM單元0對應(yīng)顯示器最左邊的位;顯示RAM單元7(或15)對應(yīng)顯示器的最右邊的位。單片機(jī)寫入單元的地址和顯示的位之間的對應(yīng)關(guān)系是固定的,單片機(jī)依次從

47、0地址或某一個地址開始將段碼數(shù)據(jù)寫入顯示緩沖區(qū)。    當(dāng)寫完16個數(shù)據(jù)后,第17個數(shù)據(jù)將被寫到顯示RAM0,即顯示器的最左邊。從0地址寫入18 個數(shù)據(jù)的過程如下:    右面輸入方式是一種“移位”輸入方式,計算器一般都是采用這種顯示方式,當(dāng)向顯示 RAM寫入第一個字符時,顯示在最右邊,寫入第二個字符時,第一次寫入的字符左移1位顯示,而第二次寫入的字符顯示在最右邊,每次寫入一個字符后,原來顯示的字符自動左移一位,最后寫入的字符總是顯示在最右邊,當(dāng)寫入第9(或17)個字符后,原最左邊的顯示的字符被移出。從0地址寫入18個數(shù)據(jù)時,顯示RA

48、M中的內(nèi)容與左邊輸入時相同,但右邊輸入時,顯示RAM的地址和顯示字符的位置并不存在對應(yīng)關(guān)系,向顯示RAM的某指定單元寫入一個字符時,可能得到意想不到的結(jié)果,即字符顯示的位置不確定。因此,在右邊輸入方式時,建議第一次要從顯示RAM單元0開始寫入字符。    D2D1D0位:用來設(shè)定鍵盤(Keyboard)工作方式,定義如下:        000 :編碼掃描鍵盤方式,雙鍵互鎖。        001 :譯碼掃描鍵盤方式,雙鍵互鎖

49、。        010 :編碼掃描鍵盤方式,N鍵依次讀出。        011 :譯碼掃描鍵盤方式,N鍵依次讀出。        100 :編碼掃描傳感器矩陣。        101 :譯碼掃描傳感器矩陣。        110 :選通輸入,編碼顯示掃描。

50、        111 :選通輸入,譯碼顯示掃描。    編碼掃描鍵盤方式實際上是外部譯碼掃描鍵盤方式,8279內(nèi)部的計數(shù)器做二進(jìn)制計數(shù),四位二進(jìn)制數(shù)從SL3SL0輸出,通過外部譯碼器(16選1)產(chǎn)生鍵盤/顯示器的掃描信號。譯碼掃描鍵盤方式為內(nèi)部譯碼工作方式,此時,SL3SL0輸出已經(jīng)是4選1的掃描信號,這種方式掃描線最多只能有4條。    雙鍵互鎖和N鍵依次讀出是兩種不同的多鍵同時按下的保護(hù)方式。雙鍵互鎖方式就是當(dāng)鍵盤上同時有兩個鍵被按下時,任何鍵的信息都不送FI

51、FO RAM,只剩一個鍵閉合時,該鍵的信息編碼才被送到FIFO鍵盤RAM;N鍵依次讀出方式為:當(dāng)有多個鍵同時按下時,鍵盤掃描根據(jù)發(fā)現(xiàn)它們的次序,依次將它們的狀態(tài)送入FIFO RAM。    在介紹了鍵盤的掃描方式后,再談?wù)勶@示器的“左邊輸入”和“右邊輸入”顯示問題。左邊輸入時,顯示RAM的單元0對應(yīng)最左邊的顯示字符,這里所謂的“最左邊”顯示字符對應(yīng)的SL30輸出狀態(tài)為0000(編碼鍵盤掃描方式),如外部用74LS138譯碼產(chǎn)生顯示掃描信號,則連接74LS138的Y0端的LED顯示器應(yīng)為最左邊的顯示器,同學(xué)們在繪制PCB電路圖時一定要注意這個問題。當(dāng)鍵盤工作在譯碼掃

52、描方式時,SL0接的LED為最左邊。右邊輸入時,最右邊顯示器亮?xí)r對應(yīng)的SL30 為1111(編碼鍵盤掃描方式);當(dāng)鍵盤工作在譯碼掃描方式時,SL3接的LED為最右邊。    2 )時鐘編程命令。8279內(nèi)部定時信號(100KHz)由外部的輸入的時鐘經(jīng)過分頻后產(chǎn)生,分頻系數(shù)由時鐘編程命令確定,命令格式如下:    命令特征位: D7D6D5=001 。    D4D0位(PPPPP)為分頻系數(shù),可在231中進(jìn)行選擇。內(nèi)部時鐘頻率控制著掃描時間和鍵盤去抖動時間的長短,當(dāng)內(nèi)部時鐘為100KHz時,則掃描時間為5

53、.1ms,去抖動時間為10.3ms 。例如,設(shè)外部時鐘頻率為1MHz,則要產(chǎn)生100KHz的內(nèi)部定時信號,需要進(jìn)行10分頻,即PPPPP=01010B=10,此時的時鐘命令字為:2AH     3 )讀FIFO RAM命令。讀FIFO RAM命令的格式為:     命令特征位:D7D6D5=010 。    在傳感器方式時,在CPU讀FIFO RAM之前,必須用這條命令設(shè)定要讀出的傳感器RAM地址。由于傳感器RAM的容量為8字節(jié),因此,需要用命令字中的3位二進(jìn)制代碼AAA指定地址。命令字中的AI為自動增量

54、(Automatic Increacement)特征位。若AI=1,則每次讀出傳感器RAM 后,地址將自動加1,使地址指針指向按順序的下一個存儲單元,這樣,下一次讀數(shù)便從下一個地址讀出,而不必重新設(shè)置讀FIFO RAM命令。    在鍵盤工作方式中,由于讀出操作嚴(yán)格按照先入、先出(FIFO)的順序進(jìn)行,命令中的 AI和AAA不起作用。    4 )讀顯示RAM命令。命令格式為:    命令的特征位:D7D6D5=011。    在CPU讀顯示RAM時,必須先執(zhí)行讀顯示RAM命

55、令。該命令字用來設(shè)定將要讀出的顯示RAM的地址,4位二進(jìn)制代碼AAAA用來尋址16個字節(jié)的顯示RAM單元,如果自動增量位AI=1,則每次讀出后,地址自動加1。    5 )寫顯示RAM命令。命令格式為:命令特征位:D7D6D5=100    在CPU寫顯示RAM時,必須先執(zhí)行寫顯示RAM命令,該命令字用來設(shè)定第一次要寫入的顯示 RAM的地址,4位二進(jìn)制代碼AAAA用來尋址顯示RAM,如果自動增量特征位AI=1,則每次寫入后,地址自動加1。    6 )顯示RAM禁止寫入消隱命令。命令格式為: &

56、#160;  命令特征位:D7D6D5=101    IW_A和IW_B為A組和B組顯示RAM寫入屏蔽位。例如,當(dāng)IW_A=l時, A組的顯示RAM禁止寫入,即單片機(jī)寫入顯示器RAM的數(shù)據(jù)不會影響OUTA30的輸出,這種情況通常在采用雙4位顯示時使用,因為兩個4位顯示器是相互獨立的,為了給其中一個4位顯示器輸入數(shù)據(jù),而又不影響另一個4位顯示器,因此,必須對另一組的輸入實行屏蔽。    BL_A和BL_B位用于對兩組顯示輸出消隱(Blank),若BL_x=1,則8279的/BD引腳輸為低電平,對應(yīng)的OUTx30被消隱(熄滅),

57、若BL_x=0,則恢復(fù)顯示。    7 )清除命令。清除命令用于清除FIFO RAM和顯示RAM,命令格式為:    命令特征位:D7D6D5=110    D4D3D2(CD、CD、CD)位用于設(shè)定清除顯示RAM的方式,意義如下:       10x :將顯示RAM全部清0       110 :將顯示RAM全部清為20H     &#

58、160; 111 :將顯示RAM全部清為FFH       0xx :CA=0時,不清除;CA=1時,清除方式由D3D2決定    D1(CF)位用于清空FIFO RAM。當(dāng)CF=1時,執(zhí)行清除命令后,F(xiàn)IFO RAM被清空,同時,使中斷請求輸出線IRQ復(fù)位。    D0(CA)位為總清位,當(dāng)CA=1時,可同時完成對顯示RAM和FIFO RAM的清除,對顯示RAM 的清除方式由D3D2位決定。    執(zhí)行清除命令大約需要160S的時間,在此期間,

59、FIFO RAM的狀態(tài)寄存器的最高位DU=1,當(dāng)清除命令執(zhí)行完成后,DU=0。在DU=1時,不能對顯示RAM寫數(shù)據(jù)。    8 )結(jié)束中斷/特定錯誤方式設(shè)置命令。此命令有兩種不同的作用,在傳感器方式時,作為中斷結(jié)束命令;在鍵盤方式時,作為特定錯誤方式設(shè)置命令。該命令的格式為:    命令特征位:D7D6D5=111    當(dāng)鍵盤工作于N鍵依次讀出方式時,如果單片機(jī)給8279寫入特定方式設(shè)置命令字(E=1),則8279以一種特定的錯誤方式工作,這種方式的特點是在消抖動期間,如果發(fā)現(xiàn)多個鍵被同時按下,則FIF

60、O RAM狀態(tài)寄存器中的錯誤特征位S/E被置1,同時IRQ變?yōu)楦唠娖?。S/E位置 1會阻止對FIFO RAM的進(jìn)一步寫操作。執(zhí)行清除命令時,S/E被復(fù)位。這個命令使用較少。    ( 4 )對8279的操作    8279有兩個端口,一個是命令端口一個是數(shù)據(jù)端口。對8279的操作有四種情況:      寫命令端口。寫入命令端口的信息為命令字,命令字規(guī)定了8279的工作方式;      讀命令端口。從命令端口讀出的信息為FIFO RAM狀態(tài)寄存器的內(nèi)容。&#

61、160;     寫數(shù)據(jù)端口。寫入數(shù)據(jù)端口的信息為顯示字符的段碼,8279內(nèi)部有16個字節(jié)的顯示RAM,寫入的顯示段碼被存儲在顯示RAM中。      讀數(shù)據(jù)端口。從數(shù)據(jù)端口讀入的是FIFO RAM中鍵盤數(shù)據(jù)或顯示RAM中的數(shù)據(jù)。    寫命令端口時,由于各命令字的特征位不同,向同一端口寫入的各種命令實際上是被寫到了8279內(nèi)部的不同的命令寄存器中,因此,寫命令端口的操作可以直接進(jìn)行;讀命令端口時,由于只有一個狀態(tài)寄存器,故讀命令端口的操作也可以直接進(jìn)行。    而

62、讀、寫數(shù)據(jù)端口時,則不同,需要先執(zhí)行讀、寫數(shù)據(jù)端口的命令,然后,才能對數(shù)據(jù)端口進(jìn)行讀寫,如在讀顯示RAM數(shù)據(jù)前,要先執(zhí)行讀顯示RAM的命令;讀FIFO RAM前,要先執(zhí)行讀FIFO RAM的命令;寫顯示RAM數(shù)據(jù)前,要先執(zhí)行寫顯示RAM的命令;如果不先執(zhí)行讀、寫數(shù)據(jù)端口的命令,當(dāng)從8279的數(shù)據(jù)口進(jìn)行讀數(shù)據(jù)時,8279便不知是從顯示RAM讀還是從FIFO RAM讀。   ( 5 ) 82C79與89S51單片機(jī)接口與編程    對8279的編程一般可分成三部分,第一部分對8279初始化編程,規(guī)定其鍵盤和顯示器的工作方式以及對外部CLK信號的分頻

63、系數(shù)等;第二部分為檢查鍵盤情況,當(dāng)有鍵按下時,讀取鍵值,然后,進(jìn)行相應(yīng)的處理;第三部分為顯示部分,即將待顯示字符的段碼送寫入顯示RAM 進(jìn)行顯示。相應(yīng)地,8279的接口電路也大致可分為三部分,即與單片機(jī)的接口,與鍵盤的接口和與顯示器的接口。常見的由8279組成的8位LED顯示器、16個按鍵接口電路如圖6.8所示。    電路工作原理如下:    與單片機(jī)接口。DB7DB0直接邊至P0口;讀引腳/RD接單片機(jī)的讀信號(/RD);寫引腳接單片機(jī)的寫信號(/WR);CLK引腳接單片機(jī)的ALE信號,ALE信號的頻率為系統(tǒng)晶體振蕩器頻率的1/6

64、;A0接地址總線A0。當(dāng)有鍵閉合時,IRQ變?yōu)楦唠娖?,可以通過中斷或查詢方式讀取鍵值。    與鍵盤的接口電路。16個按鍵接成矩陣形式,由RL7RL0組成行線,外部譯碼器74LS138的輸出Y0和Y1組成列線(或掃描線)。當(dāng)有鍵閉合時,讀入的RL7RL0不全為零,根椐RL7RL0和SL2SL0的狀態(tài)即可確定閉合鍵所在的位置。各鍵值的確定方法如下:如前所述,當(dāng)有鍵閉合時,8279會形成一個如圖6.9所示的鍵值數(shù)據(jù)存入FIFO RAM中。     由于圖6.8中,CNTL和SHIFT接地,鍵值字節(jié)的最高兩位為00;第一列(74LS138的

65、第15引腳Y0)對應(yīng)的SCAN為000,第二列對應(yīng)的SCAN為001;當(dāng)RL7RL0的狀態(tài)分別為:11111110、11111101、11111011、11110111、11101111、11011111、10111111和01111111時,對應(yīng)的RETURN分別為:000、001、010、011、100、101、110和111。如圖中的“5”號鍵閉合時, CNTL=0、SHIFT=0、SCAN=000、RETURN=101,組成一個字節(jié)后為:00000101B=5H,同理可以求出其它的鍵值如圖6.8所示。   與顯示器的接口。圖中的顯示器為8位共陰極LED顯示器,74L

66、S138輸出的8條線用于對顯示器進(jìn)行位掃描, 75451和7407用于對LED進(jìn)行驅(qū)動。      【例 6.1 】 電路如圖6.8所示。編程從鍵盤輸入一個十進(jìn)制數(shù),并通過LED顯示出來,按0A 0F時,清除屏幕,輸入另一個十進(jìn)制數(shù)。    解:設(shè)系統(tǒng)晶振頻率為6MHz,則CLK的頻率為1MHz,為了得到100KHz的內(nèi)部時鐘,分頻系數(shù)為10。內(nèi)部RAM單元30H37H為顯示緩沖區(qū)。程序如下:        CS 8279C EQU 0FFFFH 

67、;       CS8279D EQU 0FFFEH         KEYVALUE EQU 38H        KEYFLAG BIT 00H            ORG   0000H         

68、;   MOV   SP,#60H            MOV   DPTR , #CS 8279C    ;8279初始化            MOV   A , #00H         &#

69、160;  ;8字符顯示,左入口,編碼掃描,雙鍵互鎖            MOVX  DPTR , A            MOV   A , #2AH            ;ALE/10=1MHz/10=100KHz  

70、         MOVX  DPTR , A            ACALL CLRSCR    MAINLP :ACALL READKEY            JNB   KEYFLAG , MAINLP     

71、0;      MOV   A , KEYVALUE        ;把鍵值送給ACC            CJNE  A , #0AH , NO_A    ;判斷是否按下F1F6鍵            SJMP&#

72、160; KEY_AF    NO_A   :JC    NUMKEY    KEY_AF :ACALL CLRSCR            SJMP  MAINLP               ;若按下F1F6鍵,則清除已輸入的數(shù)字  &

73、#160; NUMKEY :MOV   R7 , #7            MOV   R0 , #37H           ;將30H36H的內(nèi)容移至31H37H單元            MOV   R1 , #

74、36H    SHIFT  :MOV   A , R1            MOV   R0 , A            DEC   R0            DEC

75、0;  R1            DJNZ  R7 , SHIFT            MOV   30H , KEYVALUE      ;把鍵值送入顯示緩存的第一個單元30H         

76、   ACALL DISPLAY        SJMP MAINLP     ;*     ; READKEY: 讀閉合鍵值     ; 出口參數(shù):有鍵閉合時,鍵值被存放在 KEYVALUE ,并置 KEYFLAG 為 1     ;*     READKEY:            CLR &#

77、160; KEYFLAG            MOV   DPTR , #CS 8279C    ;讀8279狀態(tài)字            MOVX  A , DPTR            ANL   A , #0F

78、H            ;A中保留狀態(tài)字的低四位            JZ    NOKEY                ;A=0時無鍵按下,則返回     

79、60;      MOV   A , #40H            ;讀FIFO RAM的狀態(tài)寄存器命令字。            MOVX  DPTR , A            MOV   DPTR , #CS8279D&

80、#160;           MOVX  A , DPTR           ;讀鍵值            MOV   KEYVALUE , A        ;鍵值碼送入KEYVALUE單元  

81、;          SETB  KEYFLAG              ;設(shè)置鍵閉合標(biāo)志    NOKEY  :RET    ; * 顯示子程序 *    DISPLAY:            MOV&#

82、160;  DPTR , #CS 8279C            MOV   A , #90H            ;寫顯示RAM命令字            MOVX  DPTR , A     

83、0;      MOV   R7 , #6             ;循環(huán)計數(shù)初值給 R7            MOV   DPTR , #CS8279D            MOV &

84、#160; R0 , #30H    DISP1  :PUSH  DPL            PUSH  DPH            MOV   A , R0            MOV   DPTR ,

85、 #TAB         ; 取段碼            MOVC  A , A+DPTR            POP   DPH            POP  

86、 DPL            MOVX  DPTR , A           ;送段碼顯示            INC   R0          

87、60; DJNZ  R7 , DISP1            RET    ;*     ; CLRSCR: 功能 清除屏幕     ;*     CLRSCR :MOV   R0 , #30H            MOV   R7 , #8 &

88、#160;          MOV   A , #0AH            ; 全滅的段碼偏移量給 ACC    CS1    :MOV   R0 , A            INC 

89、;  R0            DJNZ  R7 , CS1            ACALL DISPLAY            RET    TAB :DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,

90、7FH,6FH,00H ;09 全滅            END 6.2 邏輯門電路擴(kuò)展 I/O 接口      AT89S51單片機(jī)理論上有4個8位并行I/O口,但在實際應(yīng)用中,由于系統(tǒng)外擴(kuò)有存儲器或其它接口芯片,P0口常復(fù)用作地址/數(shù)據(jù)總線,P2口用于提供高8位地址,P3口常工作在第二功能,真正用作I/O口的只有P1,而實際的應(yīng)用系統(tǒng)又經(jīng)常需要連接鍵盤、顯示器以及打印機(jī)等外設(shè),大部分的單片機(jī)應(yīng)用系統(tǒng)設(shè)計中都不可避免地要進(jìn)行I/O口的擴(kuò)展。在

91、單片機(jī)系統(tǒng)中,I/O端口和存儲器統(tǒng)一編址,擴(kuò)展I/O口和擴(kuò)展存儲器的方法相同,主要解決系統(tǒng)的三組總線(DB、AB、CB)與擴(kuò)展的I/O芯片的連接問題。I/O口的擴(kuò)展有應(yīng)遵守兩條原則:      擴(kuò)展輸出口時一般要有鎖存功能;      擴(kuò)展的I/O口還要注意和系統(tǒng)數(shù)據(jù)總線的三態(tài)隔離;    單片機(jī)應(yīng)用系統(tǒng)中,I/O口擴(kuò)展主要有兩種方法,第一種是使用簡單的邏輯門電路和帶三態(tài)控制的緩沖器組成,用于擴(kuò)展單個8位輸出或輸入口;另一種方法是用專門的可編程并行接口芯片如8155、8255等擴(kuò)展I/

92、O口。第一種方法電路簡單、成本低、配置靈活方便,故在單片機(jī)應(yīng)用系統(tǒng)中被廣泛采用,本節(jié)主要介紹一下使用簡單的邏輯門電路擴(kuò)展I/O口的方法。 6.2.1 用74LS273擴(kuò)展8位輸出口    單片機(jī)系統(tǒng)中需要擴(kuò)展并行的8位輸出口時,最常用方法是使用74LS273、74LS373、74LS377等鎖存器實現(xiàn)。74LS273是一個帶公共端的高速8D觸發(fā)器,引腳定義和真值表如圖 6.10(a)、(b)所示:      由74LS273組成的2位LED靜態(tài)顯示電路如圖6.11所示:     

93、60; 設(shè)待顯示的兩位BCD數(shù)存放在30H和31H單元,顯示子程序如下:    DISPTWO :             MOV  A , 30H           ;顯示十位數(shù)             MOV

94、60; DPTR , #SEGTAB             MOVC A , A+DPTR             MOV  DPTR , #0FFF0H             MOV  DPTR , A   

95、60;         MOV  A , 31H           ;顯示個位數(shù)             MOV  DPTR , #SEGTAB             MOVC A , A+DPTR             MOV  DPTR , #0FFF2H             MOV  DPTR , A     

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論