鲸落783 2022-01-21 11:39 采纳率: 14.3%
浏览 40
已结题

关于单片机独立按键实验的问题!


#include"reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;
                                                
sbit K1=P3^1;
sbit LED=P2^0;

#define K1_press 1
#define KEY_UNPRESS 0
void delay(u16 m)
{
  while(m--);
}
u8 key_scan(u8 mode)
{
  static u8 key=1;
  if(mode) key=1;
  if(key==1&&K1==0)
  {
    delay(1000);
    key=0;
    return K1_press;
  }
  else key=1;
  return KEY_UNPRESS;

}
void main()
{
  u8 key=0;
  while(1)
  {
  key=key_scan(0);
  if(key==K1_press)
   LED=!LED;
  }
}

对于这个代码,我的理解是按一下独立按键,LED1就会亮起,再按一下LED就会熄灭。但是实验现象是LED这个亮灭不按套路出牌,找不到规律,所以想问问这是怎么回事

  • 写回答

1条回答 默认 最新

  • suqingxiao 2022-01-21 11:53
    关注

    你没有判断按键抬起,所以会比较快去执行多次按下。
    解决的办法是加一个按键抬起判断,如果有抬起,再进行下次按下判断。

        /******************KEY mode按下 *******************/
        if(MenuKey_Mode==0)//extern
        {
            if(KeyMode_status==0) //确定已经松开
            {        
                KeyMode_counter++;
                if(KeyMode_counter ==5)//消抖
                {
                    if(MenuKey_Mode==0)//再次确认按键按下
                    {KeyMode_counter =0;KeyMode_flag =1;KeyMode_status =1;}    
                }                           
            } 
        } 
        /******************KEY enter松开 *******************/
        if(MenuKey_Mode ==1)//extern
        {
            if(KeyMode_status==1)
            {
                KeyMode_counter++;
                if(KeyMode_counter ==10)
                {
                    if(MenuKey_Mode !=0)
                    {KeyMode_counter =0;KeyMode_flag =0;KeyMode_status =0;}    
                }     
            }    
        } 
    

    如果有帮助请点采纳!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月27日
  • 已采纳回答 1月21日
  • 创建了问题 1月21日

悬赏问题

  • ¥150 寻找王者荣耀开发作者,合作或者解答
  • ¥15 关于cpci总线的几个问题,有点迷糊
  • ¥15 乳腺癌数据集 相关矩阵 特征选择
  • ¥15 我的游戏账号被盗取,请问我该怎么做
  • ¥15 通关usb3.0.push文件,导致usb频繁断连
  • ¥15 有没有能解决微信公众号,只能实时拍照,没有选择相册上传功能,我不懂任何技术,,有没有给我发个软件就能搞定的方法
  • ¥15 Pythontxt文本可视化
  • ¥15 如何基于Ryu环境下使用scapy包进行数据包构造
  • ¥15 springboot国际化
  • ¥15 搭建QEMU环境运行OP-TEE出现错误