#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};//分別對應相應的數(shù)碼管點亮,即位碼
unsigned char TempData[10]; //存儲顯示值的數(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) // 控制顯示一定時間
{
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); // 掃描間隙延時,時間太長會閃爍,太短會造成重影 } } 通過將后一位賦值給前一位,達到向左移動,上面的代碼邏輯比較復雜,記錄下來慢慢看,先學下一個知識點了。