自己时钟程序,写后发现不能用,所以一步一步来测试,现在是只要求显示分和秒,也不要求设置,p0.7-p0.0通过电阻接的是共阴数码管的a-g,共4个,只要求显示分钟和秒,p2.4-p2.7通过三极管后接它们的公共端,keilC中能正常编译,但是不能正常走时,我分析这算法是没有问题,请大家看看:
#include <reg52.h>
typedef unsigned char byte;
typedef unsigned int word;
static byte buf[5];
byte table[10]={0x0c0,0x0f9,0x0a4,0x0b0,0x99,0x92,0x82,0x0f8,0x80,0x90};//字符表//
byte hour=0,minute=0,second=0,ncounter=0;
//动态显示函数//
void display(void){
byte posi=0x7f; //定义公共端的位置//
byte temp,i,j;
for(i=0;i<4;i++){ //依次显示4个数码管//
temp=buf;
temp=table[temp];//查表//
for(j=0;j<200;j++){ //延时//
P0=temp;
P2=posi;
}
posi>>=1; //显示向右移一位//
}
}
void timedisply(){ //将分秒显示//
buf[3]=second/10;
buf[2]=second%10;
buf[1]=minute/10;
buf[0]=minute%10;
}
//计时函数v
void timekeep(void){
if(second>=60){
second=0;
minute++;
if(minute>=60){
minute=0;
hour++;
if(hour>=24)
hour=0;
}
timedisply();
}
}
//中断函数//
void time0() interrupt 0 using 0{
TH0 = 0x4C;
if(++ncounter==20){
ncounter=0;
second++;
}
timekeep();
}
//主函数//
void main() {
TMOD = 0x01; //采用T0的第1种计数方法//
TH0 = 0x4C; //赋初值,计数50ms//
ET0 = 1;
EA = 1;
TF0 = 0;
TR0 = 1;
while(1){
display();}
}