找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

下面是单片机按一次灯亮且报警,松开按键解除报警怎么改让它按键按下报警,再按解除...

查看数: 1749 | 评论数: 7 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-9-23 11:49

正文摘要:

#include "reg51.h"          void     delay(unsigned int i); sbit K=P0^0;                 ...

回复

ID:137736 发表于 2022-9-24 21:30
设置个标注位,按键翻转标注位,检测标注位决定是否报警。
ID:176854 发表于 2022-9-24 15:51
根据上面的建议修改的程序

#include "reg51.h"         
void     delay(unsigned int i);
sbit K=P0^0;                     
sbit beep=P1^0;                  
sbit green=P1^1;                 
sbit red=P1^2;      
unsigned char Flag = 0;
void  main()
{
  green=0;     
  red=1;   
  while(1)
   {
     if(K==0)            
      {
        while(K==0);                       
        Flag = ~Flag;
      }
     if(Flag)
                 {
                   green=1;   
       red=0;      
       beep=0;     
       delay(100);
       red=1;      
       beep=1;
                 }
                 else
                 {
                   green=0;
                         red=1;
       beep=1;                         
                 }
   }
}

void     delay(unsigned int i)            
{
unsigned int k;
for(k=0;k<i;k++);
}

ID:1045644 发表于 2022-9-24 10:17
rctty 发表于 2022-9-23 17:33
这里的K == 0  改成按下到弹起整个过程的状态,可以通过另一个变量来解决,
比如改成 b == 1,
就有

你好,请问能不能帮我写一下具体的程序,初学单片机然后有些还不是很懂,谢谢
ID:1045644 发表于 2022-9-24 09:52
munuc_w 发表于 2022-9-23 15:12
可以采用计数的方法,定义一个变量,初始值为0,按一次按键加1,然后判断变量的值,当变量等于1时报警,为2 ...

可不可以写一下具体程序,初学单片机,好多都还不懂
ID:1045628 发表于 2022-9-23 17:33
rctty 发表于 2022-9-23 16:04
用一个变量做标识,
char a = 1;

这里的K == 0  改成按下到弹起整个过程的状态,可以通过另一个变量来解决,
比如改成 b == 1,
就有
先判断按下到谈起的状态
if(K == 0)//按钮按下
{
     while(K == 0);//等待按钮弹起
    b = 1;
}

当然,这里的while强制等待是不太合适的,这样会卡住单片机的运行,可以通过定时器之类的方法进行改善


ID:1045628 发表于 2022-9-23 16:04
用一个变量做标识,
char a = 1;

if(K == 0)//这是检测到按下的状态?
{
if(a)
{
     a = 0;
     //报警亮灯代码

    //
}
else
{
     a = 1;
     //解除报警,灭灯代码

     //
}
}

不过你这个按键识别应该在软件上做一个防抖动滤波

ID:752974 发表于 2022-9-23 15:12
可以采用计数的方法,定义一个变量,初始值为0,按一次按键加1,然后判断变量的值,当变量等于1时报警,为2时接触报警,同时清变量。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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