本帖最后由 liaobiaoxing 于 2009-8-25 22:29 编辑
用的6M的晶震,P0口为数码管的段控位,P2口为数码管的位控位,程序如下:
#include<reg52.h>
unsigned int count=0,sec=0,min=0,hour=0,x;
unsigned char show[10]={0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09}; //从0到10对应的段控位
delay(x) //延时程序
{ unsigned int a,b;
for(a=0;a<=x;a++)
for(b=0;b<=10;b++);
}
void display() //负责显示
{ P2=0X01;
P0=show[sec%10];
delay(5);
P2=0X02;
P0=show[sec/10];
delay(5);
P2=0x04;
P0=0xfd;
delay(5);
P2=0x08;
P0=show[min%10];
delay(5);
P2=0x10;
P0=show[min/10];
delay(5);
P2=0x20;
P0=0xfd;
delay(5);
P2=0x40;
P0=show[hour%10];
delay(5);
P2=0x80;
P0=show[hour/10];
delay(5);
}
void time_init() //定时器中断0初始化,10MS定时。
{ EA=1;
ET0=1;
TMOD=0X01;
TH0=0xec;
TL0=0x78;
TR0=1;
}
void time_int() interrupt 1 //中断响应程序
{
TH0=0xec;
TL0=0x78;
count++;
TF0=0;
}
void main()
{
time_init();
while(1)
{
if(count==100); //判断秒,分,时进位。
{ count=0;
sec++;
if(sec==60);
{ sec=0;
min++;
if(min==60);
{ min=0;
hour++;
if(hour==24)
{ hour=0;
}
}
}
}
display();
}
}
初学单片机,还真找不出来错在哪了。希望各位大大能帮我看一下,不胜感激。该程序的主要症状在于,开始后,小时那一个段以飞快的速度走0~24循环。分钟和秒钟无变化,难道是因为定时出了问题? |