我用这个算法做成功过。
说一点我的理解吧:
想必你已经看过艺新工作室的这篇文章了:
http://hi.baidu.com/52_diy/blog/item/c88fb9d6d778172407088b7c.html
先是在外部中断的处理程序里,给定时器一个合适的初设值Pt。
程序开始时,D=0,Pt=600(按实际情况设定的),并得到定时器初设值。
然后定时器开始计数,每溢出一次S自加一次。
完成一圈,霍尔传感器申请外部中断,这时处理外部中断函数。
当S>N时,修正值D增大,使定时器T0的时间值增大,随之S值减小。
当S<N时,修正值D减小,使定时器T0的时间值减小,随之S值增大。
当S=N时,修正值不产生变化。
每完成一圈,S就会修正一次。
如此反复,直到S=N。
最后的定时器时间值表示完成1/N圈所用的时间。
程序中,只需要控制在S的值就可以确定LED显示的位置。
比如S=45,即是在90度位置显示。
哦,对了。一般来说,我们会把N设为180。
据前辈们说,这是为了方便计算。
如果N=360,对增加清晰度的效果不太明显,
而且会导致N>255,这就不必要了。
上面的话摘自我以前写过的一篇文章:
http://www.hangxyz.com/%E5%AF%B9pov-led%E4%B8%AD%E8%87%AA%E9%80%82%E5%BA%94%E7%AE%97%E6%B3%95%E7%9A%84%E7%90%86%E8%A7%A3.html
也许说得不对,还请前辈们指正。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>