找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 905|回复: 4
收起左侧

单片机如何实现三个或者三个以上按键,控制一个IO口的状态

[复制链接]
ID:293079 发表于 2023-5-11 16:38 | 显示全部楼层 |阅读模式
请问各位大神,单片机如何实现以下功能呢?比方说:     按键1是控制LED的总开关,1和0;
     按键2是在LED=1开的状态下,按一下发送一定时间(如160ms)的脉冲(占空比1),时间到了,又变为高电LED=1;
     按键2也是在LED=1开的状态下,按一下发送一定时间(如300ms)的脉冲(占空比2),时间到了,又变为高电LED=1;

烦请各位大神提供一下思路。谢谢大家。



首先感谢各位回复!
是的,如是说,是按键2和3按下时,发送一段脉冲信号。时间到了又拉为高电平,类似红外发送一段脉冲码一样。如图。

按键3按下

按键3按下

按键2按下

按键2按下
回复

使用道具 举报

ID:1073299 发表于 2023-5-11 18:04 | 显示全部楼层
软件实现,设置一个uint8 的状态信息,判断LED状态,设置状态信息(防止其它2个按键动作)执行完成,设置状态信息。
回复

使用道具 举报

ID:213173 发表于 2023-5-11 19:08 | 显示全部楼层
这个示例里有你想要的内容
4位数码管时钟温度表仿真.rar (332.04 KB, 下载次数: 7)
回复

使用道具 举报

ID:1045628 发表于 2023-5-11 19:12 | 显示全部楼层
不知道你说的发送一定时间的占空比是什么意思,发送脉冲吗?
还有如果把这个IO口设置成脉冲输出口是否还能以普通IO的形式控制,这个我也没试过,如果可以:
1.把LED的IO设置成PWM或者输出比较状态
2.按键1正常控制IO
3.按键2、3按下的时候判断IO状态,启动定时器开始发相应应脉冲
4.脉冲结束将IO拉回高电平
回复

使用道具 举报

ID:1073399 发表于 2023-5-11 19:55 | 显示全部楼层
例如常见的STM32、Arduino等。以下是一个基本的流程:

1.初始化GPIO口,将按键1和LED对应的GPIO口设置为输入和输出口。

2.进入主循环,在主循环中读取按键1的状态。如果按键1被按下,将LED的状态取反。

3.如果LED被打开(即LED=1),则进入另一个循环,等待按键2被按下。

4.当按键2被按下时,记录当前时间。同时设置LED为高电平,并开始计时。

5.当计时器的时间到达160ms时,将LED设置为低电平(占空比1)。

6.继续计时,当计时器的时间到达300ms时,将LED设置为低电平(占空比2)。

7.回到主循环,等待下一次按键事件。

需要注意的是,实现这个功能需要使用定时器,计算时间间隔并控制LED的状态。具体实现方式可能会因不同单片机型号和开发环境而有所差异,需要根据具体情况进行调整。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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