#include <reg51.h>
#define GPIO_DIG P0
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
unsigned char code DIG_CODE[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char DisplayData[8] = {8,7,6,5,4,3,2,1};
unsigned char num;
void DigDisplay(); //数码管动态扫描函数
void Number(); //可显示的数字范围限制为1~8
void Roll(); //数组传递函数
void main(void)
{
int i = 0;
while(1)
{
Roll();
for(i = 0;i < 100;i++)
DigDisplay();
}
}
void Number()
{
for(num=0;num<8;num++)
{
DisplayData[num] = DIG_CODE[7-num];
}
}
void DigDisplay()
{
unsigned char i;
unsigned int j;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//显示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//显示第7位
}
GPIO_DIG = DIG_CODE[DisplayData[i]];//发送段码
j=100; //扫描间隔时间设定
while(j--);
GPIO_DIG=0x00;//消隐
}
}
void Roll()
{
unsigned char temp;
temp = DisplayData[7];
DisplayData[7] = DisplayData[6];
DisplayData[6] = DisplayData[5];
DisplayData[5] = DisplayData[4];
DisplayData[4] = DisplayData[3];
DisplayData[3] = DisplayData[2];
DisplayData[2] = DisplayData[1];
DisplayData[1] = DisplayData[0];
DisplayData[0] = temp;
}


05-27
3427
