求助单片机高手们:使用HT46R47芯片编写爆闪灯程序。

红黄蓝三色爆闪,要求红灯闪三次——黄灯闪三次——蓝灯闪三次——红蓝同闪三次——黄闪三次,_pa、_pa3、_pa4控制红黄蓝灯,本人已经失败多次,特地来求助各位高手,如果可以解决,本人不胜感激!

第1个回答  2012-07-13
这个不就类似一个状态机嘛!如果你的单片机只是干这件事的话,直接在主程序里面循环执行就好;如果还有其他事情,那建议你开一个定时器,用中断来做,超准。。。。追问

我是在主程序里使用switch语句来执行闪烁,但是在调试时总会出现WDT溢出复位,请问该怎么解决呢。。。。。。

追答

你喂狗了没有?如果没有喂狗而你又开狗的话,肯定会溢出的啦!在while大循环里面,不断喂狗才行的。

追问

嗯 我使用_clrwdt()来喂狗,但是还是会有问题。我把喂狗的指令放在延时函数里
void delay()
{
uint i;
for(i=0;i<400;i++)
_clrwdt();
}
在主程序中调用延时函数,同时达到喂狗的效果,但是只有在i=400时不发生溢出复位,i取别的值时就不行了,但是我的延时函数不需要400这么久,可是改别的数又会溢出复位,这该怎么办呢

追答

额,不用喂的那么频繁吧?所谓喂狗,就是在看门狗定时器计数溢出前将其清零即可。这个喂狗的时机是看你设置的溢出时间。像你这样的喂法,1和10000都没有区别,因为你每循环一次都喂了一次。你喂狗失败,绝对不是i的值的大小的问题,有的单片机在喂狗前会要求开锁(锁是防止重要寄存器误写而设置的),你可以看看数据手册,从这方面考虑一下。实在不行,你给你代码我看下吧!

相似回答