51单片机PWM控制灯存在LED微亮的问题

2019-07-15 11:50发布

我用PWM控制一个LED的光亮成度,控制占空比的变量num一开始也初始化0了,但是依然一上电后LED微亮,请高手赐教,附上程序:


/*设置一个定时器,控制P20口输出PWM,频率为100HZ,占空比可调,按键key_add、key_sub分别控制占空比的加减*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit PWM=P2^0;
sbit LED1=P2^7;//LED1常亮作为跟PWM输出时的亮度对比
sbit key_add=P3^7;//按键控制占空比增加
sbit key_sub=P3^6;//按键控制占空比减小
uchar time;
uint num;
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}


void main()
{
        num=0;
        TMOD=0x01;//定时器0工作方式1
        TH0=(65536-100)/256;
        TL0=(65536-100)%256;//赋值定时0.1ms
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
        {
                LED1=0;       
                while(key_add==0)//增加亮度
                {
                        delay(5);
                        while(key_add==0)
                        {
                                num=num+10;
                                while(!key_add);//按键释放
                                delay(5);
                                while(!key_add);
                        }
                }
                while(key_sub==0)//减小亮度
                {
                        delay(5);
                        while(key_sub==0)
                        {
                                num=num-10;
                                while(!key_sub);//按键释放
                                delay(5);
                                while(!key_sub);
                        }
                }
        }       
}


void timer0() interrupt 1
{
        TR0=0;//赋值时先关闭定时器
        TH0=(65536-100)/256;
        TL0=(65536-100)%256;//赋值定时0.1ms
        TR0=1;//再从新打开定时器
        time++;
        if(time>=100) time=0;//0.1ms*100=10ms,即100HZ;
        if(time<=num) PWM=0;
        else PWM=1;


}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
wulinwl
1楼-- · 2019-07-15 16:32
 精彩回答 2  元偷偷看……
辛光红
2楼-- · 2019-07-15 19:49
p2口下拉
linsquirrel
3楼-- · 2019-07-15 20:28
辛光红 发表于 2017-2-27 23:51
p2口下拉

什么意思,把P2口设计为下拉?
linsquirrel
4楼-- · 2019-07-16 00:27
wulinwl 发表于 2017-2-27 23:29
//在原程序里加了3条限制条件就可以了。

//我用PWM控制一个LED的光亮成度,控制占空比的变量num一开始也初始化0了,但是依然一上电后LED微亮,请高手赐教,附上程序:

让你这么一提点,确实是有思考的不足的地方,谢谢指导
嗯哼你猜
5楼-- · 2019-07-16 04:30
这个问题很好解决,你把led用低电平驱动就可以了,所谓的下拉就是输入一个低电平让灯亮
hyper000
6楼-- · 2019-07-16 09:55
 精彩回答 2  元偷偷看……

一周热门 更多>