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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我用PWM控制一个LED的光亮成度,控制占空比的变量num一开始也初始化0了,但是依然一上电后LED微亮,请高手赐教,附上程序:
" v8 g8 t4 W# o; G
5 K" P0 v, x9 t9 a! D: z8 W+ I

; l7 D7 O: P1 I; l; S9 p/*设置一个定时器,控制P20口输出PWM,频率为100HZ,占空比可调,按键key_add、key_sub分别控制占空比的加减*/
3 \2 p; z* `( k#include<reg52.h>1 f3 r* a6 U0 J& I$ v& M9 \
#define uint unsigned int
+ T: }9 P. _6 {% {  ]# J#define uchar unsigned char
3 O" C6 E6 w' J5 Zsbit PWM=P2^0;
7 {) G* d+ N2 `. h, r% c+ ksbit LED1=P2^7;//LED1常亮作为跟PWM输出时的亮度对比
$ ]( a0 H, K* u- a4 J/ m( Rsbit key_add=P3^7;//按键控制占空比增加0 T  u) v" M" I# f9 L
sbit key_sub=P3^6;//按键控制占空比减小
5 x% X. ]; ^( vuchar time;7 V; `5 Q9 M, ]" H; `( p
uint num;
- O% t5 e/ ]# C8 T7 U$ l  u- r( R. Xvoid delay(uint z)# p6 t5 g& Q5 |' z+ A" i
{
) ]' U8 d: c; ]6 N' b        uint x,y;* i: i+ ^/ q3 p" a
        for(x=z;x>0;x--): q9 h2 L( ~* M' w0 L3 E/ a" u8 a/ O: k
                for(y=110;y>0;y--);
4 w0 j  J% M) G. z& N. Z+ `6 E, z0 a- Y}  {' e8 i" n8 [

8 f4 W3 i( I; z5 E/ S! m
% H/ [0 l$ T8 M: d0 E* }- |0 Y
void main()
1 r2 y- y* [5 _8 A/ `( t. h{
* X1 r. R, k# W; u' @4 \7 F" t# [- Y        num=0;8 Z3 n8 i& I  F# L# W+ j8 M) {
        TMOD=0x01;//定时器0工作方式1( r$ h) d* r7 `% @
        TH0=(65536-100)/256;
, p8 \* x$ k: t* s        TL0=(65536-100)%256;//赋值定时0.1ms
, k/ H; O/ X9 S: F6 {/ |9 H        EA=1;
5 P' w  {6 _. y! _! S        ET0=1;, }1 W2 V2 e3 a
        TR0=1;
% K9 ~: w8 X1 S  Z4 C' Q) B6 ~6 N        while(1)
$ Z: T, a( J) Q+ x        {/ C9 C- W4 ~2 W! U
                LED1=0;       % }! P' e/ |5 z8 W
                while(key_add==0)//增加亮度& j  y  S$ s4 Q0 |; Z
                {
7 g- ~* J+ e- \. S                        delay(5);
& U! ^% Q$ t5 F& D                        while(key_add==0)7 Y* k# I, Q, @: |% t' n
                        {
* q7 k( D. S7 K! g' R! z8 b                                num=num+10;
; K2 r! `. B8 x- E# K                                while(!key_add);//按键释放
3 n7 k+ `0 z9 }( o0 B# y( \" G  |                                delay(5);
* D$ J& h9 u: n- B/ _- ~                                while(!key_add);0 R0 ]# L- ?$ C
                        }$ M) p( l5 I- c; e/ E
                }4 Y+ `5 `9 a7 W! `# a9 f
                while(key_sub==0)//减小亮度* u3 t+ U( J& q3 G: ?
                {
% O/ ~5 C$ L( A! J: l, K0 h# F+ h                        delay(5);
# v8 E' H* l& m) _- v) G/ I                        while(key_sub==0)2 c% ^/ j3 k5 J- X! ]2 ]
                        {9 {4 y6 [* ]+ ^
                                num=num-10;
) b$ F8 q. r* k5 ]9 N                                while(!key_sub);//按键释放, T) s' @. j. d5 C7 o6 J
                                delay(5);
& ?) x' K, M5 p/ D- m# ~# ]                                while(!key_sub);" n$ Y& m0 f$ o- V% ]
                        }
' G5 L! w2 `  R9 a* X& n                }
9 C, ], u- n. Z: Z+ D        }      
5 g2 Z! U, C9 l  F% [1 b}
& d5 A! O2 `6 G5 H" x- K. V# F& _! f# H: V  Z8 s. A3 D
6 Q4 b  \5 N# `) D. B1 v- L
void timer0() interrupt 1
: n' c5 f5 n! I{
( e: n5 b) |+ N- @4 F. o% D4 x, m+ Z        TR0=0;//赋值时先关闭定时器0 `* y7 Z, l4 a4 p# ~
        TH0=(65536-100)/256;
8 D& D. l0 G  B$ Y& X8 h        TL0=(65536-100)%256;//赋值定时0.1ms$ k% L( i4 x- ?% s& J
        TR0=1;//再从新打开定时器
+ I8 Q4 v8 {+ I& M        time++;
& n5 j4 i. b0 t+ B3 I2 v$ W0 j        if(time>=100) time=0;//0.1ms*100=10ms,即100HZ;
+ V' f! x& ~' w, O+ [& Q        if(time<=num) PWM=0;9 f) d" ], P3 D3 }0 k0 k
        else PWM=1;* |( ]$ u! ]- k6 ^0 ]5 M5 P# x; ?# n

8 h' |' j2 G0 ~: E( @3 l" f
+ K% b8 g& r4 Z4 Q5 U
}- w/ W! t  @4 I  f; A1 h0 r

该用户从未签到

2#
发表于 2021-12-1 13:08 | 只看该作者
p2口设置" Y; Q7 s2 [- O1 {! A, G; {
下拉

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 17:52 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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