單片機(jī)控制數(shù)碼管左移
#include
sbit LATCH1=P2^2;//段鎖存
sbit LATCH2=P2^3;//位鎖存
unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0~9
unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼
unsigned char TempData[10]; //存儲(chǔ)顯示值的數(shù)組
void Delay(unsigned int t); //函數(shù)聲明
void Display(unsigned char FirstBit,unsigned char Num);
main()
{
unsigned int i,k,j;
unsigned char s;
while(1)
{
j++;
if(j==20) // 控制顯示一定時(shí)間
{
j=0;
if(0==k)
{
for(s=0;s<10;s++) //完全循環(huán)完成后清零所有緩沖區(qū)
TempData[s]=0;
}
TempData[8-i]=DuanMa[k]; //把需要顯示的字符依次送緩沖區(qū)
TempData[8+1-i]=0; //不需要顯示的區(qū)域清零
if(i==(8-k))
{
i=0;
k++;
if(k==8)
k=0;
}
i++;
}
Display(0,8);//從第一位顯示,共顯示8位
}
}
void Delay(unsigned int t)
{
while(--t);
}
void Display(unsigned char FirstBit,unsigned char Num)
{
unsigned char i;
for(i=0;i { P1=0; //清空數(shù)據(jù),防止有交替重影 LATCH1=1; //段鎖存 LATCH1=0; P1=WeiMa[i+FirstBit]; //取位碼 LATCH2=1; //位鎖存 LATCH2=0; P1=TempData[i]; //取顯示數(shù)據(jù),段碼 LATCH1=1; //段鎖存 LATCH1=0; Delay(200); // 掃描間隙延時(shí),時(shí)間太長(zhǎng)會(huì)閃爍,太短會(huì)造成重影 } } 通過(guò)將后一位賦值給前一位,達(dá)到向左移動(dòng),上面的代碼邏輯比較復(fù)雜,記錄下來(lái)慢慢看,先學(xué)下一個(gè)知識(shí)點(diǎn)了。