|
看你这个图,是低电平点亮。
9 N: \1 h3 w$ l- Q5 U6 e你这个代码有两个很严重的问题。" {, g2 X1 L- X; h, C
1、PA口先0X01,然后延时,最后0XFF,这个时候执行完马上又会回到最开始PA=0X01,因为是while(1)这个无限循环。第一个问题就在这里了,AVR执行速度很快,PA=0XFF,然后回到开始PA=0X01,也就是说PA=0XFF根本没有保持长时间。那么,人眼肯定是看不到LED全灭,因为马上变成0X01。因为你在PA=0X01后面加了一点延时,说明PA=0X01保持时间比PA=0XFF久,所以宏观上看,肯定是看到七个灯亮,一个灯灭的效果。所以在PA=0XFF后面,也是要放延时的。
) y3 ?, l/ J2 }, K) @2、你的 while(i--)延时,里面是2000,我们粗略估算,假设执行一次是2us,那么执行2000次是4000us,也就是4ms。4ms的延时,人眼肯定是分辨不出来的,你的延时太短了!; Z7 [ s$ \0 g* c9 j! J1 q& b
l7 k' c- B6 H9 r) ]要成功,那么你应该这样:每个PA状态后面都要放延时。然后每个延时时间要长。 |
|