單片機(jī) 數(shù)碼管的發(fā)光
數(shù)碼管的顯示原理都一樣,都靠點(diǎn)亮內(nèi)部發(fā)光二極管來(lái)發(fā)光。TX-1C 的單片機(jī)開(kāi)發(fā)板是6位數(shù)碼管。數(shù)碼管的引腳是10個(gè),顯示8字需要7個(gè)小段,外加一個(gè)小數(shù)點(diǎn),共有8個(gè)發(fā)光二極管,還有一個(gè)公共端。公共端分為共陽(yáng)極和共陰極,共陰極即8個(gè)二極管的陰極連在一起,共陽(yáng)極即8個(gè)二極管的陽(yáng)極連在一起。TX-1C開(kāi)發(fā)板的數(shù)碼管位共陰極。多為一體的數(shù)碼管,內(nèi)部的公共端是獨(dú)立的,而負(fù)責(zé)顯示什么數(shù)字的斷線是全部連在一起的,獨(dú)立的公共端可以控制多位一體中的哪一位數(shù)碼管點(diǎn)亮,而連在一起的段線可以能控制這位數(shù)碼管能亮出什么數(shù)字。公共端叫作位選線,連在一起的段線叫作段選線。有了這兩根線,就能通過(guò)單片機(jī)控制任意的數(shù)碼管顯示任意的數(shù)字。
(1) 數(shù)碼管的靜態(tài)顯示
在同一時(shí)刻,位選選通的數(shù)碼管顯示的數(shù)字始終是相同的,因?yàn)樗鼈兊亩芜x是連在一起的,所以送入的數(shù)碼管的段選信號(hào)是相同的。數(shù)碼管的這種顯示方法叫靜態(tài)顯示法。
6個(gè)數(shù)碼管的位選端與74HC573鎖存器U2的低六位連接,鎖存器的數(shù)據(jù)輸入端連接到P0口。6個(gè)數(shù)碼管的a、b、c、d、e、f、g、h的引腳分別連在一 起,然后與74HC573鎖存器U1的數(shù)據(jù)輸出端連接,鎖存器的數(shù)據(jù)輸入端也與P0口相連。U1 、U2的鎖存端與P2口的6、7位相連。
代碼
#include
sbit dula=P2^6; // 申明U1鎖存器的鎖存端
sbit wela=P2^7; // 申明U2鎖存器的鎖存端
void main()
{
wela=1; //打開(kāi)U2鎖存器
P0=0xfe; //送入位選信號(hào)
wela=0; //關(guān)閉U2鎖存器
dula=1; //打開(kāi)U1鎖存器
P0=0x7f; //送入段選信號(hào)
dula=0; //關(guān)閉U1鎖存器
}
以上就是數(shù)碼管靜態(tài)顯示的代碼。
(2)數(shù)碼管的動(dòng)態(tài)顯示
第一個(gè)數(shù)碼管顯示1,時(shí)間為0.5秒,然后關(guān)閉它。第二個(gè)數(shù)碼管顯示2,時(shí)間為0.5秒………………
代碼如下:
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table_1[]={ 0x1, 0x2, 0x4, 0x8, 0x10, 0x20 }; //位選信號(hào)
uchar code table_2[]={ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; //段選信號(hào)
void delays(uint); //延時(shí)函數(shù)
uint h;
void main()
{
while(1)
{ for( h=1; h<=6; h++)
{ dula=1; //打開(kāi)段選
P0=table_2[h]; // 送入段選信號(hào)
dula=0; // 關(guān)閉段選
P0=0xff; // 消影語(yǔ)句,每次送入段選信號(hào)后,P0口仍然保留著上次的段選數(shù)據(jù),若不加 P0=0xff; 在執(zhí)行打開(kāi)位選鎖存器命令后,P0口
段選數(shù)據(jù)會(huì)立即加在數(shù)碼管上,,接下來(lái)才是再次通過(guò)P0口給位選鎖存器送入位選數(shù)據(jù)。這個(gè)過(guò)程很短暫,但我們?nèi)阅芸匆?jiàn) 數(shù)碼管顯示混亂的現(xiàn)象。加上消影語(yǔ)句后就能避免這樣的狀況發(fā)生
wela=1; // 打開(kāi)位選
P0=table_2[h]; //送入位選信號(hào)
wela=0; // 關(guān)閉位選
delay(500);
}
}
}
void delay( uint xms) // 延時(shí)函數(shù) (在下篇會(huì)和鎖存器一并作出敘述)
{
uint i,j;
for( i=mxs; i>0; i--)
for( j=110; j>0; j--);
}