数码管闪烁程序

//第一种  中间间隔时间可能不太准
#include<STC15F2K60S2.H>
#define uchar unsigned char
#define uint unsigned int
code uchar tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xFF};
void allinit(void);
uint tt;
void delayms(uint ms)
{
	uint i,j;
	for(i=ms;i>0;i--)
		for(j=835;j>0;j--);
}
void main(void)
{
	allinit();
	while(1)
	{
		tt++;
		if(tt<=1000)
		{
		P2 = (P2&0x1F)|0xc0;
		P0 = 0xFF;
		P2 = (P2&0x1F)|0xe0;
		P0 =tab[1] ;
		delayms(1);
		}
		else if(tt>1000&&tt<=2000)
		{
		P2 = (P2&0x1F)|0xc0;
		P0 = 0xFF;
		P2 = (P2&0x1F)|0xe0;
		P0 =tab[11] ;
		delayms(1);
		}
		else
			tt=0;
	}	
}
void allinit(void)
{
	P2 = (P2&0x1F)|0xa0;
	P0 = 0x00;

	P2 = (P2&0x1F)|0x80;
	P0 = 0xFF;

	P2 = (P2&0x1F)|0xc0;
	P0 = 0xFF;
	P2 =(P2&0x1F)|0xe0;
	P0 = 0xFF;
}
//有时要比较准确的时间,就要定时器
#include<STC15F2K60S2.H>
#define uchar unsigned char
#define uint unsigned int
code uchar tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xFF};
void allinit(void);
uint tt;
void Timer0Init(void)		//5毫秒@11.0592MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0x28;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	EA=1;
	ET0=1;
}
void timer0_service(void) interrupt 1
{
	   	tt++;
		if(tt<=200)
		{
		P2 = (P2&0x1F)|0xc0;
		P0 = 0xFF;
		P2 = (P2&0x1F)|0xe0;
		P0 =tab[1] ;
		}
		else if(tt>200&&tt<=400)
		{
		P2 = (P2&0x1F)|0xc0;
		P0 = 0xFF;
		P2 = (P2&0x1F)|0xe0;
		P0 =tab[11] ;
		}
		else
			tt=0;
}

void main(void)
{
	allinit();
	Timer0Init();
	while(1);
}
void allinit(void)
{
	P2 = (P2&0x1F)|0xa0;
	P0 = 0x00;

	P2 = (P2&0x1F)|0x80;
	P0 = 0xFF;

	P2 = (P2&0x1F)|0xc0;
	P0 = 0xFF;
	P2 =(P2&0x1F)|0xe0;
	P0 = 0xFF;
}
发布了69 篇原创文章 · 获赞 28 · 访问量 9868

猜你喜欢

转载自blog.csdn.net/weixin_44146373/article/details/104928636