dreamed_star 2023-11-25 23:52 采纳率: 37.5%
浏览 31

51单片机按键按一下加1功能

这串代码实现按1加1功能,为什么快速按按键是可以实现加1,慢点按它就会跳呢?


```c
 
#include<reg52.h>
 
unsigned char code Tab[]=     //共阴数码管段码表0-F
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
 
sbit key =P3^1; 
void Delay1ms(unsigned int xms)  //延时1ms函数
{
   unsigned char i,j;
   while(xms)
   {
     i = 2 ;
     j = 239 ;
     do
     {
        while (--j);
      }
     while (--i);
     xms--;
   }
}
 
void main ()    //主函数
{
        unsigned char n    = 0 ;   //局部变量计位数n是段码表的位置
        P0= 0x3f;    //定义初始值显示0
        while(1)
        {
 
            if(key == 0)        //判断按键是否按下
            {
                Delay1ms(10);    //消抖
                
                if(key==0)   //再次判断
                {
                    P0=Tab[n];  //把第n个段码赋值给P0口
                    Delay1ms(50);  //延时50ms
                    
                    while(key==1) //判断按键是否松开
                    {
                        Delay1ms(100);
                        n++;
                    }
                }
                
                if(n>=16)  //控制加的位数别超出段码表了
                {
                    n = 0 ;   //如果超出就让他回0去
                }
                
            }
                        
         }
}
 

```

  • 写回答

4条回答 默认 最新

  • qq_29144129 2023-11-27 09:07
    关注

    慢点按会跳,是因为你主循环里判断按键按下是key==0,判断是当前状态,你如果按得慢这个条件会多次符合,消抖才10ms

    评论

报告相同问题?

问题事件

  • 创建了问题 11月25日

悬赏问题

  • ¥15 岛津txt格式文件转nirs格式
  • ¥15 石墨烯磁表面等离子体
  • ¥15 angular 项目无法启动
  • ¥15 安装wampserver,图标绿色,但是无法进入软件
  • ¥15 C++ MFC 标准库 加密解密解惑
  • ¥15 两条数据合并成一条数据
  • ¥15 Ubuntu虚拟机设置
  • ¥15 comsol三维模型中磁场为什么没有“速度(洛伦兹项)”这一选项
  • ¥15 electron 如何实现自定义安装界面
  • ¥15 关于#linux#的问题:子进程C运行“ls –l”命令,且显示“C运行ls-l命令”(语言-c语言)