鲸落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日

悬赏问题

  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用