不一一回复啦,谢谢大家啦,从大家的回复中知道答案啦 |
名字不是重点 发表于 2021-3-17 09:37 嗯,有时Switch比if不好用 |
15830266185 发表于 2021-3-17 08:58 是的,谢谢回复,以后会注意的,会写规范点,这里写出来仅交流用, |
aking991 发表于 2021-3-17 08:11 嗯,正规点还是这样写的,谢谢回复 |
liugao888 发表于 2021-3-17 00:03 嗯,应该是这样。谢谢回复 |
liugao888 发表于 2021-3-16 23:50 谢谢回复,我的理解跟你一样,发帖跟大家交流下 |
a4732710 发表于 2021-3-16 23:59 谢谢回复 |
liugao888 发表于 2021-3-16 23:50 谢谢回复,这样写是为了验证自己的想法,正规点不会这样写的 |
a4732710 发表于 2021-3-16 23:45 我的理解像你一样,但是程序不是从上边执行下来的吗? |
547886405 发表于 2021-3-16 23:40 按键我用扫描做的程序或延时做的程序,LED也都会跑飞 |
wulin 发表于 2021-3-16 22:44 谢谢回复,t在没有按键控制为0时,不能自行清0吧,就算清0也按顺序运行完吧,还是不能理解 |
路过,看了下虽然看不懂,但是帮你顶。 |
超过3个的并列IF,请使用Switch![]() |
做程序还是要严谨些, 机器是不会出错的,这是做开发的根基。这样的程序架构本身就不合理,要知道延时300对于单片机来说是很长的时间足够单片机做很多事情了。在此期间你处理了t值就会出现你所说的现象 |
你应该用 if(){ } else if(){ } else{ } 应用这样的判断顺序就不会出现你说的样子了,祝你顺利 |
要想每次都从LED4亮起,需要从第5行改起i((t==4)&&(LED3==0)) 第6行if((t==4)&&(LED4==0))第7行if((t==4)&&(LED5==0))依此类推 也可以改按键处理程序 |
if(t==4)不能做成多个,需要把多个整合成一个。按键为中断进入,时间为随机。如果进入时间刚好停留在多个if(t==4)前后就会出现跳过前面的if(t==4)过程。 |
本帖最后由 a4732710 于 2021-3-17 00:05 编辑 你这样改while中第5行if((t==4)&&(LED3==0)就会顺序执行 或者改按键处理方法if……自己想肯定按顺序执行了 |
程序if (t==4)不应该使用4个,需要整合到一个里面。如果你的按键中断进入时间刚好在第一个if (t==4)之前那么程序会按照你的设计正常进入,而如果中断进入时间在你的第二个或者第三个第四个中间那么就会出现随机状态。 |
while(1)顺序执行非常快的。你的t=4不知道什么时候出现。比如while顺序执行到第二或者第三个t==4后才出现t=4。那它肯定在那个if(t==4)执行 |
按键状态应该是通过中断获取的吧。中断发生的时候,程序可能正在执行5个t==4语句中的任意一个,这个是随机的,取决于中断的时间。如果按键采用扫描的方式,应该可以规避这个问题。 |
假设变量t由外部中断递增,且周期远大于delays_2ms(300),那么LED1、2、3随t递增分别点亮,当t=4时,LED4~8逐一点亮至全灭。如果t递增周期小于LED4~8逐一点亮过程,t没有机会清0,程序跑飞,亮灯随机停留在LED4~7。要等到t溢出归0,进入下次循环。单片机玩的就是逻辑与时间,楼主这段代码的逻辑与时间都存在问题。 |
程序是按顺序执行的 |
按键处理问题 |
是不是需加延时? |