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

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


#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日

悬赏问题

  • ¥15 Python for loop减少运行时间
  • ¥15 fluent模拟物质浓度udf
  • ¥15 Collection contains no element matching the predicate
  • ¥20 冻品电商平台的搜索是怎么实现的
  • ¥15 如何搞一个可以控制、显示马达频率
  • ¥15 WPF动态创建页面内容
  • ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
  • ¥15 SQL数据库操作问题
  • ¥100 关于lm339比较电路出现的问题
  • ¥15 Matlab安装yalmip和cplex功能安装失败