想问大家一个程序冲突的问题
这个问题不太好描述,假如现在有两个按钮,同时控制一个led,按钮按下led点亮1S,按钮松开熄灭1S,按钮通过一个字节中的某一位控制,并且只能使用一位,遇到的问题是如果led点亮了,再未熄灭时按下第二个,理想状态是亮一秒关一秒亮一秒关一秒,但是现实是只执行一次(两个点亮熄灭指令重叠),如果更快速的按几次更加异常(想使字节中的位是1010变化,现在是1100或者111000)说的可能不是很准确,评论区再补充两个按键的逻辑问题 无非就是 与 或 非 三种情况,如果叠加时序的话,就是阻塞或者覆盖机制,总得有个处理冲突的机制。如果不希望叠加,就加个判断灯状态的条件,不满足条件就延后执行或者不执行,都是一种处理思维。 本帖最后由 Lkck8210 于 2024-4-22 17:31 编辑
你单一按键的逻辑也有点奇怪
按钮按下led点亮1S:本来是熄灭的,按着不放点亮1S,然后保持熄灭?
按钮松开熄灭1S:熄灭1S,然后保持点亮?
这点逻辑,只要你能说清楚,单片机实现起来并不难。按键检测用定时中断扫描,不能用delay阻塞式检测。 再仔细理理程序的流程,再按照流程写出来应该就不会冲突了,要注意楼上提的delay延时函数,尽量用定时器中断+计数器的方式 估计就卡在delay函数里面了 楼主问题描述不太清楚,我的理解应该是两个按键A和B,A键只管亮灯1s,B键只管灭灯1s,无按键按下时,灯的状态由最后一次动作按键决定,如果最后一次A键动作,灯稳定状态是灭,反之是亮.
按键动作快,LED慢,亮灭都是1s控制,想要快速按键又不能打断LED当前状态,只能做个FIFO的按键状态缓存,记录两个按键的动作时序,然后根据这个缓存来控制灯的亮灭,缓存足够大时候,就不会漏掉按键控制. 楼主问题描述不太清楚,我的理解应该是两个按键A和B,A键只管亮灯1s,B键只管灭灯1s,无按键按下时,灯的状态由最后一次动作按键决定,如果最后一次A键动作,灯稳定状态是灭,反之是亮.
按键动作快,LED慢,亮灭都是1s控制,想要快速按键又不能打断LED当前状态,只能做个FIFO的按键状态缓存,记录两个按键的动作时序,然后根据这个缓存来控制灯的亮灭,缓存足够大时候,就不会漏掉按键控制.
页:
[1]