打印

编程的时钟在20小时后,不动了,求帮助

[复制链接]
1936|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hwta|  楼主 | 2011-5-26 19:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa,num1,s,h2,h1,m1,m2;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void display(uchar ,uchar ,uchar,uchar);
     void delay(uint z)
{
uint t1,y;
for(t1=z;t1>0;t1--)
  for(y=110;y>0;y--);
}
void main()
{   
    m1=0;  
h2=0;
h1=0;
m2=0;
  P2=0x0f;
  s=0;
aa=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
     display ( h2,h1,m2, m1);
      
    }
           
}
      
  

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;   
        if(aa==1)
   {
     
    aa=0;
    s=s+1;
   
      if(s==1)
      {  s=0;
         m1++;
    if(m1==10)
      { m1=0;
        m2=m2+1;
      if(m2==6)
       { m2=0;
       h1=h1+1;
      if(h1==10)
        {  h1=0;
        h2=h2+1;
        while(h2==2)
       {  h1=0;
         if(h1==5)
      
         {  m1=0;m2=0;h1=0;h2=0;
         
         }
      
      
       }
      
         
      
       }
      
       }
       }
          }
     
        
      
      
     
        }
   
   }
      void display(uchar num1,uchar m2,uchar h1,uchar h2)
   {
   
          P2=0xef;
   
         P0=table[num1];
    delay(2) ;
      P2=0xdf;
      P0=table[m2];
    delay(2) ;
      P2=0xbf;
      P0=table[h1];
    delay(2);
      P2=0x7f;
      P0=table[h2];
      delay(2);
    }
特别是下面的语句好像没用

      while(h2==2)
       {  h1=0;
         if(h1==5)
      
         {  m1=0;m2=0;h1=0;h2=0;

相关帖子

沙发
gx_huang| | 2011-5-26 19:45 | 只看该作者
根本看不懂括号是怎么对应的,懒得看!

使用特权

评论回复
板凳
tyw| | 2011-5-26 20:02 | 只看该作者
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa,num1,s,h2,h1,m1,m2;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void display(uchar ,uchar ,uchar,uchar);
     void delay(uint z)
{
  uint t1,y;
  for(t1=z;t1>0;t1--)
  for(y=110;y>0;y--);
}
void main()
{   
   m1=0;  
   h2=0;
   h1=0;
   m2=0;
   P2=0x0f;
   s=0;
   aa=0;
   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   EA=1;
   ET0=1;
   TR0=1;
   
   while(1)
    {
       display ( h2,h1,m2, m1);
    }
}
void timer0() interrupt 1
  {
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    aa++;   
   
    if(aa==1)
     {
        aa=0;
        s=s+1;
        
        if(s==1)
          {  
            s=0;
            m1++;
            
            if(m1==10)
              {
                m1=0;
                m2=m2+1;
               
                if(m2==6)
                  {
                    m2=0;
                    h1=h1+1;
                    
                    if(h1==10)
                      {
                         h1=0;
                         h2=h2+1;
                     
                        while(h2==2)
                          {  
                            h1=0;
                           
                            if(h1==5)
                              {
                                 m1=0;
                                 m2=0;
                                 h1=0;
                                 h2=0;
                               }
                           }
                      }
                  }
              }
          }
      }
   }
void display(uchar num1,uchar m2,uchar h1,uchar h2)
   {
      P2=0xef;
      P0=table[num1];
    delay(2) ;
      P2=0xdf;
      P0=table[m2];
    delay(2) ;
      P2=0xbf;
      P0=table[h1];
    delay(2);
      P2=0x7f;
      P0=table[h2];
      delay(2);
    }
特别是下面的语句好像没用
      while(h2==2)
       {  h1=0;
         if(h1==5)
      
         {  m1=0;m2=0;h1=0;h2=0;

使用特权

评论回复
地板
zjp8683463| | 2011-5-26 20:27 | 只看该作者
一段完全没有注释的C.....
我直接掀桌子

使用特权

评论回复
5
mmax| | 2011-5-26 21:26 | 只看该作者
我没看你代码,但凭20个小时后就不走。
简单推断如下,20个小时=20*3600=72000秒;
如果是18、9个小时,那么就是65535


哈哈,我就猜到了。

使用特权

评论回复
6
mmax| | 2011-5-26 21:33 | 只看该作者
看了一下程序,我错了

问题出在这
                        while(h2==2 )
                          {  
                            h1=0;

应该是if(h2==2 && h1==5)
h1=0;
所有的变量都 = 0;

使用特权

评论回复
7
yjhon| | 2011-5-26 22:58 | 只看该作者
洗具

使用特权

评论回复
8
hwta|  楼主 | 2011-5-27 11:49 | 只看该作者
:lol很感谢你们,我学的是硬件,但最近有点喜欢编程,

使用特权

评论回复
9
tyw| | 2011-5-27 12:09 | 只看该作者
本帖最后由 tyw 于 2011-5-27 12:17 编辑

要养成勤注释的好习惯,于人于已都有好处
便于思考,便于分析程序
过多的"if"语句,会让自已晕头的.哈哈
"C"是语言,要讲究语言艺术.一种好的语言表达结构,会产生一目了然的效果.
现在的小盆友交谈,老是"然后.....","然后.....",包括电视节目中采访一些明星,也是这两个字不断.哈哈,几十个"然后"下来,能记得起来的大概就剩"然后"了.

使用特权

评论回复
10
sysdriver| | 2011-5-27 13:22 | 只看该作者
太多if嵌套了,可以考虑分开,比如时分秒

if(++sec==60) {sec = 0; min++;}
if(min==60) {min = 0; hour++;}
if(hour==24) {hour = 0;}

至于显示的实现,分开一下就好.
数据结构常用这样的算法,就是说,很多嵌套的if可以分成多个if,这样结构清晰,而且简洁美观.效率相差不大.

使用特权

评论回复
11
hwta|  楼主 | 2011-5-30 11:11 | 只看该作者
会很感谢

使用特权

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

本版积分规则

0

主题

16

帖子

1

粉丝