我們最常用的是七段式和八段式LED數碼管,八段比七段多了一個小數點,其他的基本相同。所謂的八段就是指數碼管裡有八個小LED發光二極管,通過控制不同的LED的亮滅來顯示出不同的字形。數碼管又分為共陰極和共陽極兩種類型,其實共陰極就是将八個LED的陰極連在一起,讓其接地,這樣給任何一個LED的另一端高電平,它便能點亮。而共陽極就是将八個LED的陽極連在一起。其原理圖如下。
其中引腳圖的兩個COM端連在一起,是公共端,共陰數碼管要将其接地,共陽數碼管将其接正5伏電源。一個八段數碼管稱為一位,多個數碼管并列在一起可構成多位數碼管,它們的段選線(即a.b.c.d.e.fg.dp)連在一起,而各自的公共端稱為位選線。顯示時,都從段選線送入字符編碼,而選中哪個位選線,那個數碼管便會被點亮。數碼管的8段,對應一個字節的8位, a對應最低位, dp對應最高位。所以如果想讓數碼管顯示數字0,那麼共陰數碼管的字符編碼為00111111 , 即Ox3f;共陽數碼管的字符編碼為11000000,即Oxco。可以看出兩個編碼的各位正好相反。如下圖。
由上面的圖可以得到共陽極和共陰極的數碼管的編碼
共陽極:位選為高電平(即1)選中數碼管,各段選為低電平(即0接地時)選中各數碼段,由0到f的編碼為:
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
共陰極:
位選為低電平(即0)選中數碼管,各段選為高電平(即1接 5V時)選中各數碼段,
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
數碼管靜态顯示
當多位數碼管應用于某一系統時,它們的“位選”是可獨立控制的,而“段選”是連接在一起的,我們可以通過位選信号控制哪幾個數碼管亮,而在同一時刻,位選選通的所有數碼管上顯示的數字始終都是一樣的,因為它們的段選是連接在一起的,所以送入所有數碼管的段選信号都是相同的,那麼它們顯示的數字必定一樣,數碼管的這種顯示方法叫做靜态顯示。
讓一個數碼管循環顯示0-9
下面是程序,從DSY_CODE數組中依次的将編碼數據送到P0口就可以了,是不是很簡單。
#include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]= { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 }; void DelayMS(uint x) { uchar t; while(x--) for(t=120;t>0;t--); } void main() { uchar i=0; P0=0x00; while(1) { P0=DSY_CODE[i ]; if(i==10)i=0; DelayMS(200); } }
今天的分享就到這裡了,歡迎大家評論轉發,有問題歡迎關注私信我哦。
,