wangbinzcn 2023-04-07 23:13 采纳率: 100%
浏览 10
已结题

关于#单片机#的问题,如何解决?

刚学单片机,碰到个问题,通过按钮和复位控制数管数字+1,但是仿真里测试,按钮加0,1,7时正常,但是加到其余次数时,第一位数会变成8,仿真重新画了,程序看了又看,眼拙没发现啥问题,头都懵了,求解救!

img

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P1^0;
sbit key2=P1^1;
sbit q=P3^0;
sbit b=P3^1;
sbit s=P3^2;
sbit g=P3^3;
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X89};
void delayms(uint k);

void main()
{
  uint num;
    while(1)
    {
       if(key1==0)
         {
           delayms(10);
             if(key1==0)
             {
               while(key1==0)
                 {
                  q=1;
              P2=tab[num/1000];
              delayms(5);
              q=0;
                    
              b=1;
              P2=tab[(num/100)%10];
              delayms(5);
              b=0;
                    
              s=1;
              P2=tab[(num/10)%10];
              delayms(5);
              s=0;
                    
               g=1;
                    P2=tab[num%10];
          delayms(5);
          g=0;    
                 }
                 num++;
             }    
            }
            
      if(key2==0)
          {
          delayms(10);
          if(key2==0)
          {
              while(key2==0)
                 {
                  q=1;
              P2=tab[num/1000];
              delayms(5);
              q=0;
                    
              b=1;
              P2=tab[(num/100)%10];
              delayms(5);
              b=0;
                    
              s=1;
              P2=tab[(num/10)%10];
              delayms(5);
              s=0;
                    
               g=1;
                    P2=tab[num%10];
          delayms(5);
          g=0;
                 }
              num=0;
           }
           }
                   q=1;
              P2=tab[num/1000];
              delayms(5);
              q=0;
                    
              b=1;
              P2=tab[(num/100)%10];
              delayms(5);
              b=0;
                    
              s=1;
              P2=tab[(num/10)%10];
              delayms(5);
              s=0;
                    
               g=1;
                    P2=tab[num%10];
          delayms(5);
          g=0; 
            }
    }
    
void delayms(uint k)
{
  uint i,j;
    for(i=0;i<k;i++);
       for(j=0;j<125;j++);
}





  • 写回答

2条回答 默认 最新

  • 智者知已应修善业 2023-04-08 05:08
    关注

    没做段消隐,在每位打开前添加段消隐,依据数码管类型消隐值也不同或0或ff。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月16日
  • 已采纳回答 4月8日
  • 创建了问题 4月7日

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程