官术网_书友最值得收藏!

  • 單片機原理及應用
  • 趙旭輝 楊靈主編
  • 2697字
  • 2021-09-27 12:50:19

3.3 數碼管模塊的顯示

課件 數碼管模塊的顯示

視頻 數碼管模塊的顯示

當有多個數碼管需要聯合顯示時,采用分別驅動七段數碼管的方法,效率較低,并且會占用寶貴的端口。為此可以采用數碼管模塊方式,在節省端口的前提下,實現更多內容的顯示。

1.數碼管模塊的內部結構與點亮原理

數碼管模塊就是將多個分立的同類數碼管組合在一起構成的。其組合方法是將模塊中每個數碼管里相同名稱的段選引腳(a、b、c、d、e、f、g、dp)按相同名稱并聯后再與各個數碼管的公共引腳分別引出,如圖3-10所示。其顯示的原理是通過給段選引腳送入數字編碼確定顯示內容,再控制公共引腳來決定一個或幾個數碼管點亮。數碼管模塊也分為共陰極和共陽極兩種。共陰極數碼管模塊其內部的數碼管均為共陰型,同理,共陽極數碼管模塊其內部的數碼管均為共陽型。

圖3-10 數碼管模塊及內部邏輯引腳結構圖

決定數碼管顯示內容的字節編碼稱為段選碼。數碼管模塊中每一個數碼管都有一個公共極(共陰/共陽),通過改變公共極的值,可以管控某個數碼管的電路導通并點亮。將數碼管的所有公共極的狀態組合在一起構成的編碼就稱為位選碼。顯然由位選碼可以決定模塊中哪一個數碼管點亮;由段選碼決定點亮的數碼管顯示什么內容。因此,當需要數碼管模塊中某一個數字點亮時,只需要做兩件事情:

(1)確定段選碼,即欲顯示的數字編碼;

(2)指定位選碼,即設定欲點亮的數碼管位置。

【課堂練習】讓含有4個數碼管(共陰極)的模塊中第二個數碼管點亮并顯示數字7。

【分析】共陰極數碼管要顯示數字7,查表3-2可知其段選碼為0000111,即07H,可以將數碼管模塊對應的引腳接到單片機的P0口的各個引腳上。要讓第二個數碼管點亮,就是要使第二個數碼管的位選為打開狀態??紤]到是共陰極數碼管,所以設為低電平就可以點亮該數碼管,其他數碼管的公共極連接為高電平。按照上面的分析,將這4個引腳分別接到P2口的高4位引腳上,則對應的位選碼應為11010000,即D0H。(位選碼接在P2口上,低4位未用故為0,高4位中,第二個數碼管的引腳與P2.5相連,故此位為0,其余各位均為1,所以位選碼為11010000。)

其電路連接情況如圖3-11所示。

圖3-11 數碼管模塊的連接與顯示

根據電路原理圖,可編寫驅動程序如下:

將上述程序編譯后,寫入單片機內,進行仿真運行,看到第二個數碼管點亮了。

觀察上面程序,請思考,如果將第12條語句放在第6條語句前面,行不行?會產生怎么樣的結果?為什么會產生這樣的結果?

2.鎖存器與動態顯示

課件 數碼管的動態顯示

視頻 數碼管的動態顯示

在上面例子中,控制這個數碼管模塊需要使用兩個并行接口。通過前面的介紹可知,除了P1口外,其他3個并行接口都在擔負著其他作用,如果為了顯示數碼管的內容而將端口全都占用了,顯然得不償失。應當用最少的并行接口來盡可能多地顯示一些內容,這就需要一個并行接口來承擔更多的“角色”,這個想法可以借助于鎖存器來實現。

常用的鎖存器有74LS273、74LS373、74LS374以及74LS573等。所謂鎖存,就是把信號暫存以維持某種電平狀態。鎖存器的最主要作用是緩存,同時也能增加驅動的能力。下面以74LS373為例說明其工作原理。74LS373的結構如圖3-12所示。

圖3-12 74LS373的結構

74LS373的D端為輸入端(1D~8D可以接到單片機的某一并口的各個引腳上),Q端為輸出端(1Q~8Q分別對應1D~8D的輸入)。當引腳為低電平時,才能輸出;如果為高電平,則Q端輸出為高阻狀態。當鎖存器的允許端LE為高電平時,Q端的輸出與D端的輸入相同;當LE為低電平時,鎖存器內容不變,Q端的輸出內容為原來D端的內容,并不再隨D端變化而變化。

