//51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code ledcode[11] ={ 0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,0xff };
uchar data display[9]={10,10,10,10,10,10,10,10,10};
uchar shift,n;
/********************************************************/
/* */
/* 延时函数 */
/* */
/********************************************************/
void delayms(uint ms)
{
uchar t;
while(ms--)
{
for(t = 0; t < 120; t++);
}
}
/**********************************************************
数据交换函数(向左移动)
**********************************************************/
void exchange1()
{
uchar i;
for(i=1; i<9; i++)
{
display[i] = i;
delayms(1000);
}
}
/**********************************************************
数据交换函数(向右移动)
**********************************************************/
void exchange2()
{
uchar i,j;
for(j=0; j<8; j++)
{ for(i=0; i<8; i++)
{
display[i]=display[i+1];
}
display[8]=10;
delayms(1000);
}
}
/**********************************************************
主函数
**********************************************************/
void main(void)
{
uchar times;
P0=0xff;
P2=0xff;
n=0;
shift=0xfe;
times=8;
TMOD = 0x01; //定时器T0工作方式1
TH0 = 0xfc; //1ms定时常数
TL0 = 0x66;
IE = 0x82; //允许定时器T0中断
TR0 = 1; //启动定时器T0
while(1)
{
exchange1();
delayms(1000); //停止滞留时间
exchange2();
delayms(1000); //停止滞留时间
}
}
/**********************************************************
中断服务函数
**********************************************************/
void leddisplay() interrupt 1
{
TH0 = 0xFC; //1ms定时常数
TL0 = 0x66;
n++;
P0=ledcode[display[n]]; //送段码
P2=shift; //送位码
shift=shift<<1|0x01; //修改位码
if(n>8)
{
n=0;
shift=0xfe;
}
}
/*********************************************************/