求助各位大大们。
时间:10-02
整理:3721RD
点击:
自己编了一个让一个LED小灯进行呼吸,先慢慢边亮,然后慢慢变暗。但是烧录完后小灯在渐变的同时在闪烁。 #include<reg52.h>sbit LED=P1^0;
void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
void main(void)
{
unsigned int CYCLE=73,PWM_LOW=0;
while(1)
{
LED=1;
DelayMs(72);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED=0;
DelayMs(PWM_LOW);
LED=1;
DelayMs(CYCLE-PWM_LOW);
}
LED=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED=0;
DelayMs(PWM_LOW);
LED=1;
DelayMs(CYCLE-PWM_LOW);
}
}
}
void DelayUs2x(unsigned char t) //12M的晶振,据说这样能差不多1ms。
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
void main(void)
{
unsigned int CYCLE=73,PWM_LOW=0;
while(1)
{
LED=1;
DelayMs(72);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED=0;
DelayMs(PWM_LOW);
LED=1;
DelayMs(CYCLE-PWM_LOW);
}
LED=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED=0;
DelayMs(PWM_LOW);
LED=1;
DelayMs(CYCLE-PWM_LOW);
}
}
}
void DelayUs2x(unsigned char t) //12M的晶振,据说这样能差不多1ms。
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
出现闪烁主要是因为梁灭的周期超过了你的眼睛感应,在进行PWM调整时设定固定周期,然后调节高低电平的占空比
我就6个E币,各位大大们不要介意啊。
ddddddddddd