依據鎖存器可以暫存的工作原理,將P1口分別與兩個鎖存器的D端相連,通過控制這兩個鎖存器的、LE來決定當前P1口的輸出鎖存到哪里,這樣1個并口就相當于2個并口了。然后再將數碼管模塊的段選碼與位選碼分別與這2個鎖存器Q端相連。這樣一來,用1個并口也可實現4個數碼管的點亮。

如果要使4個分離的數碼管同時都點亮并顯示不同的數字內容,可以使用多個鎖存器。每一個鎖存器負責點亮一個數碼管,各個數碼管的位選線連接在一起,然后通過對鎖存器輸出的調整來實現顯示不同的內容,這就是數碼管的靜態顯示方法(指數碼管點亮時,對應數碼筆畫的二極管處于恒定的導通或截止狀態)。靜態顯示方法數字顯示清晰,沒有閃爍,軟件控制比較簡單,但需要的硬件較多,因為每個數碼管的段選線都得分別控制,而且多個數碼管同時點亮,所需的電流也比較大。所以,在位數較多的時候,通常不采用靜態顯示方法。

數碼管模塊的動態顯示方法,就是通過動態地改變段選碼和位選碼,使每個數碼管按一定的頻率輪流點亮。這種方法充分利用了發光二極管的“輝光效應”,給人感覺好像所有數碼管都點亮了。利用動態顯示方法時,所有數碼管的段選線都連接在一起,但位選線是分離的,通過控制位選線的變化,可快速點亮刷新。這種方法因為所有的段選線都連在一起,硬件電路相對比較簡單,且同一時刻只有一個數碼管在點亮,所需電流也較小。但是刷新的頻率如果較慢,就會出現數碼管的閃爍現象。所以,在動態顯示中,數碼管的刷新周期不要太短。一般的數碼管刷新周期應控制在5~10ms(即刷新頻率為100~200Hz),這樣既保證了數碼管每次刷新都被完全點亮,又不會產生閃爍現象。這個刷新周期通常利用自定義的延時函數或中斷的方法來實現。如圖3-13所示,就是采用動態顯示方法實現的全部數碼管點亮。

【課堂練習】對照圖3-13,編寫驅動程序,使共陰極數碼管模塊動態顯示“2020”字樣。

【分析】通過前面的介紹可知,數碼管顯示數字的內容取決于段選碼。這里需要顯示2020這4個數字,查表3-2找到指定的段選碼,按先后順序分別為0x5b、0x3f、0x5b、0x3f。動態顯示時就是使2、0、2、0這4個數字不斷地分別顯示,根據它們顯示的順序寫出位選碼。因為只有4個位選碼,使用并口時只需接在高4位即可,低4位為0,則位選碼依次為11100000(即0xe0)、11010000(即0xd0)、10110000(即0xb0)、01110000(即0x70)。

圖3-13 采用動態顯示方法實現的全部數碼管點亮

確定了段選碼和位選碼,剩下的就是在程序中控制它們成對依次出現即可。如果每一個編碼都需要用一個變量來指定,則變量較多,程序寫起來也比較凌亂、可讀性差、效率不高。可以采用數組的方式來保存段選碼和位選碼,并利用兩個數組下標的同步變化,實現段選碼和位選碼的同步變化。

定義段選碼、位選碼數組分別為:

接著再動態控制兩個鎖存器的LE端就能實現將P1輸出的數據分別作為段選碼和位選碼了。參考程序如下:

上述實現數碼管模塊動態顯示的代碼具有很強的規律性,可以看到循環中始終在做4件事情:(1)消影(避免顯示亂碼);(2)送段選碼(確定顯示內容);(3)送位選碼(確定顯示位置);(4)延時(確定刷新頻率,顯示穩定不抖動)。請讀者舉一反三,不斷加以熟悉,實現更多復雜內容的動態顯示。

主站蜘蛛池模板: 阳山县| 沈丘县| 肥城市| 文水县| 新乡县| 怀来县| 南安市| 新津县| 探索| 无极县| 天镇县| 易门县| 盐池县| 安塞县| 乡城县| 偃师市| 家居| 屯昌县| 林甸县| 渝中区| 邵阳县| 新乐市| 巴南区| 竹北市| 津市市| 西充县| 隆安县| 托克逊县| 靖西县| 贺兰县| 肥东县| 揭阳市| 册亨县| 乌恰县| 安庆市| 九江市| 恩施市| 古蔺县| 浦县| 宁远县| 泸溪县|