【摘要】:由于位变量只有两个状态,0或者1,同时C语言里有种取反的运算,所以上面的置1和清零也可以通过一个句子来实现,LED=!LED,意思就是LED的值取它相反的值,这样,上面程序16~19就可以用下面两句程序替换:LED=!LED;Delay();同时,我们再来考虑另外一个问题,由于我们在主程序while循环里,为了闪烁的效果,两次调用了Delay()函数,所以,最后出来的效果还是很令人满意。
通过修改上面的延时函数的数据,我们可以改变发光二极管的闪烁频率,应该说,到此为止我们已经实现了我们需要的功能,但是还有一些问题,需要进一步了解。
由于位变量只有两个状态,0或者1,同时C语言里有种取反的运算,所以上面的置1和清零也可以通过一个句子来实现,LED=!LED,意思就是LED的值取它相反的值,这样,上面程序16~19就可以用下面两句程序替换:
LED=!LED;
Delay();(www.xing528.com)
同时,我们再来考虑另外一个问题,由于我们在主程序while循环里,为了闪烁的效果,两次调用了Delay()函数(现在的程序,基本上什么事情也不做),所以,最后出来的效果还是很令人满意。但是在一个真正实用的系统里,while循环里会有很多事情要做,例如上面的程序里,在19和20行之间还有很多程序要执行,如果后面部分程序比较多的话,我们会发现,闪烁的亮灭时间不再均匀,同时随着程序执行顺序的问题,不同次的闪动周期也可能差别很大。问题还不止一个,我们已经知道while循环要做很多事情,因此整个执行周期本来可能就不小,在循环里两次调用了延时函数,即使改成用取反的办法来实现,也还是需要调用一次,这时假设延迟函数是500ms,那么所有由这个while循环实现的工作是不是无论如何也没有办法执行得比500ms更快了?显然这里延时函数的调用是很要命的缺点。
正是由于上述的原因,在真正实用化的时候,这个程序的思路需要修改,最需要引入的概念是“定时中断”,一般来讲,每隔一定时间做的事情,都可以由定时中断来处理。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。