标题: 基于stc15w4k32s4的电子时钟设计,显示异常,求问程序是否有问题 [打印本页]

作者: 君不知0310    时间: 2020-7-8 22:16
标题: 基于stc15w4k32s4的电子时钟设计,显示异常,求问程序是否有问题
#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++;
              }
}


作者: aking991    时间: 2020-7-9 08:27
怎么显示异常法都没说清楚,不过我认为应是这个有问题P6=tab1[shi%10];
              delay(50000);
              P6=0x00;//消影
把那个P6=0x00;//消影去除应就可以了
作者: wulin    时间: 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. }
复制代码

作者: 小黑的大表舅    时间: 2020-7-9 11:54
你这延时属实有点长
作者: 姿茜得不到    时间: 2020-7-9 18:10
大神这个有没有仿真图呀,小白在线急等,刚开始学这个不太懂
作者: 君不知0310    时间: 2020-7-11 11:14
发表于 2020-7-9 18:10
大神这个有没有仿真图呀,小白在线急等,刚开始学这个不太懂

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





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1