AVR单片机程序

来源:百度知道 编辑:UC知道 时间:2024/06/24 05:50:47
#include<iom16v.h>
void main(void)
{ int aa;
unsigned char i;
aa=0Xfe;
DDRA = 0xff; //端口设置:PA设置为推挽1输出
PORTA = 0xff;
PORTA = 0x00; //PORTA初始值为0,熄灭所有的LED
//delay_nms(10);
while(1)
{
PORTA=aa;
aa=aa<<1;
}
}

请给我看看这个小程序有什么问题啊?把最后那句去掉就可以,加上就都为低电平了!
但我加了句if(aa=0x00)
aa=0xfe;还是不行呢?

把最后那句去掉就可以,加上就都为低电平了!

while(1)
{
PORTA=aa;
aa=aa<<1;
}

单片机运行的速度有多快,你肉眼能分辨多少时差? 试着加个延时函数吧~ 200MS这样应该可以感觉出闪动了,不行就加大~

要判断的话不能是aa=0x00,应该是if(aa==0x00)
=是赋值
==才是判断是否相等
你在aa=aa<<1后面加个延时,一般给IO口用的变量都用是unsigned char型的,
aa=aa<<1也可以写成aa<<=1

速度太快了,上电就是低电平,实际上是由低位逐个累加向高位变低电平,可以这样
while(1)
{
if(aa==0x00)
{
aa=0xfe;
}
PORTA=aa;
aa=aa<<1;
delay(1秒);//这里加一个延时1秒的函数;
}

没问题啊,加上最后一句本来就应该在很短时间里的移位之后变成全是低电平。
不加的话A口最低位是低电平,其余是高。