#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示数字
unsigned int i=50;//初始时间为050
void Delay(unsigned int xms) //延迟函数
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void Timer0Init(void) //中断函数,1ms
{
TMOD &= 0xF0;
TMOD |= 0x01;
TL0 = 0x18;
TH0 = 0xFC;
TF0 = 0;
TR0 = 1;
ET0=1;
EA=1;
PT0=0;
}
void display()
{
P2_4=1;P2_3=1;P2_2=1; //数码管第一位
P0=NixieTable[i/100]; //i/100取整。为第一位数码管显示数字
Delay(1); //延迟1ms
P0=0x00; //数码管赋0,消隐
P2_4=1;P2_3=1;P2_2=0;
P0=NixieTable[i/10%10]; //i先除于10后取余10即为数码管2显示的数字
Delay(1);
P0=0x00;
P2_4=1;P2_3=0;P2_2=1;
P0=NixieTable[i%10]; // 数码管个位数字
Delay(1);
P0=0x00;
}
void main() //主函数
{
Timer0Init(); //中断函数初始化
while(1)
{
display();
}
}
unsigned int Time; //定义初始次数为0
void Timer0_Routine() interrupt 1 //中断函数程序内容
{
TL0 = 0x18;
TH0 = 0xFC;
Time++;
if(Time>=1000) //中断1000此后,也就是1秒后
{
Time=0;
i++;
if(i>=1000)
{
i=0;
}
}
}
封面是我用的51单片机开发板原理图,有兴趣可以看一下