[51单片机] 按键控制数码管,为什么我的数码管减1之前老是要加1然...

[复制链接]
 楼主| 经历 发表于 2017-8-13 20:51 | 显示全部楼层 |阅读模式
  1. #include<at89x52.h>
  2. #define uchar unsigned char
  3. sbit k1=P3^0;
  4. sbit k2=P3^2;
  5. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

  6. void delay1ms(uchar a)  
  7. {
  8.      uchar b,c;
  9.     for(c=1;c>0;c--)
  10.         for(b=142;b>0;b--)
  11.             for(a=2;a>0;a--);
  12. }

  13. void main()
  14. {
  15.   uchar i;
  16. while(1)
  17. {
  18.   if(!k1)
  19.   {
  20.    delay1ms(10);
  21.    if(!k1)
  22.    {
  23.        P2=tab[i++];
  24.       
  25.    }
  26.      while(!k1);
  27.    }

  28.   if(!k2)
  29.   {
  30.     delay1ms(10);
  31.     if(!k2)
  32.     {
  33.         P2=tab[i--];
  34.     }
  35.       while(!k2);
  36.   }
  37. }
  38. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
694844985 发表于 2017-8-13 21:22 | 显示全部楼层
控制逻辑有问题,  if(!k2)
  {
    delay1ms(10);
   while(!k2);
    {
        P2=tab[i--];
    }
      
  }
694844985 发表于 2017-8-13 21:22 | 显示全部楼层
这样改
zrb5688 发表于 2017-8-13 23:07 | 显示全部楼层
延时函数也不对吧!最后一行for(a=2;a>0;a--)应该去掉。
山东电子小菜鸟 发表于 2017-8-14 09:52 | 显示全部楼层
进行单步调试,找出问题所在
 楼主| 经历 发表于 2017-8-14 09:57 | 显示全部楼层

不行,这样改只会显示8(按k2的时候)
 楼主| 经历 发表于 2017-8-14 10:02 | 显示全部楼层
山东电子小菜鸟 发表于 2017-8-14 09:52
进行单步调试,找出问题所在

怎么进行单步调试啊
 楼主| 经历 发表于 2017-8-14 10:38 | 显示全部楼层
现在问题已经解决了,谢谢个位。
rankey 发表于 2018-11-5 15:38 | 显示全部楼层
你好
  我也编了一个,把你的这个问题给解决了。protues模拟OK


#include<reg52.h>
#define uchar unsigned char
sbit k1=P3^0;   //+
sbit k2=P3^2;   //-
uchar key1_T1=0,key2_T1=0,i=0;
uchar key1_num,key2_num;
uchar Key1_lock,key2_lock;
uchar code tab[]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F};  //共阴

void InitTimer1(void)
{
    TMOD=0x10;
    TH1=0xD8;
    TL1=0xF0;
    ET1=1;
    EA=1;
    TR1=1;
}


void main()
{

         InitTimer1();
         P2=0x00;
while(1)
{
          if(!k1)
                {key1_T1=1;}
                else key1_T1=0;
                if(!k2)
                        {key2_T1=1;}
                else key2_T1=0;       

if(Key1_lock==1)
   {
                   Key1_lock=0;
                    i=i+1;
             if((i>=0)&&(i<=8))
                         {
                                 
                                 P2=tab[i];
                                 
                         }
                         if(i>=8)
                         {i=8;}
                         
                         
    }       
  if(key2_lock)
                {
                   key2_lock=0;
                         i=i-1;
                        if((i<=255)&&(i>=9))
                         {i=0;}
                       
             if((i>=0)&&(i<=8) )
                         {
                                 P2=tab[i];
                                 
                         }
                         
                         
    }         
               

}

}



void Timer1Interrupt(void) interrupt 3
{
    ET1=0;
    TR1=0;
           if(key1_T1==1)
                 {
                          if(key1_num<=255)
                    { key1_num++;}
                                 if(key1_num>=20)
                                 {
                                         Key1_lock=1;
                                   key1_num=0;
                                 }
                                                  
                 }
                 
                 if(key2_T1==1)
                 {
                          if(key2_num<=255)
                    { key2_num++;}
                                 if(key2_num>=20)
                                 {
                                         key2_lock=1;
                                         key2_num=0;
                                 
                                 }
                                                  
                 }
                 
                 
                 
                 
                TH1=0xD8;
    TL1=0xF0;
                ET1=1;
          TR1=1;
       
}

评论

带定时的按键判定更合理,更健壮  发表于 2023-4-3 11:08
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

31

帖子

2

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