一個(gè)數(shù)碼管有八段:A,B,C,D,E,F(xiàn) ,G,H即由八個(gè)發(fā)光二極管組成;發(fā)光二極管導(dǎo)通的方向是一定的(導(dǎo)通電壓一般取為1.7V),這八個(gè)發(fā)光二極管的公共端有兩種:可以分別接+5V(即為共陽(yáng)極數(shù)碼管)或接地(即為共陰極數(shù)碼管)
共陽(yáng)極: 位選為高電平(即1)選中數(shù)碼管, 各段選為低電平(即0接地時(shí))選中各數(shù)碼段,
共陰極: 位選為低電平(即0)選中數(shù)碼管, 各段選為高電平(即1接+5V時(shí))選中各數(shù)碼段。
1位數(shù)碼顯示數(shù)字其實(shí)就是這8個(gè)發(fā)光二極管,哪個(gè)亮哪個(gè)不亮,從而達(dá)到顯示數(shù)字的效果,亮和不亮無(wú)非就是0或1。以共陰極為例。
數(shù)碼管的段依次從低到高如圖中的a,b,c,d,e,f,g,h(h是小數(shù)點(diǎn)),如果要顯示數(shù)字1,即b,c亮,其他都不亮,對(duì)應(yīng)的二進(jìn)制數(shù)字為:00000110,轉(zhuǎn)換為16進(jìn)制為0x06。即段碼為0X06時(shí),這個(gè)數(shù)碼管就能顯示數(shù)字1了。以此類推就可以得出1-9的斷碼了。共陽(yáng)極的原理也是如此,對(duì)共陰極的段碼取反即可。
8位數(shù)碼管可以理解為8個(gè)1位數(shù)碼管組成的,這就涉及到位碼,你可以理解為位置,像第一位數(shù)碼管,第二位數(shù)碼管這樣。以共陰極為例。位選為低電平(即0)時(shí)選中該數(shù)碼管。
比如你有1個(gè)8八位數(shù)碼管,你只想讓第1、2、3、位數(shù)碼管顯示亮起來(lái),那么即選中1,2,3,其他均不選,二進(jìn)制數(shù)字為11111000,轉(zhuǎn)換為16進(jìn)制為0XF8,只要設(shè)置位碼為0xF8即可達(dá)到這個(gè)效果了,其他也是一樣的,共陽(yáng)極取反即可。
數(shù)碼管結(jié)構(gòu)及工作原理,段碼計(jì)算方法
段碼計(jì)算方法:理論上,八個(gè)筆段可以顯示128種不同的字符,扣除其中沒(méi)有意義的組合狀態(tài)后,七段LED數(shù)碼管可以顯示的字符如表所示。相應(yīng)的其它字符也可推算出來(lái)。
單片機(jī)點(diǎn)亮數(shù)碼管
基于上圖設(shè)計(jì)顯示驅(qū)動(dòng)函數(shù)
#include 《STC89.H》 //延時(shí)程序代碼
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;
}
}
}