|
本帖最后由 kenhuyang 于 2015-4-11 23:24 编辑
我做了两个版本,第一版就是延时函数,这个写起来简单。但是我有的模式跑完一次要十多秒,这样切模式要等最长十多秒才可以换到下一模式,原因我说了,延时期间单片机不干活。视频里就是我的第一版,你可以明显看到延时。 后来开始改第二版,开始想用中断,这样就没延时,但是中断用到这里好像不行,不好弄中断条件。 后来这个问题一直困扰我很久,终于有一天,有灵感了。
办法就是用的循环语句。我们知道,单片机执行一个语句是需要时间的,只不过很快我们觉察不到。延时函数实质就是让单片机执行空语句。这段时间它读不到外部信号的输入。我用for循环,在循环里让单片机不停读遥控器的信号输入,比如循环500次,由于执行语句需要时间,读完500次,其实要花几秒的时间,这就实现了延时函数。但是由于不停在读遥控信号,所以可以马上检测到控制信号,从而改变闪烁模式。你可以写入我的程序试一下,完全没延时。
我的程序写的比较乱,解释一下:读取信号,在低信号时(脉冲小于1200),关闭灯。 检测到在中高信号之间切换一次时,(办法是检测脉冲大于1200且两次信号差值大于400),让一个变量i+1。这样高中之间切换一次时i+1.为了实现循环,进行取余运算。比如我是8种闪烁模式那么c=i%8.这样c变量就实现了从0到7循环,对应八种模式。再用case语句,每个case对应一种模式,你想要闪烁怎么写就是了。我写了八种,够用了。灯闪烁之间的延时就用for循环,你现在再看看我的程序,应该就懂了
串口是模式改变的时候串口输出脉冲和当前的模式,方便我调试,写好了就没用了
|
|