#include <reg51.h>
#include <intrins.h>
#define DataPort P1
unsigned char code table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
sbit SMG1=P3^4;//第一个数码管的位选
sbit SMG2=P3^5;//第2个数码管的位选
sbit SMG3=P3^6;//第3个数码管的位选
sbit SMG4=P3^7;//第4个数码管的位选
void delayms(unsigned int t) //t ms
{
unsigned int num,count;
for(num=t;num>0;num--)
for(count=200;count>0;count--)
{
_nop_();
}
}
//display(1234);
void display(unsigned int num)
{
DataPort=table[num/1000];
SMG1=1; //第一个亮
delayms(5);
SMG1=0;
DataPort=table[num%1000/100];
SMG2=1; //第二个亮
delayms(5);
SMG2=0;
DataPort=table[num%100/10];
SMG3=1; //第3个亮
delayms(5);
SMG3=0;
DataPort=table[num%10];
SMG4=1; //第4个亮
delayms(5);
SMG4=0;
}
void timer0_init()
{
EA=1;//打开总中断
ET0=1;//打开定时器0的中断
TMOD|=0x01;//设置成工作方式1 16位定时器
TH0=(65535-10000)/256; //设置初值
TL0=(65535-10000)%256;
TR0=1;//打开定时器
}
unsigned char count;
void main()
{
SMG1=SMG2=SMG3=SMG4=0;//数码管的
timer0_init();
while (1)
{
display(count);
}
}
//中断服务函数
void timer0_int() interrupt 1
{
static unsigned char num;
TH0=(65535-10000)/256; //设置初值
TL0=(65535-10000)%256;
num++;
if (num==100)
{
num=0;
count++;
if(count==60)
{
count=0;
}
}
}