1.程序是在原子老大的 PWM输出实验基础上修改的
2.程序修改后目的:通过按键KEY0控制DS0,按键按下不松,DS0(LED灯)不断逐渐亮、逐渐灭循环。
3.问题描述:经自己修改,也能实现上面的目的。但是之前,while(t==1)处的while改为if后,程序便只能循环一次。
自己在调试模式下,一步步执行(也有跳过),但是最后都在while(1)里面反复执行,按照这个道理那if也能实现目的啊,但是结果不行,
愿听各位的批评,指导。致谢!
int main(void)
{
u16 led0pwmval=0;
// u8 dir=1,t,i,j;
u16 i;
u16 j;
u8 t;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
  WM_Init(900,0); //不分频。PWM频率=72000/900=8Khz
while(1)
{
t=KEY_Scan();
while(t==1) //之前我这里是if,结果:LED灯只能循环亮灭一次。然后不亮了。 ?????
{
for(i=0;i<300;i++) //KEY0按下刚开始PWM输出自增,增大到300后又自减
{
led0pwmval=i;
LED0_PWM_VAL=led0pwmval;//PWM输出自增
delay_ms(10);
}
if(i==300)
{
for(i=300;i>0;i--)
{
led0pwmval=i;
LED0_PWM_VAL=led0pwmval;//PWM输出自减
delay_ms(10) ;
}
}
}
else
{
led0pwmval=0;
LED0_PWM_VAL=led0pwmval;
};
/* if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
LED0_PWM_VAL=led0pwmval; */
}
} |