基于AT89C2051串口的LED數碼管顯示電路,AT89C2051 LED DISPLAYER
關鍵字:AT89C2051數碼管電路
AT89C2051單片機內有一個串行I/O端口,通過引腳RXD[P3.0]和TXD[P3.1]可與外部電路進行全雙工的串行異步通信,發送數據時由TXD端送出,接收時數據由RXD端輸入。串口有四種工作方式,通過編程設置,可以使其工作在任一方式以滿足不同的場合。其中,方式0是8位移位寄存器輸入/輸出方式,多用與外接移位寄存器以擴展I/O端口。串口的工作方式可以參看相關的書籍,此處不做詳細介紹。方式 0的輸出是8位串行數據,通過移位寄存器可將8位串行數據變成8位并行數據輸出,也可以將外部的8位并行數據變成8位串行數據輸入。因此外接一個移位寄存器就可擴展一個8位的并行輸入/輸出接口,如果想多擴展幾個并口就需要在外部級連幾個移位寄存器。但是這種擴展也不是無限的,因為串口的數據是一位一位串行輸入/輸出的。如果外接的移位寄存器比較多的話那么是必影響數據輸入/輸出的速度。
![](http://file.elecfans.com/web1/M00/65/21/pIYBAFujh8OAe6AJAAA4EqqwKWU673.jpg)
串口外接的移位寄存器有兩種,一種是“串行輸入/并行輸出移位寄存器”(如:741一S164),另一種是“并行輸入/串行輸出”移位寄存器(如: 74LS165)。通過寄存器的名稱就可以看出“串行輸入/并行輸出移位寄存器”是用于串口擴展并行輸出接口,“并行輸入/串行輸出”是用于串口擴展并行輸入接口。
圖1(a)是串行輸入/并行輸出移位寄存器74LS164的管腳排列圖。其功能表見表1所示。74LS164有兩個串行數據A、B輸入端,使用時一般把它們連在一起;麗為清零輸入端,低電平有效,當該端加入低電平時,寄存器輸出Q0~Q7全為低電平。在正常情況下,清零輸入端接高電平,當CP信號上升沿到來時,數據從A、B端輸入并右移一位; Q0~Q7為并行數據輸出端,同時Q7端也是串行數據輸出端,對于串行輸入的數據,最先輸入的從Q7輸出,最后進入的從Q0輸出。CP為移位脈沖。
圖1(b)是另一種常用的“并行(串行)輸入/串行輸出”移位寄存器74LS165的管腳排列圖。該器件的功能表見表2。該器件能在一個信號的控制下并行置入一個8位數據,然后在時鐘脈沖的作用下逐位移出,也能使數據從另外一個引腳串行輸入。在圖1(b)中,DO~D7是并行數據輸入端。S/L端是控制信號輸入端,當為高電平時,具有移位功能;當為低電平時,將DO~D7端的數據置入到內部的移位寄存器保存。CP端為時鐘(即移位脈沖)輸入端,當S/L= 1時,CP端的每一次正跳變,都會使已存入內部的數據DO~D7從Q7端移出一位,移位的順序是D7最先從Q7端移出,Q0最后從Q7端移出。CI端為時鐘脈沖禁止端,當該端為低電平時,時鐘信號(移位脈沖)不能進入,正常工作時必須接高電平。S1為串行數據輸入端,在S/L=1時,SI端的數據在CP脈沖上升沿作用下置入Q0,因此,當CP脈沖上升沿到來時內部的數據DO~D7從Q7端移出一位同時外部數據通過SI移入一位,當經過8次CP上升沿后 DO~D7這8個數據就全部通過Q7輸出,而內部的DO~D7全部更新為通過SI的輸入的信號。例如:如果SI外接電源電壓,那么當CP上升沿到來時,Q7會移出一位數據,而S1會移入一個“1”,當經過8個上升沿后,原先置入的DO~D7全被移出,內部的Q0~Q7全被更新為 “1”。如果CP上升沿再次到來時,輸出的就是“1”。因此當8個輸入數據都通過Q7輸出后,如果還想輸入就再次必須置入新的數據
![](http://file.elecfans.com/web1/M00/65/08/o4YBAFujh1yAb0WlAABchsX-dmE317.jpg)
通過對兩種移位寄存器的分析可以得出。通過串口擴展單片機的I/O口的具體電路如圖2所示:
圖2(a)是通過串口擴展的并行輸出接口。RXD作為數據輸出線,TXD作為移位時鐘脈沖。每一個時鐘信號的上升沿加到74LS164的CP端時,移位寄存器將串口輸出的數據移入一位,8個時鐘脈沖過后串口輸出的8位二進制數全部移入74LS164,通過Q0-Q7并行輸出。
圖2(b)是通過串口擴展的并行輸入接口。同樣RXD作為數據輸入線,TXD作為移位時鐘脈沖。每一個時鐘信號的上升沿加到74LS165的CP端時,移位寄存器就將內部的數據向外移一位,通過Q7輸出。8個時鐘脈沖過后,并行輸入的8位二進制數全部移出,通過Q7串行輸入。
基于串口的LED數碼管靜態顯示電路
在串口擴展中最常用的就是基于串口的LED數碼管顯示電路。在單片機應用系統中,LED數碼管的顯示常用兩種方法:靜態顯示和動態掃描顯示。所謂靜態顯示,就是每一個顯示器都要占用單獨的具有鎖存功能的I/O接口用于筆劃段字形代碼。這樣單片機只要把要顯示的字形代碼發送到接口電路,就不用管它了,直到要顯示新的數據時,再發送新的字形碼,因此,使用這種方法單片機中CPU的開銷小。可以提供單獨鎖存的I/O接口電路很多,常用的就是通過串口外接串并轉換器74LS164,擴展并行的I/O口。需要幾個數碼管就擴展幾個并行接口,數碼管直接接在74LS164的輸出腳上,單片機通過串口將要顯示數據的字形碼逐一的串行移出至74LS164的輸出腳上數碼管就可以顯示相應的數字。
1. 硬件設計
單片機AT89C2051的串口外接1片74LS164作為LED顯示器的靜態顯示接口,把AT89C2051的RXD作為數據輸出線,TXD作為移位時鐘脈沖。Q0-Q7(第3—6和10—13引腳)并行輸出端分別接LED顯示器的DP---A各段對應的引腳上。圖中采用的是共陰極數碼管,因而各數碼管的公共極接電源GND,要顯示某字段則相應的移位寄存器74LS164的輸出線必須是高電平。P1口接8個按鍵,分別編號為KEY1--KEY8。當某個按鍵按下時。某個數就顯示在數碼管上。
2. 軟件設計
軟件設計流程圖如圖4所示。圖(a)為主程序流程圖,圖(b)為顯示子程序流程圖。
開機時,初始化數碼管,通過串口將“0”的字形碼輸出使數碼管顯示“O”。然后判斷P1口是否有鍵按下,如果沒鍵按下繼續判斷。
當確認有鍵按下后單片機將P1口的值賦給累加器A,由于按鍵沒被按下時是低電平,被按下后為高電平因此判斷A中哪一位為高電平就能得出哪個按鍵被按下。將此按鍵的編號讀入顯示緩沖區65H中,然后調用顯示子程序將按鍵編碼顯示在數碼管上。這樣程序就完成了一次的執行過程。
![](http://file.elecfans.com/web1/M00/65/21/pIYBAFujh8OAJ96lAABCCCUUzSA024.jpg)
![](http://file.elecfans.com/web1/M00/65/08/o4YBAFujh1yATyvPAABGoij3ITw067.jpg)
顯示子程序首先初始化串口,使串口工作在方式0,再讀取顯示緩沖區內的數據(顯示緩沖區主要是用來存放即將要顯示的數據),然后通過查表的方式找到對應的字形碼,最后把字形碼寫入串口寄存器SBUF通過串口方式0發送出去。當8個時鐘脈沖后,字形碼都移至74Ls164的Q0-Q7,數碼管就顯示相應按鍵的編碼。
顯示子程序是怎么將顯示緩沖區中的數據變成相應的字形碼呢?具體的方法是將每個數字的字形碼以16進制數從小到大的次序依次存放在存儲器中的固定區域中,構成顯示代碼表。當要顯示某字符時,把表格的起始地址送入數據指針寄存器DPTR中作為基址,將顯示緩沖區內的數據作為偏移量送入變址寄存器A,執行查表指令“MOVCA,@A+DPTR”,則累加器A中得到的結果即表格中取出的對應數字的字形碼。
注意:MOVC指令是將程序存儲器內相應地址的值賦給累加器A。MOVC指令只有兩種,一種是:MOVCA,@A+DPTR,將程序存儲器中地址為A+ DPTR內的數據賦給A,例如:累加器A內的數據為01H,而DPTR內的數據為2000H,程序存儲器中地址2001H內的數據為50H,那么執行 MOVCA,@A+DPTR指令后,累加器A內的數據變為50H。另一種是MOVCA,@A+PC。將程序存儲器中地址為A+PC內的數據賦給A。兩種指令的功能基本是一樣。只是第一種中的地址是存放在DPTR中,而第二種是直接使用PC指針的地址。
對于電路中的74LS164共陰極數碼管數據位和字形的對應關系如下表。
![](http://file.elecfans.com/web1/M00/65/21/pIYBAFujh8OAY4alAAB9gqIyxnc562.jpg)
由于單片機在以方式0串行發送數據的時候數據從RXD引腳從低位到高位依次輸出,而最先輸出的數據經過74LS164串轉并后到達Q7,也就是說單片機內的DO通過串口發送并經過74LS164后到達74LS164的Q7腳即數碼管的A腳,因此在單片機內字型碼與74LS164所對應的字型碼正好相反,所以在單片機內O-8所對應的字型碼分別是:
3FH,06H,5BH,4FH,66H,6DH,7DH,07H.7FH。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
發布評論請先 登錄
相關推薦
求解答!用STC89C51系列數字秒表
實驗室學51單片機,用STC89C51系列,作業太難了,求佬給源代碼幫助一下謝謝
1.通過定時器,8位數碼管,8個獨立按鍵完成1000秒以內的數字秒表,最小分辨0.1秒,設置啟動計秒鍵,暫停計秒鍵
發表于 12-08 16:48
89C52單片機控制直流24V電機輸出,數碼管顯示亂碼?
一電子板,89C52單片機控制直流24V電機輸出,帶93C86讀取用戶數據,能正常運行,但起動10-20秒內不能控制,數碼管顯示亂碼?
發表于 11-10 19:06
led數碼管顯示器的顯示方式有幾種,各有什么特點
LED數碼管顯示器是一種廣泛應用于各種場合的顯示設備,具有顯示效果好、壽命長、能耗低等特點。 靜態顯示
什么是共陽極數碼管怎么判斷
共陽極數碼管是一種常見的七段顯示器,用于顯示數字和字母。它由七個發光二極管(LED)組成,分別代表數字0-9的每個段。共陽極
LED數碼管的顯示方式和驅動方式
LED數碼管,作為現代電子顯示技術中的重要組成部分,以其高亮度、長壽命和低功耗等特點,廣泛應用于各種數字顯示設備中。本文將詳細闡述LED
評論