找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3122|回复: 5
打印 上一主题 下一主题
收起左侧

基于stc15w4k32s4的电子时钟设计,显示异常,求问程序是否有问题

[复制链接]
跳转到指定楼层
楼主
ID:780023 发表于 2020-7-8 22:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<stc15.h>
/*共阴数码管编码*/
unsigned char code tab1[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
/*共阳数码管编码
unsigned char code tab1[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
*/
/*位选编码*/
unsigned char code tab2[]={            
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
sbit duanxuan=P1^0;
/*按键位定义*/
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit key5=P1^5;
sbit key6=P1^6;
sbit key7=P1^7;
/*秒、分、时的初始化*/
unsigned char tt=0;
unsigned char miao=0;
unsigned char fen=0;
unsigned char shi=0;
/*延时函数*/
void delay(unsigned int n)
{
    while(n--);
}
/*定时器0初始化函数*/
void chushihua()
{            
              TMOD&=0xf0;
              EA=1;
              ET0=1;
              TH0=(65535-50000)/256;
              TL0=(65535-50000)%256;
              TR0=1;
}
/*时分秒处理函数*/
void timedeal()
{
              if(miao==60)
              {
                            miao=0;
                            fen++;
                            if(fen==60)
                            {
                                          fen=0;
                                          shi++;
                                          if(shi==24)
                                          {
                                                        shi=0;
                                          }
                            }
              }
}
/*显示函数*/
void display()
{            
              P7=tab2[0];
              P6=tab1[miao%10];
              delay(50000);
              P6=0x00;//消影
              P7=tab2[1];
              P6=tab1[miao/10];
              delay(50000);
              P6=0x00;//消影
              P7=tab2[2];
              P6=0x40;
              delay(50000);
              P6=0x00;//消影
              P7=tab2[3];
              P6=tab1[fen%10];
              delay(50000);
              P6=0x00;//消影
              P7=tab2[4];
              P6=tab1[fen/10];
              delay(50000);
              P6=0x00;//消影
              P7=tab2[5];
              P6=0x40;
              delay(50000);
              P6=0x00;//消影

              P7=tab2[6];
              P6=tab1[shi%10];
              delay(50000);
              P6=0x00;//消影
              P7=tab2[7];
              P6=tab1[shi/10];
              delay(50000);
              P6=0x00;//消影
}
/*按键设定函数*/
void sheding()
{
              if(key0==0)
              {
                            delay(60000);
                            if(key0==0)
                            {
                                          EA=0;                           
                            }                                         
              }
              if(key1==0)
              {
                            delay(60000);
                            if(key1==0)
                            {
                                          miao++;
                                          if(miao==60)
                                          miao=0;
                                          while(!key1);
                            }                                         
              }
              if(key2==0)
              {
                            delay(60000);
                            if(key2==0)
                            {
                                          fen++;
                                          if(fen==60)
                                          fen=0;
                                          while(!key2);
                            }                                         
              }
              if(key3==0)
              {
                            delay(60000);
                            if(key3==0)
                            {
                                          shi++;
                                          if(shi==24)
                                          shi=0;
                                          while(!key3);
                            }                                         
              }
              if(key5==0)
              {
                            delay(60000);
                            if(key5==0)
                            {
                                          miao--;
                                          if(miao==0)
                                          miao=59;
                                          while(!key5);
                            }                                         
              }
              if(key6==0)
              {
                            delay(60000);
                            if(key6==0)
                            {
                                          fen--;
                                          if(fen==0)
                                          fen=59;
                                          while(!key6);
                            }                                         
              }
              if(key7==0)
              {
                            delay(60000);
                            if(key7==0)
                            {
                                          shi--;
                                          if(shi==0)
                                          shi=23;
                                          while(!key7);
                            }                                         
              }
              if(key4==0)
              {
                            delay(60000);
                            if(key4==0)
                            {
                                          EA=1;
                            }                                         
              }
}
/*主函数*/
void main()
{
              chushihua();
              while(1)
              {
                            sheding();
                            timedeal();
                            display();
              }                                         
}
/*定时器0中断函数*/
void time0() interrupt 1
{
             delay(60000);
              TH0=(65535-50000)/256;
              TL0=(65535-50000)%256;
              tt++;
              if(tt==20)
              {
                            tt=0;
                            miao++;
              }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:65956 发表于 2020-7-9 08:27 | 只看该作者
怎么显示异常法都没说清楚,不过我认为应是这个有问题P6=tab1[shi%10];
              delay(50000);
              P6=0x00;//消影
把那个P6=0x00;//消影去除应就可以了
回复

使用道具 举报

板凳
ID:213173 发表于 2020-7-9 10:32 | 只看该作者
aking991 发表于 2020-7-9 08:27
怎么显示异常法都没说清楚,不过我认为应是这个有问题P6=tab1[shi%10];
              delay(50000);
    ...

改这样楼主试试。
  1. #include<stc15.h>
  2. /*共阴数码管编码*/
  3. unsigned char code tab1[]={
  4. 0x3f,0x06,0x5b,0x4f,0x66,
  5. 0x6d,0x7d,0x07,0x7f,0x6f};
  6. /*共阳数码管编码
  7. unsigned char code tab1[]={
  8. 0xc0,0xf9,0xa4,0xb0,
  9. 0x99,0x92,0x82,0xf8,
  10. 0x80,0x90,0x88,0x83,
  11. 0xc6,0xa1,0x86,0x8e};
  12. */
  13. /*位选编码*/
  14. unsigned char code tab2[]={            
  15.         0xfe,0xfd,0xfb,0xf7,
  16.         0xef,0xdf,0xbf,0x7f};
  17. unsigned char dis_buf[8]={0,0,0x40,0,0,0x40,0,0};
  18. //sbit duanxuan=P1^0;
  19. /*按键位定义*/
  20. sbit key0=P1^0;
  21. sbit key1=P1^1;
  22. sbit key2=P1^2;
  23. sbit key3=P1^3;
  24. sbit key4=P1^4;
  25. sbit key5=P1^5;
  26. sbit key6=P1^6;
  27. sbit key7=P1^7;
  28. /*秒、分、时的初始化*/
  29. unsigned int  tt=0;
  30. unsigned char i=0;
  31. char sec=0,fen=0,shi=12;
  32. bit sign=1;
  33. /*延时函数*/
  34. void delay(unsigned int n)
  35. {
  36.     while(n--);
  37. }
  38. /*定时器0初始化函数*/

  39. void chushihua()                //1毫秒@12.000MHz
  40. {            
  41.         AUXR &= 0x7F;                //定时器时钟12T模式
  42.         TMOD &= 0xF0;                //设置定时器16位自动重载模式
  43.         TL0 = 0x18;                        //设置定时初值
  44.         TH0 = 0xFC;                        //设置定时初值
  45.         TR0 = 1;                                //定时器0开始计时
  46.         EA=1;
  47.         ET0=1;
  48. }

  49. /*按键设定函数*/
  50. void sheding()
  51. {
  52.         if(key0==0)
  53.         {
  54.                 delay(3500);
  55.                 if(key0==0)
  56.                 {
  57.                         sign=0;
  58.                 }
  59.         }
  60.         if(key1==0)
  61.         {
  62.                 delay(3500);
  63.                 if(key1==0)
  64.                 {
  65.                         sec++;
  66.                         if(sec>59)
  67.                                 sec=0;
  68.                         while(!key1);
  69.                 }                                         
  70.         }
  71.         if(key2==0)
  72.         {
  73.                 delay(3500);
  74.                 if(key2==0)
  75.                 {
  76.                         fen++;
  77.                         if(fen>59)
  78.                                 fen=0;
  79.                         while(!key2);
  80.                 }                                         
  81.         }
  82.         if(key3==0)
  83.         {
  84.                 delay(3500);
  85.                 if(key3==0)
  86.                 {
  87.                         shi++;
  88.                         if(shi>23)
  89.                                 shi=0;
  90.                         while(!key3);
  91.                 }                                         
  92.         }
  93.         if(key5==0)
  94.         {
  95.                 delay(3500);
  96.                 if(key5==0)
  97.                 {
  98.                         sec--;
  99.                         if(sec<0)
  100.                                 sec=59;
  101.                         while(!key5);
  102.                 }         
  103.         }
  104.         if(key6==0)
  105.         {
  106.                 delay(3500);
  107.                 if(key6==0)
  108.                 {
  109.                         fen--;
  110.                         if(fen<0)
  111.                                 fen=59;
  112.                         while(!key6);
  113.                 }                                         
  114.         }
  115.         if(key7==0)
  116.         {
  117.                 delay(3500);
  118.                 if(key7==0)
  119.                 {
  120.                         shi--;
  121.                         if(shi<0)
  122.                                 shi=23;
  123.                         while(!key7);
  124.                 }
  125.         }
  126.         if(key4==0)
  127.         {
  128.                 delay(3500);
  129.                 if(key4==0)
  130.                 {
  131.                         sign=1;
  132.                 }
  133.         }
  134. }
  135. /*数据分解*/
  136. void timedeal()
  137. {
  138.         dis_buf[0]=tab1[sec%10];
  139.         dis_buf[1]=tab1[sec/10];
  140.         dis_buf[3]=tab1[fen%10];
  141.         dis_buf[4]=tab1[fen/10];
  142.         dis_buf[6]=tab1[shi%10];
  143.         dis_buf[7]=tab1[shi/10];
  144. }
  145. /*显示函数*/
  146. void display()
  147. {
  148.         P6=0x00;//消影
  149.         P7=tab2[i];//送位码
  150.         P6=dis_buf[i];//送段码
  151.         i++;
  152.         i%=8;
  153. }
  154. /*主函数*/
  155. void main()
  156. {
  157.         chushihua();
  158.         while(1)
  159.         {
  160.                 sheding();
  161.                 timedeal();
  162.         }
  163. }
  164. /*定时器0中断函数*/
  165. void time0() interrupt 1
  166. {
  167.         if(sign)
  168.         {
  169.                 tt++;
  170.                 if(tt>=1000)
  171.                 {
  172.                         tt=0;
  173.                         sec++;
  174.                         if(sec>=60)
  175.                         {
  176.                                 sec=0;
  177.                                 fen++;
  178.                                 if(fen>=60)
  179.                                 {
  180.                                         fen=0;
  181.                                         shi++;
  182.                                         if(shi>=24)
  183.                                         {
  184.                                                 shi=0;
  185.                                         }
  186.                                 }
  187.                         }
  188.                 }
  189.         }
  190.         display();
  191. }
复制代码
回复

使用道具 举报

地板
ID:608600 发表于 2020-7-9 11:54 | 只看该作者
你这延时属实有点长
回复

使用道具 举报

5#
ID:800466 发表于 2020-7-9 18:10 | 只看该作者
大神这个有没有仿真图呀,小白在线急等,刚开始学这个不太懂
回复

使用道具 举报

6#
ID:780023 发表于 2020-7-11 11:14 | 只看该作者
发表于 2020-7-9 18:10
大神这个有没有仿真图呀,小白在线急等,刚开始学这个不太懂

不会发图片亚,要不你私聊我,我把程序和仿真图发给你
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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