通过数组的传递实现数码管滚动显示,已验证(普中科技51开发板HC6800)

#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;		
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 设计师:曲奇光波 返回首页