LED數(shù)碼顯示器的連接與編程
在單片機(jī)系統(tǒng)中,通常用LED數(shù)碼顯示器來(lái)顯示各種數(shù)字或符號(hào)。由于它具有顯示清晰、亮度高、使用電壓低、壽命長(zhǎng)的特點(diǎn),因此使用非常廣泛。
八段LED顯示器
引入:還記得我們小時(shí)候玩的“火柴棒游戲”嗎,幾根火柴棒組合起來(lái),可以拼成各種各樣的圖形,LED顯示器實(shí)際上也是這么一個(gè)東西。
八段LED顯示器由8個(gè)發(fā)光二極管組成。基中7個(gè)長(zhǎng)條形的發(fā)光管排列成“日”字形,另一個(gè)賀點(diǎn)形的發(fā)光管在顯示器的右下角作為顯示小數(shù)點(diǎn)用,它能顯示各種數(shù)字及部份英文字母。LED顯示器有兩種不同的形式:一種是8個(gè)發(fā)光二極管的陽(yáng)極都連在一起的,稱之為共陽(yáng)極LED顯示器;另一種是8個(gè)發(fā)光二極管的陰極都連在一起的,稱之為共陰極LED顯示器。如下圖所示。`共陰和共陽(yáng)結(jié)構(gòu)的LED顯示器各筆劃段名和安排位置是相同的。當(dāng)二極管導(dǎo)通時(shí),相應(yīng)的筆劃段發(fā)亮,由發(fā)亮的筆劃段組合而顯示的各種字符。8個(gè)筆劃段hgfedcba對(duì)應(yīng)于一個(gè)字節(jié)(8位)的D7 D6 D5 D4 D3 D2 D1 D0,于是用8位二進(jìn)制碼就可以表示欲顯示字符的字形代碼。例如,對(duì)于共陰LED顯示器,當(dāng)公共陰極接地(為零電平),而陽(yáng)極hgfedcba各段為0111011時(shí),顯示器顯示"P"字符,即對(duì)于共陰極LED顯示器,“P”字符的字形碼是73H。如果是共陽(yáng)LED顯示器,公共陽(yáng)極接高電平,顯示“P”字符的字形代碼應(yīng)為10001100(8CH)。這里必須注意的是:很多產(chǎn)品為方便接線,常不按規(guī)則的方法去對(duì)應(yīng)字段與位的關(guān)系,這時(shí)字形碼就必須根據(jù)接線來(lái)自行設(shè)計(jì)了,后面我們會(huì)給出一個(gè)例子。
1、靜態(tài)顯示接口
在單片機(jī)應(yīng)用系統(tǒng)中,顯示器顯示常用兩種方法:靜態(tài)顯示和動(dòng)態(tài)掃描顯示。所謂靜態(tài)顯示,就是每一個(gè)顯示器都要占用單獨(dú)的具有鎖存功能的I/O接口用于筆劃段字形代碼。這樣單片機(jī)只要把要顯示的字形代碼發(fā)送到接口電路,就不用管它了,直到要顯示新的數(shù)據(jù)時(shí),再發(fā)送新的字形碼,因此,使用這種方法單片機(jī)中CPU的開(kāi)銷小。可以提供單獨(dú)鎖存的I/O接口電路很多,這里以常用的串并轉(zhuǎn)換電路74LS164為例,介紹一種常用靜態(tài)顯示電路,以使大家對(duì)靜態(tài)顯示有一定的了解。MCS-51單片機(jī)串行口方式押為移們寄存器方式,外接6片74LS164作為6位LED顯示器的靜態(tài)顯示接口,把8031的RXD作為數(shù)據(jù)輸出線,TXD作為移位時(shí)鐘脈沖。74LS164為TTL單向8位移位寄存器,可實(shí)現(xiàn)串行輸入,并行輸出。其中A、B(第1、2腳)為串行數(shù)據(jù)輸入端,2個(gè)引腳按邏輯與運(yùn)算規(guī)律輸入信號(hào),公一個(gè)輸入信號(hào)時(shí)可并接。T(第8腳)為時(shí)鐘輸入端,可連接到串行口的TXD端。每一個(gè)時(shí)鐘信號(hào)的上升沿加到T端時(shí),移位寄存器移一位,8個(gè)時(shí)鐘脈沖過(guò)后,8位二進(jìn)制數(shù)全部移入74LS164中。R(第9腳)為復(fù)位端,當(dāng)R=0時(shí),移位寄存器各位復(fù)0,只有當(dāng)R=1時(shí),時(shí)鐘脈沖才起作用。Q1…Q8(第3-6和10-13引腳)并行輸出端分別接LED顯示器的hg---a各段對(duì)應(yīng)的引腳上。關(guān)于74LS164還可以作如下的介紹:所謂時(shí)鐘脈沖端,其實(shí)就是需要高、低、高、低的脈沖,不管這個(gè)脈沖是怎么來(lái)的,比如,我們用根電線,一端接T,一端用手拿著,分別接高電平、低電平,那也是給出時(shí)鐘脈沖,在74LS164獲得時(shí)鐘脈沖的瞬間(再講清楚點(diǎn),是在脈沖的沿),如果數(shù)據(jù)輸入端(第1,2引腳)是高電平,則就會(huì)有一個(gè)1進(jìn)入到74LS164的內(nèi)部,如果數(shù)據(jù)輸入端是低電平,則就會(huì)有一個(gè)0進(jìn)入其內(nèi)部。在給出了8個(gè)脈沖后,最先進(jìn)入74LS164的第一個(gè)數(shù)據(jù)到達(dá)了最高位,然后再來(lái)一個(gè)脈沖會(huì)有什么發(fā)生呢?再來(lái)一個(gè)脈沖,第一個(gè)脈沖就會(huì)從最高位移出,就象車站排隊(duì)買票,欄桿就那么長(zhǎng),要從后面進(jìn)去一個(gè)人,前面必須要從前面走出去一個(gè)人才行。 搞清了這一點(diǎn),下面讓我們來(lái)看電路,6片7LS164首尾相串,而時(shí)鐘端則接在一起,這樣,當(dāng)輸入8個(gè)脈沖時(shí),從單片機(jī)RXD端輸出的數(shù)據(jù)就進(jìn)入到了第一片74LS164中了,而當(dāng)?shù)诙€(gè)8個(gè)脈沖到來(lái)后,這個(gè)數(shù)據(jù)就進(jìn)入了第二片74LS164,而新的數(shù)據(jù)則進(jìn)入了第一片74LS164,這樣,當(dāng)?shù)诹鶄€(gè)8個(gè)脈沖完成后,首次送出的數(shù)據(jù)被送到了最左面的164中,其他數(shù)據(jù)依次出現(xiàn)在第一、二、三、四、五片74LS164中。有個(gè)問(wèn)題,在第一個(gè)脈沖到來(lái)時(shí),除了第一片74LS164中接收數(shù)據(jù)外,其他各片在干嗎呢?它們也在接收數(shù)據(jù),因?yàn)樗鼈兊臅r(shí)鐘端都是被接在一起的,可是數(shù)據(jù)還沒(méi)有送到其他各片呢,它們?cè)诮邮帐裁磾?shù)據(jù)呢?。。。。。。其實(shí)所謂數(shù)據(jù)不過(guò)是一種說(shuō)法而已,實(shí)際就是電平的高低,當(dāng)?shù)谝粋€(gè)脈沖到來(lái)時(shí),第一片164固然是從單片機(jī)接收數(shù)據(jù)了,而其它各片也接到前一片的Q8上,而Q8是一根電線,在數(shù)字電路中它只可能有兩種狀態(tài):低電平或高電平,也就是“0”和“1”。所以它的下一片74LS164也相當(dāng)于是在接收數(shù)據(jù)啊。只是接收的全部是0或1而已。這個(gè)問(wèn)題放在這兒說(shuō)明,可能有朋友不屑一顧,而有的朋友可能還是不清楚,這實(shí)際上涉及到數(shù)的本質(zhì)的問(wèn)題,如果不懂的,請(qǐng)仔細(xì)思考,并找一些數(shù)字電路的數(shù),理解164的工作原理,再來(lái)看這個(gè)問(wèn)題,或者去看看我的另一篇文章《初學(xué)單片機(jī)易掌握的概念》。務(wù)必搞懂,搞懂了這一點(diǎn),你的級(jí)別就高過(guò)初學(xué)者了。
入口:把要顯示的數(shù)分別放在顯示緩沖區(qū)60H-65H共6個(gè)單元中,并且分別對(duì)應(yīng)各個(gè)數(shù)碼管LED0-LED5。 出口:將預(yù)置在顯示緩沖區(qū)中的6個(gè)數(shù)成相應(yīng)的顯示字形碼,然后輸出到顯示器中顯示。顯示程序如下:DISP: MOV SCON,#00H ;初始化串行口方式0 MOV R1,#06H ;顯示6位數(shù) MOV R0,#65H ;60H-65H為顯示緩沖區(qū) MOV DPTR,#SEGTAB ;字形表的入口地址LOOP: MOV A,@R0 ;取最高位的待顯示數(shù)據(jù) MOVC A,@A+DPTR ;查表獲取字形碼 MOV SBUF,A ;送串口顯示DELAY: JNB TI,DELAY ;等待發(fā)送完畢 CLR TI ;清發(fā)送標(biāo)志 DEC R0 ;指針下移一位,準(zhǔn)備取下一個(gè)待顯示數(shù) DJNZ R1,LOOP ;直到6個(gè)數(shù)據(jù)全顯示完。 RET SETTAB: ;字形表,前面有介紹,以后我們?cè)俳榻B字形表的制作。 DB 03H 9FH 27H 0DH 99H 49H 41H 1FH 01H 09H 0FFH ; 0 1 2 3 4 5 6 7 8 9 消隱碼測(cè)試用主程序 ORG 0000H AJMP START ORG 30HSTART: MOV SP,#6FH MOV 65H,#0 MOV 64H,#1 MOV 63H,#2 MOV 62H,#3 MOV 61H,#4 MOV 60H,#5 LCALL DISP SJMP $如果按圖示數(shù)碼管排列,則以上主程序?qū)@示的是543210,想想看,如果要顯示012345該怎樣送數(shù)? 下面我們來(lái)分析一下字形表的制作問(wèn)題。先就上述“標(biāo)準(zhǔn)”的圖形來(lái)看吧。寫出數(shù)據(jù)位和字形的對(duì)應(yīng)關(guān)系并列一個(gè)表如下(設(shè)為共陽(yáng)型,也就是相應(yīng)的輸出位為0時(shí)筆段亮)
數(shù)據(jù)位 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
字形碼 |
筆段位 |
A |
B |
C |
D |
E |
F |
G |
H | |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
03H |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
9FH |
2 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
27H |
3 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0DH |
4 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
99H |
5 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
49H |
6 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
41H |
7 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1FH |
8 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
01H |
9 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
09H |
如何,字形表會(huì)做了吧,就是這樣列個(gè)表格,根據(jù)要求(0亮或1亮)寫出相應(yīng)位的0和1,就成了。做個(gè)練習(xí),寫出A-F的字形碼吧。如果為了接線方便而打亂了接線的順序,那么字形表又該如何接呢?也很簡(jiǎn)單,一樣地列表啊。以新實(shí)驗(yàn)板為例,共陽(yáng)型。接線如下:P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0C E H D G F A B則字形碼如下所示:;0 00101000 28H;1 01111110 7EH;2 10100100 0A4H;3 01100100 64H ;4 01110010 72H;5 01100001 61H ;6 00100001 21H;7 01111100 7CH;8 00100000 20H;9 01100000 60H作為練習(xí),大家寫出A-F的字形代碼。本來(lái)這里是講解顯示器的靜態(tài)接口的,到此應(yīng)當(dāng)可算結(jié)束了,但是我還想接著上面講到的數(shù)的本質(zhì)的問(wèn)題再談一點(diǎn)。單片機(jī)中有一些術(shù)語(yǔ)、名詞本來(lái)是幫助我們理解事物的,但有時(shí)我們會(huì)被這些術(shù)語(yǔ)的相關(guān)語(yǔ)義所迷惑,以致不能進(jìn)一步認(rèn)清他們的本質(zhì),由此往往陷入困惑的境界。只有深入地了解了74LS164的工作特性,才能真正理解何謂串行的數(shù)據(jù)。有興趣的朋友還可以再看看我網(wǎng)站上“其他資料”中的“銀行利率屏的設(shè)計(jì)”一文。
評(píng)論
查看更多