[资料分享] 帮忙看一下这个时钟程序,谢谢!

yanys113   2007-5-26 09:05 楼主

自己时钟程序,写后发现不能用,所以一步一步来测试,现在是只要求显示分和秒,也不要求设置,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();}
}

回复评论 (1)

Re: 帮忙看一下这个时钟程序,谢谢!

我对C和程序不懂,但从这上面的来看,好像你在定时器的中断程序有点不对,改为
  //中断函数//
void time0() interrupt 1 using 0{  
 TH0 = 0x4C;
 if(++ncounter==20){
  ncounter=0;
  second++;
  }
  timekeep();
 }

看看
  • 5605.jpg
点赞  2007-5-26 10:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复