本帖最后由 baidu202 于 2011-5-12 23:13 编辑
#include<reg51.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit key=P1^7;
bit flag=0;
uint t;
uchar sec=0,min=0,hour=0,x=0,u=0xfe,tt=0;//t计时一秒 tt计时2毫秒
uchar code Num[]=
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0xff;
};
uchar Num_Buf[]=
{0,0,10,0,0,10,0,0};
void display()
{
if(tt==1)
{
tt=0;
P2=u;
u=_crol_(u,1);
P0=Num[Num_Buf[x]];
x++;
if(x==8)x=0;
}
}
void
timer0()interrupt 1
{
ET0=0;
TH0=-(2010/256);
TL0=-(2010%256);
t++;
tt++;
if(t==500)
{
t=0;
sec++;
}
ET0=1;
}
void main()
{
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
TH0=-(2000/256);
TL0=-(2000%256);
P2=0xff;
P0=0xff;
while(1)
{
display();
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
Num_Buf[6]=sec/10;
Num_Buf[7]=sec%10;
Num_Buf[3]=min/10;
Num_Buf[4]=min%10;
Num_Buf[0]=hour/10;
Num_Buf[1]=hour%10;
}
}
我是一个新手,才学51
单片机。
这是我编的一个单纯的计时器,没有其他功能, 只有从00-00-00开始。后来发现,定时时间不准,定时器初值越小的时候越不准,误差很大。定时器初值补偿也试过,无法修正。请各位高手帮我看看哪里有问题。晶振是12兆的。
无论怎样,先说声谢谢大家。。。
一周热门 更多>