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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我用PWM控制一个LED的光亮成度,控制占空比的变量num一开始也初始化0了,但是依然一上电后LED微亮,请高手赐教,附上程序:
' r+ i$ Z6 H8 X4 h0 ?% _, T$ T
, P, d5 E) k- C" x
/*设置一个定时器,控制P20口输出PWM,频率为100HZ,占空比可调,按键key_add、key_sub分别控制占空比的加减*/
# C( }3 `# O( ?8 B& h3 S) ~#include<reg52.h>
/ k0 J1 s" G( ?1 v; y4 [$ k/ F. u# l* T#define uint unsigned int
8 o! {+ l$ W8 G; c#define uchar unsigned char
/ `# \3 p4 P4 P, Z- Z$ esbit PWM=P2^0;2 X3 P: \+ w) C: q& m
sbit LED1=P2^7;//LED1常亮作为跟PWM输出时的亮度对比
# {3 p; Z, I- a( Y+ ]0 Wsbit key_add=P3^7;//按键控制占空比增加
4 b& D! y6 |1 ]  o  z$ asbit key_sub=P3^6;//按键控制占空比减小
$ f) Q) {2 \0 I: Y1 ^5 r4 _$ d- Xuchar time;& L0 n) _: J- F
uint num;" G3 F- s9 ~7 E' {# J% {$ ?( r
void delay(uint z)1 n. y6 z; W' r* k$ K# T2 [, r% Z$ n
{
) ?+ {0 W. L' t+ l' L, {        uint x,y;# o, b/ \2 h5 M: n, k  u3 A6 f0 P5 \
        for(x=z;x>0;x--)
. n6 p2 K* m+ X! p. X' S                for(y=110;y>0;y--);& S* m3 ]6 g% ?" ?) W+ t( U
}" U7 R) v, M* J4 H/ }% q2 D! A
1 r" G1 |) u( R9 ]3 c/ |- }- m
& r  W  o! v# X3 y9 ^
void main()( u! o5 _6 \$ c/ R$ E0 j& i, e
{3 _8 c+ v$ z% ]& E2 t0 D
        num=0;5 z; H1 l4 B1 e0 `
        TMOD=0x01;//定时器0工作方式1- {4 x8 z: d% b$ O; {* ^
        TH0=(65536-100)/256;" n7 S; W# q3 ^- H; ?9 z
        TL0=(65536-100)%256;//赋值定时0.1ms2 T7 y0 \, Y9 c5 V. |& G2 b% \* E
        EA=1;3 ?) }( i+ f# M) x$ ]+ _; w! b3 j
        ET0=1;& V0 G7 R: ]  \8 Q
        TR0=1;' m. r' m% Q% ?: {# Y' {
        while(1)6 @. \! t, Y* m% p. M
        {0 ~+ @& q5 }+ F& s) j* Z
                LED1=0;      
) P: ?. P" `: c5 I; K; K8 ^4 h                while(key_add==0)//增加亮度/ q/ r* Q# [6 p/ V  |
                {
8 u2 U; s6 c$ y                        delay(5);
2 F# G9 u. C6 n$ o& s5 x                        while(key_add==0)
9 [# v% z( m/ b: V8 H8 n7 M                        {
7 l/ f3 s- l2 Z0 M; }0 A                                num=num+10;/ H" Y8 Z* H( h7 g+ c& A. L8 a
                                while(!key_add);//按键释放
2 r5 m& Z6 s/ R$ G& g                                delay(5);
7 i3 {3 w  M  a+ Z9 \8 _" l                                while(!key_add);
* Q9 Y' b+ o  z. g4 |$ V7 t                        }2 O/ X: R" x1 K- D* P
                }
! n. D3 n7 z3 i9 v                while(key_sub==0)//减小亮度6 i. D. e) N- D1 Y! {/ A
                {
  I# a" X, J9 l$ j( f* ~                        delay(5);0 ~% t3 T" d! W
                        while(key_sub==0)# \1 @0 s( M- {  n/ T
                        {2 T, `( C- `5 U/ J) {8 B
                                num=num-10;
0 r1 ]! i0 [8 n  H& S                                while(!key_sub);//按键释放- @* i: W0 Y! R/ ?* m+ w
                                delay(5);
% _& O/ N" H0 N! `                                while(!key_sub);- l2 G% C) N" y$ X' J
                        }( Z+ q6 P2 O* ]# d- B9 B
                }
# k6 y: u6 _! s5 N$ @        }       0 Y3 d2 Z) |* g. M
}
* f8 x. O7 W* O/ R/ Q' l! B$ h5 o" j2 _7 P5 W

" @& v- L3 F# U3 l7 Evoid timer0() interrupt 1( G4 Q. n( z% G2 V* e
{
7 l  C7 ?% }% A$ [9 ^- T        TR0=0;//赋值时先关闭定时器. n) }6 `9 d+ }1 J+ M2 Q  r' h5 N7 f. B
        TH0=(65536-100)/256;
0 i1 H5 o  U' B" F: {        TL0=(65536-100)%256;//赋值定时0.1ms4 o* w: N  R2 [1 q( g6 i
        TR0=1;//再从新打开定时器3 X0 k2 w* U2 C4 M1 ^9 U2 W3 M
        time++;1 R: K( ]. V4 E- V1 T
        if(time>=100) time=0;//0.1ms*100=10ms,即100HZ;% g, S$ ^3 P/ R" k/ X+ R
        if(time<=num) PWM=0;
0 g% s# G$ ^' d; t2 Z: ^        else PWM=1;
, g! ^; W: x& W1 ^+ Y3 q7 v7 y
7 v+ E6 _# b  G& t2 ?4 ?
2 S: ^5 S' @- V; k1 j
}/ {$ j4 e; c4 t

该用户从未签到

2#
发表于 2021-12-1 13:08 | 只看该作者
p2口设置
2 U2 T3 M, z) A. _4 F; D: A* }下拉

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-21 05:58 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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