|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2012-12-27 08:43:24
|
显示全部楼层
本帖最后由 dianzichina 于 2012-12-27 08:49 编辑
今晨继续调这个LED,目的只有一个,就是让PD6闪起来。上述的程序可能有些混乱,今天又按普通的方式进行了调整,列出如下:
void delay_ms(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<1;j++);
}
}
//=============================
void main(void)
{
PORTB=0xff;
DDRB =0xff;
PORTC=0xff;
DDRC =0xff;
PORTD=0xff;
DDRD =0xff;
while(1)
{
PORTD=0x00; //LED接PD6,0XBF可亮。低电平。
delay_ms(1);
PORTD=0xff;
delay_ms(255);
// while(1);
}
}
所以见到的现象得重新描述,但大体跟上述差不多。重大更改的地方就是主程序里把程序里延时跟亮灯的地方交换了位置。
PORTD=0xff;
delay_ms(255);
这样的话现象不一样了!!!-------------------------------------------亮灯延时为1,灭灯延时255,大家了知道这是调节占空比了,这时灯微暗,加大亮灯的延时,PORTD=0x00; //LED接PD6,0XBF可亮。低电平。 delay_ms(100); 这里把1改为100,可以很亮了。请注意延时子程序里改成了 for(j=0;j<1;j++);
原来是在这个位置调亮度,把这里固定为1后,亮度的调节在主程序里了。1-100逐渐变亮,这样的更改符合一般的规律(这个值越大越亮,前代码是越小越暗)。上述有朋友因为这产生了小疑惑,在此表示歉意。
调好了亮度比,现在专心来调主程序。第1个动作,注释掉主程序主循环里第一行,//PORTD=0x00; 灯灭,这里正常。
第2个动作,还原第一行,把第三行注释,//PORTD=0xff; 灯亮,也正常,因为就没有关灯嘛。。。
第3个动作,还原第三行,把第五行注释,大家看到这条停机指令了没?如果把注释去掉,执行停机,啥现象?-------------------------------------------------------------------------------------------灯还亮!!!不过没前一步亮了,暗了一些,按一般思路,应该是全灭才对! |
|