找回密码
 注册
关于网站域名变更的通知
查看: 213|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-12-1 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
我用PWM控制一个LED的光亮成度,控制占空比的变量num一开始也初始化0了,但是依然一上电后LED微亮,请高手赐教,附上程序:- W/ r# E0 R  A/ s5 S' T. T5 X1 u

  F- @' g- P3 N8 L7 \

( a) H- Q  G& W& ~) r, O/ x, R7 `/*设置一个定时器,控制P20口输出PWM,频率为100HZ,占空比可调,按键key_add、key_sub分别控制占空比的加减*/
/ [- w9 }  \% C0 q7 `#include<reg52.h>
5 N0 D7 m( p0 h5 `( G  d& ~#define uint unsigned int+ w8 Z- i! P. f2 a8 A" G( O" b; H
#define uchar unsigned char
$ H, n# k' z4 Fsbit PWM=P2^0;
& p7 q; M7 `" dsbit LED1=P2^7;//LED1常亮作为跟PWM输出时的亮度对比
! Z! q0 H8 b" d: B: b# `! {9 [sbit key_add=P3^7;//按键控制占空比增加
+ Q% w8 u$ m5 f; m: P; P; Dsbit key_sub=P3^6;//按键控制占空比减小8 h/ Q- f% I/ ?6 O  i! [. @- z' c
uchar time;
8 u2 W7 X. x1 Y% V  Q- guint num;
4 w: u3 f9 k- {! R) O- _void delay(uint z)  h4 ~0 q6 e  e1 N7 K3 ~- h) A
{- x# x; ^4 Q" |1 A- M# f
        uint x,y;- E5 F0 Y8 X- F( q+ e, Z9 l6 h
        for(x=z;x>0;x--)
! _/ h: L! C8 j- p/ M                for(y=110;y>0;y--);4 E6 I6 n2 v4 U" s' ~
}
& ^) B$ v- p9 Y& x7 a8 ^5 }, f) ]( n4 {9 U  ?. {: ^" f/ Z# k

% v) Y- D! R1 p3 ^3 Xvoid main()
" W0 j2 P. n$ Q/ G! ?{# k- t7 W7 |3 `$ k
        num=0;
3 u6 X6 g/ J8 k; n& B) o        TMOD=0x01;//定时器0工作方式1
/ B& L3 ]$ d" A2 X8 `        TH0=(65536-100)/256;6 g0 Q: Y( f! b  }
        TL0=(65536-100)%256;//赋值定时0.1ms
/ v5 y  O1 r+ K5 n$ }, i. {7 W        EA=1;
& g8 a0 U# x: }3 N  p* Z& M        ET0=1;0 C% n* F6 F) z$ \& [' G0 ]. b
        TR0=1;) R9 i* b! q% s9 t; Z; |
        while(1)
& R7 z1 v" V2 r3 i& h  K        {
/ o- O" F- ?" v, U) P, |                LED1=0;      
$ f8 a$ G) u0 B                while(key_add==0)//增加亮度9 @9 y1 g6 P" S% @; n- t
                {
2 B4 L  Y/ E) _4 k3 }                        delay(5);# a" J% }$ i: s9 z
                        while(key_add==0)) y: B, O2 Z8 J
                        {% }* X6 t, X8 F$ H
                                num=num+10;
( H! D% b) O) @& Q0 k                                while(!key_add);//按键释放
. X5 N3 O% j3 H/ X% c                                delay(5);, g/ H: `1 D/ s" v, f
                                while(!key_add);
( d. S2 P6 l. B' E8 B                        }
( ~( l1 f9 }1 Q8 p) G; x9 m                }& X( w7 z, x3 S3 Y0 ?: q- ^2 S  |
                while(key_sub==0)//减小亮度
/ X  [+ O' T& w0 D                {# V& A9 S3 f  \* }  t2 P
                        delay(5);
: u. E# C8 z& j: `                        while(key_sub==0): b1 q) V; A$ E/ [$ V
                        {( `. w) h& @& u$ Q
                                num=num-10;
) [# Q7 ~' e6 G' B* B                                while(!key_sub);//按键释放) C& F6 i& ~% Z; G/ [
                                delay(5);$ D2 c' p# h2 @0 w, D1 P4 l  e
                                while(!key_sub);; ], T- w  H+ Z$ Z& z* B  `7 n
                        }
9 p! u1 W9 [9 M! [; T- R. u                }* v6 A/ {3 i. r9 R1 r1 m* \% M
        }       * Z5 Z+ [# h* v. u5 y, y
}
/ l" c3 t' q. M! J+ E9 X, X8 h' `0 ?  y% z1 _2 l' ]9 h
3 g; }  |$ y0 L& A2 I. f; G0 x
void timer0() interrupt 1
$ v6 O" C2 _9 |3 X- r1 C{% U7 u; ]4 K3 ?
        TR0=0;//赋值时先关闭定时器
2 o3 \+ n  c( F5 x        TH0=(65536-100)/256;6 k! @* M0 u/ m! a5 t) F* ]- ?
        TL0=(65536-100)%256;//赋值定时0.1ms; o3 ]- o' _, b9 F
        TR0=1;//再从新打开定时器! o" s, R& J, B/ t& u! M! L/ l
        time++;6 U* P# x, L0 S- Q: Z1 ^
        if(time>=100) time=0;//0.1ms*100=10ms,即100HZ;
9 W: q$ T( X6 q2 o# Y        if(time<=num) PWM=0;
! w0 I% K/ d! R0 X/ o/ L: w        else PWM=1;" }1 D9 ?0 o4 l. C6 t% v4 t

6 Z  H1 ~4 g' m. b1 N3 G1 r# T
; w+ X9 b* j3 l$ G5 G1 r
}+ n. k# D! f( ~: J

该用户从未签到

2#
发表于 2021-12-1 13:08 | 只看该作者
p2口设置7 `' ]/ b1 d  f( c! u% z
下拉

该用户从未签到

3#
发表于 2021-12-1 13:08 | 只看该作者
这个问题很好解决,你把led用低电平驱动就可以了,所谓的下拉就是输入一个低电平让灯亮
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-18 21:34 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表