找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3055|回复: 6
收起左侧

自己写的数码管可调电子钟有点问题,大家一起看看

[复制链接]
ID:253022 发表于 2017-12-13 18:09 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar DSY_play[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};                         //从1到九对应的十六进制代码
uchar DSY_buffer[]={0,0,0xbf,0,0,0xbf,0,0};                                                                                 //显示缓冲区
uchar DSY_IDX;                                                                                                                              //索引
uchar key_state;   //按键状态
uchar DSY_wei;    //位码,用于数码管动态扫描
uchar miao;
uchar fen;
uchar hour;
void fens();
void hours();


void shumaguan() interrupt 0                       //          数码管动态扫描
{    TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
    P2=DSY_wei;                 //位选                                                                                    
    P0=DSY_buffer[DSY_IDX];               //段选
    DSY_wei=_crol_(DSY_wei,1);
    DSY_IDX=(DSY_IDX+1)%8;

}

void  display() interrupt 1
{      uchar count=1;
      TH1=(65536-50000)/256;
      TL1=(65536-50000)%256;
      if(count<20)
      {
        count++;
        return;

      }
      miao++;
      DSY_buffer[7]=DSY_play[miao%10];
      DSY_buffer[6]=DSY_play[miao/10];
      if(miao==60)
      miao=0;
      fens();

      
}



  void fens()
  {
     if(fen<60)
     {
       fen++;
       DSY_buffer[4]=DSY_play[fen%10];
       DSY_buffer[3]=DSY_play[fen/10];

     }while(fen!=60);
        fen=0;
        hours();

  }

  void     hours()
  {
       if(hour<24)
       {
         hour++;
         DSY_buffer[1]=DSY_play[hour/10];
         DSY_buffer[0]=DSY_play[hour%10];
       } while(hour!=24);
       hour=0;
  }
    void main()
    {    uchar x,y;
        
        TMOD=0X11;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        TCON=0x01;
        EA=1;
        
        DSY_wei=0xfe;
        DSY_IDX=0;
             miao=10;
         fen=20;
         hour=20;
      
       DSY_buffer[7]=DSY_play[miao%10];
       DSY_buffer[6]=DSY_play[miao/10];           //初始化时间为 20-20-10

可是为什么数码管不显示,甚至P0口都没有电平

可是为什么数码管不显示,甚至P0口都没有电平

       DSY_buffer[4]=DSY_play[fen%10];
       DSY_buffer[3]=DSY_play[fen/10];
       DSY_buffer[1]=DSY_play[hour%10];
       DSY_buffer[0]=DSY_play[hour/10];
        TR0=1;
        TR1=1;
        key_state=0xff;
        if(P1&0xff!=0xff)
        {
             for(x=110;x>0;x--)
               for(y=110;y>0;y--);

        }
          if(P1&0xff!=0xff)
          {
              key_state=P1;
              EA=0;
              if(key_state&0xfe==0xfe)
              {
                   fen++;
                   DSY_buffer[4]=DSY_play[fen%10];
                   DSY_buffer[3]=DSY_play[fen/10];

              }
              else if(P1&0xfd)
              {
                   hours();
              }

          }
        
    }
  




回复

使用道具 举报

ID:111634 发表于 2017-12-13 19:08 | 显示全部楼层
本帖最后由 zl2168 于 2017-12-13 19:11 编辑

冗长的程序一般是没人看的,给你介绍一个正确有效看得懂的案例,自己对照查错吧!
实例93  具有校正功能的时钟1302LED数码管显示)
实例93 带校正时分秒的时钟1302(6位LED数码管显示).rar (732.75 KB, 下载次数: 10)
回复

使用道具 举报

ID:253022 发表于 2017-12-13 20:05 | 显示全部楼层
zl2168 发表于 2017-12-13 19:08
冗长的程序一般是没人看的,给你介绍一个正确有效看得懂的案例,自己对照查错吧!
实例93  具有校正功能的 ...

我就是学习了这个之后,自己动手写的。。找了很久的错误还是找不到。不会找很久的话,我也不想发帖
回复

使用道具 举报

ID:111634 发表于 2017-12-14 20:55 | 显示全部楼层
本帖最后由 zl2168 于 2017-12-14 20:56 编辑
周鑫鑫鑫666 发表于 2017-12-13 20:05
我就是学习了这个之后,自己动手写的。。找了很久的错误还是找不到。不会找很久的话,我也不想发帖

你读懂了那个案例的程序了吗?哪里不懂可问我,我给你解答!
回复

使用道具 举报

ID:259741 发表于 2017-12-14 22:45 | 显示全部楼层
发现代码运行出现错误,尝试找出原因有点难,谢谢分享
回复

