找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8735|回复: 3
打印 上一主题 下一主题
收起左侧

关于单片机一个按键实现多种功能

[复制链接]
跳转到指定楼层
楼主
ID:536280 发表于 2020-6-15 20:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
循环计数法,标志位法,都是比较简单的按键多次按下识别的方法也是常用方法


这个是计数法例子,先通过管脚电瓶高低识别按键(注意延迟)是否按下,按键按下计数,通过型参计数,也可以用switch条件语句控制。
void main()//这里进入主函数{
while(1)//一直循环
{
if(KEY==0)//如果有按键按下
{
num++;
}
if(num==1&&key_bit==0) {
realy=1;
key_bit=1;
}
if(num==2) {
realy=0;
key_bit=0;
num=0;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:85865 发表于 2020-6-15 22:03 | 只看该作者
这样不会有误触发的情况?
回复

使用道具 举报

板凳
ID:282538 发表于 2020-6-16 08:27 | 只看该作者
我的在定时器(1ms)中写的按键,当按键下计时,松手的时候检测计时值>=10ms表示有效按键,如果增加长按当执行长按时松手清空短按檢測。
回复

使用道具 举报

地板
ID:536280 发表于 2020-6-16 19:15 | 只看该作者
252622979 发表于 2020-6-15 22:03
这样不会有误触发的情况?

我只是提供一个思路,这个肯定会误触的,加个延时消除抖动在加个确定按下的判断语句就可以了,也可以加个while变成识别长按,(单片机有定时器中断,c语言本身也有中断)灵活应用可以少写代码。优化


像这样
        flag=1;                                                          //紧急状态标志位置1,进入紧急通行状态
                        save=P0;                                                  //保存灯的状态
                        P0=0x84;                                                  //全部亮红灯
                        while(key_stop==0);                                  //按键释放,当按键一直按下的时候,程序就会一直执行这里,直到按键按下
                        while(flag==1)                                          //如果是紧急状态就一直执行下面的程序
                        {
                                if(key_stop==0)                                  //在紧急状态时判断按键是否按下
                                {
                                        delay(50);                                  //延时去抖
                                        if(key_stop==0)                          //再次判断按键是否按下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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