1、做个10ms中断。 2、每次中断读入三个端口状态存入NEW,与变量LAST(是上次读入的数据,初化设置为全1)做比较。 2.1、NEW = LAST:什么也不做。 2.2、NEW <> LAST (有变化了),按照你的逻辑执行。(改变运行状态,正、反、停。) 3、令 LAST = NEW,为下次比较输入作依据。 更高级一点,加入按键防弹动:(这个不在此详细说明) 加个计次,5次按键组合的数据相同,认为是真实按键状态。低于5次不作数(弹动)。 |
大漠落日 发表于 2023-10-29 11:32 有解决方案吗 可以给点建议吗 |
wulin 发表于 2023-10-29 08:11 是的 是的 我现在想要停下就直接拔电源 您有办法推荐吗 |
这个不难,小问题, |
XLinliY.Zhang 发表于 2023-10-28 23:10 和时间没有关系的,就是跳入不了循环程序 后边我自己试着写另一个方法 虽然实验成功了 但是发现了另一个问题 头大了 您可以帮忙看看我下边回复了一个帖子 那是另一种问题 |
楼主如果用的是普通按钮而不是自锁按钮,就需要用一个变量记忆当前按钮操作状态,用这个变量控制后续运行状态。否则按钮松手就只能运行一个循环。当再次判断3个按钮时就都是高电平,电机就不能持续既定工作状态。另外还需要有退出机制,否则除了断电停不下来。 |
unsigned char status; void main() { while(1) { if(P10 == 0) status =0; if(P11 == 0) status =1; if(P12 == 0) status =2; switch(status) { case 0: //xxxxxxxxxxxxxxxxxxxxx break; case 1: //xxxxxxxxxxxxxxxxxxxxx break; case 2: //xxxxxxxxxxxxxxxxxxxxx break; default: break; } } } |
if(按钮x按下) 记录状态为x if(时间到了) switch(x) case 正转 case 反转 case if(不是反转)反转else正转 时间可以用定时器定时,或者while里面添加一个固定时间的循环,然后记录循环次数 |
对了是32单片机 |