使用道具 举报

ID:261803 发表于 2017-12-14 23:01 | 显示全部楼层
加油!我也正在研究这个,研究出来一起分享
回复

使用道具 举报

ID:155507 发表于 2017-12-14 23:20 | 显示全部楼层
试试看

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar DSY_play[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};                         //从1到九对应的十六进制代码
  6. uchar DSY_buffer[]={0,0,0xbf,0,0,0xbf,0,0};      //显示缓冲区
  7. uchar DSY_IDX;                 //索引
  8. uchar key_state;   //按键状态
  9. uchar DSY_wei;    //位码,用于数码管动态扫描
  10. uchar miao;
  11. uchar fen;
  12. uchar hour;
  13. void fens();
  14. void hours();


  15. void shumaguan(void)  interrupt 1 using 1        //  数码管动态扫描
  16. {
  17.         TH0=(65536-10000)/256;
  18.         TL0=(65536-10000)%256;
  19.         P2=DSY_wei;                 //位选                                                                                    
  20.         P0=DSY_buffer[DSY_IDX];               //段选
  21.         DSY_wei=_crol_(DSY_wei,1);
  22.         DSY_IDX=(DSY_IDX+1)%8;

  23. }

  24. void  display(void)  interrupt 3 using 1
  25. {
  26.         uchar count=1;
  27.         TH1=(65536-50000)/256;
  28.         TL1=(65536-50000)%256;
  29.         if(count<20)
  30.         {
  31.                 count++;
  32.                 return;

  33.         }
  34.         miao++;
  35.         if(miao>=60)
  36.         {
  37.                 miao=0;
  38.                 fens();
  39.         }
  40.         DSY_buffer[7]=DSY_play[miao%10];
  41.         DSY_buffer[6]=DSY_play[miao/10];
  42.        
  43. }



  44. void fens()
  45. {
  46.        
  47.         {
  48.                 fen++;

  49.         }  //while(fen!=60);
  50.         if(fen>=60)
  51.         {
  52.                 fen=0;
  53.                 hours();
  54.         }

  55.         DSY_buffer[4]=DSY_play[fen%10];
  56.         DSY_buffer[3]=DSY_play[fen/10];

  57. }

  58. void     hours()
  59. {
  60.        
  61.         {
  62.                 hour++;
  63.         } //while(hour!=24);
  64.         if(hour>=24)
  65.         {
  66.                 hour=0;
  67.         }
  68.         DSY_buffer[1]=DSY_play[hour/10];
  69.         DSY_buffer[0]=DSY_play[hour%10];

  70. }

  71. void main()
  72. {
  73.         uchar x,y;
  74.        
  75.         TMOD|=0X11;  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
  76.         TH0=(65536-1000)/256;
  77.         TL0=(65536-1000)%256;
  78.         TH1=(65536-50000)/256;
  79.         TL1=(65536-50000)%256;
  80.         //TCON=0x01;
  81.         EA=1; //总中断打开
  82.         ET0=1;           //定时器中断打开
  83.         ET1=1;           //定时器中断打开
  84.        
  85.         DSY_wei=0xfe;
  86.         DSY_IDX=0;
  87.         miao=10;
  88.         fen=20;
  89.         hour=20;
  90.        
  91.         DSY_buffer[7]=DSY_play[miao%10];
  92.         DSY_buffer[6]=DSY_play[miao/10];           //初始化时间为 20-20-10  
  93.         DSY_buffer[4]=DSY_play[fen%10];
  94.         DSY_buffer[3]=DSY_play[fen/10];
  95.         DSY_buffer[1]=DSY_play[hour%10];
  96.         DSY_buffer[0]=DSY_play[hour/10];
  97.         TR0=1;          //定时器开关打开
  98.         TR1=1;          //定时器开关打开
  99.        
  100.         while(1)
  101.         {
  102.                
  103.                 key_state=0xff;
  104.                 if(P1&0xff!=0xff)
  105.                 {
  106.                         for(x=110;x>0;x--)
  107.                         for(y=110;y>0;y--);

  108.                 }
  109.                 if(P1&0xff!=0xff)
  110.                 {
  111.                         key_state=P1;
  112.                         EA=0;
  113.                         if(key_state&0xfe==0xfe)
  114.                         {
  115.                                 fen++;
  116.                                 DSY_buffer[4]=DSY_play[fen%10];
  117.                                 DSY_buffer[3]=DSY_play[fen/10];

  118.                         }
  119.                         else if(P1&0xfd)
  120.                         {
  121.                                 hours();
  122.                         }

  123.                 }
  124.         }
  125. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表