头像-90970

hamazy

  • 四川省成都市
  • 单片机
  • 科研教育

个人成就

获得 0 次赞

帮助过0人

51单片机编写的数字时钟程序,总是无法走时,咋办?

#include   //包含器件配置文件  #define uchar unsigned char #define uint unsigned int char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9的数码管段码 uchar hour=0,min=0,sec=0;  //时,分,秒清零  uchar deta=0;  //5ms计数单元清零 bit d_05s=0;  //0.5s标志 uchar set=0; //模式设定标志 uchar m=0; uchar flag=0;  //RAM掉电标志 void delay(uint k);  //延时函数 void conv();  //走时单元转换 void disp();  //走时时间显示函数 sbit SB1=P2^4; //按键1引脚定义 sbit SB2=P2^5; //按键2引脚定义 sbit SB3=P2^6; //按键3引脚定义 sbit SB4=P2^7; sbit SPK=P3^7;  //蜂鸣器引脚定义 sbit SET_2=P2^2; sbit M_D=P0^7; //定时器T0初始化 void init_timer() { TMOD=0x01;  //设置定时器T0工作模式为1 TH0=-(4800/256);  //高字节计数初值 TL0=-(4800%256);  //低字节计数初值 IE=0x82;  //启用定时器T0中断产生 TR0=1;    //启动定时器T0开始计时 } //5ms定时中断 void T0_srv(void) interrupt 1 { TH0=-(4800/256);  //重置定时器计时初始值 TL0=-(4800%256); deta++;  //计数单元值递增 } //时分秒单元及走时单元转换 void conv() { if(deta=200){sec++;deta=0;} if(sec==60){min++;sec=0;} if(min==60){hour++;min=0;} if(hour==24){hour=0;} } void disp() {   P0=tab[hour/10];P2=0xf7;delay(2);   P0=tab[hour%10];P2=0xfb;delay(2);   if(d_05s==1){if(SET_2==0)M_D=0;else M_D=1;}   delay(2);   P0=tab[min/10];P2=0xfd;delay(2);   P0=tab[min%10];P2=0xfe;delay(2); } void set_time() { uchar m; //TR0=0; if(SB2==0)delay(5); if(SB2==0)hour++; if(hour=24)hour=0; for(m=0;m