打印

51单片机带闹钟时钟的程序问题,望各位前辈指教一番

[复制链接]
1285|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
agz1989|  楼主 | 2013-7-5 08:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 agz1989 于 2013-7-5 08:22 编辑

问题描述:烧入程序后,时间数值闪现一下之后就一直如图所示。




#include<AT89X51.h>
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99
,0x92,0x82,0xf8,0x80,0x90};//共阳数码管?
uchar time,hour,min,sec;
void delayms(uchar i)
{
while(i--);
}
void write(uchar num,chose)
{
uchar i;

for(i=0;i<2;i++)
     {
          P0=0xff;
      P2=~chose;//位选

     if(i==0)
        {
         P0=table[num%10];//段选
       }
      else
         P0=table[num/10];//段选
     
          chose=chose<<1;
      delayms(2000);
     }
}
void display()
{
P0=0xff;
P2=0xdb;
P0=0xbf;
delayms(2000);
}//-隔开时,分,秒显示
void init()
{
TMOD=0x01;
TH0=0x4c;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
while(1)
{
   write(sec,0x01);
   write(min,0x08);
   write(hour,0x40);
   display();
}
}
void main()
{
hour=23;
min=37;
sec=50;
write(sec,0x01);
write(min,0x08);
write(hour,0x40);
display();
init();
}

void T0_Time() interrupt 1
{
TH0=0x4c;
TL0=0x00;
time++;
if(time==20)
       {  
            time=0;  
        sec++;
            if(sec==60)
              {  
               sec=0;
               min++;
               if(min==60)
                 {
                         min=0;
                         hour++;
                         if(hour==24)
                           {
                                   hour=0;
                          }
                       }
              }
        
        }   

相关帖子

沙发
agz1989|  楼主 | 2013-7-5 08:17 | 只看该作者

使用特权

评论回复
板凳
npwjm| | 2013-7-5 08:48 | 只看该作者
进来看看,学习一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

45

帖子

1

粉丝