在51單片機學習(xi) 過程中,相對基礎的一個(ge) 實驗就是利用七段數碼管依次顯示數字0-9。很多時候,我們(men) 按照要求,搭建了電路,編寫(xie) 了對應的顯示控製程序,最後運行,可能對於(yu) 七段數碼管顯示數字的原理並沒有進行深入的研究。今天結合自己的理解,給出七段數碼管顯示的原理。
七段數碼管,本身利用發光二極管的原理,組成一個(ge) '8'的形狀,這個(ge) '8'正好是七段組成,所以一般稱為(wei) 七段數碼管。
組成這個(ge) 7段數碼管的每個(ge) 部分又分為(wei) a,b,c,d,e,f,g部分,分別對應如下所示:
七段數碼管的連接方式,根據現實布線的方式,可以組成共陽數碼管和共陰數碼管,所謂共陽,就是數碼管的一極全部接電源,而二極管根據發光原理,隻能是正極接電源,負極接地,所以數碼管一級全部接電源的情況,稱為(wei) 共陽數碼管,如下所示:
在proteus元器件庫中,共陽數碼管名稱是:7SEG-COM-AN-[COLOR]
共陰數碼管,就是公共一極全部接地,如下所示:
在proteus元器件庫中,共陽數碼管名稱是:7SEG-COM-CAT-[COLOR]
上麵的兩(liang) 個(ge) 圖形,可能看不出問題所在,主要區別在於(yu) 電路圖中的電源和接地圖標不同:
在實際編程中,基本采用一種類型數碼管顯示即可,默認都是選擇共陰數碼管,也就是我們(men) 需要讓開發板輸出電壓為(wei) 高電平,點亮對應的數碼管。
在上麵的字母對應的七段數碼管中,要顯示0-9,需要的電平如下所示:
a | b | c | d | e | f | g | 字形 | 所需字母數碼段 |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | abcdef |
0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | bc |
1 | 1 | 0 | 1 | 1 | 0 | 1 | 2 | abdeg |
1 | 1 | 1 | 1 | 0 | 0 | 1 | 3 | abcdg |
0 | 1 | 1 | 0 | 0 | 1 | 1 | 4 | bcfg |
1 | 0 | 1 | 1 | 0 | 1 | 1 | 5 | acdfg |
1 | 0 | 1 | 1 | 1 | 1 | 1 | 6 | acdefg |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 7 | abc |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 8 | abcdefg |
1 | 1 | 1 | 1 | 0 | 1 | 1 | 9 | abcdfg |
光這個(ge) 表,看不出要怎麽(me) 設置引腳的電平高低,但是我們(men) 可以通過代碼中的值來反推這個(ge) 表,一般我們(men) 的代碼中可能有這樣一個(ge) 表示顯示數字的數組:
unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
這一組數據,其實對應上麵共陰數碼管表,可以這麽(me) 理解,把數碼管的g,f,e,d,c,b,a七個(ge) 段,外加一個(ge) 0位,正好組成八位二進製,其中0對應0x3f,就是0011 1111,正好對應上麵表格中的按照順序1111 110反過來的表示。1對應0x06,也就是0000 0110,同樣對應上麵表格0110 000反過來的表示。後麵都是類似的規律。顯示數字8,全部點亮,也就是1111 111,反過來二進製表示就是0111 1111,正好對應十六進製0x7f。
理解了這些規律,再反過來理解數碼管的顯示,其實就不難了。
以上是對七段數碼管顯示數字0-9的研究,其實數碼管還可以顯示很多其他字母,至少大寫(xie) 的E,F,L都是可以模擬顯示的,規律也一樣,點亮七段數碼光的某一些段,就可以顯示對應的字形,其實並不是真正的顯示某一個(ge) 字形,而是用了拚湊形狀讓二極管發光的辦法。