一個數碼管有八段:A,B,C,D,E,F ,G,H即由八個發光二極管組成;發光二極管導通的方向是一定的(導通電壓一般取為1.7V),這八個發光二極管的公共端有兩種:可以分別接+5V(即為共陽極數碼管)或接地(即為共陰極數碼管)
共陽極: 位選為高電平(即1)選中數碼管, 各段選為低電平(即0接地時)選中各數碼段,
共陰極: 位選為低電平(即0)選中數碼管, 各段選為高電平(即1接+5V時)選中各數碼段。
1位數碼顯示數字其實就是這8個發光二極管,哪個亮哪個不亮,從而達到顯示數字的效果,亮和不亮無非就是0或1。以共陰極為例。
數碼管的段依次從低到高如圖中的a,b,c,d,e,f,g,h(h是小數點),如果要顯示數字1,即b,c亮,其他都不亮,對應的二進制數字為:00000110,轉換為16進制為0x06。即段碼為0X06時,這個數碼管就能顯示數字1了。以此類推就可以得出1-9的斷碼了。共陽極的原理也是如此,對共陰極的段碼取反即可。
8位數碼管可以理解為8個1位數碼管組成的,這就涉及到位碼,你可以理解為位置,像第一位數碼管,第二位數碼管這樣。以共陰極為例。位選為低電平(即0)時選中該數碼管。
比如你有1個8八位數碼管,你只想讓第1、2、3、位數碼管顯示亮起來,那么即選中1,2,3,其他均不選,二進制數字為11111000,轉換為16進制為0XF8,只要設置位碼為0xF8即可達到這個效果了,其他也是一樣的,共陽極取反即可。
數碼管結構及工作原理,段碼計算方法
段碼計算方法:理論上,八個筆段可以顯示128種不同的字符,扣除其中沒有意義的組合狀態后,七段LED數碼管可以顯示的字符如表所示。相應的其它字符也可推算出來。
單片機點亮數碼管
基于上圖設計顯示驅動函數
#include 《STC89.H》 //延時程序代碼
void delay_ms(unsigned int Cnt) {
unsigned int t; while(Cnt--) { t=100; while(--t); } }
//主程序代碼
void main()
{ unsigned char i;
unsigned char code LED[16]= { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71, };
while(1) { P1=0xfe; for(i=1;i《=6;i++) { P0=LED[i];
delay_ms(400);
P1=(P1《《1)|0x01;
}
}
}