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

51单片机学习:定时器产生PWM可调方波,控制led灯亮度

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机学习:定时器产生PWM可调方波,控制led灯亮度
) S/ X7 F- K; f2 @0 s: F' a2 z/ f. I3 U" Q
' ~+ ?/ F) A8 E' `2 ~- H
; [( `8 W4 r7 I( A3 U. l

* X. V" y5 I( b使用定时器T0产生PWM方波,
2 Y. F6 k$ g* k用按键调整占空比,20级可调
4 H1 j& [) Y6 P; ]3 w- z. ~7 z/ |9 s控制led灯的亮度等级.; W+ O) ]6 \* U% U3 V3 H' ~

/ z  e3 R/ Q$ Q. {, h" T7 `( G. n源程序:
% x) i! ^' Q" ^- t7 m+ q
#include  "my51.h"
6 J* c# }1 t, s, A) d( [#include  "timer0.h"+ L0 k# J6 {/ V7 L! r- t
6 M! n) `- ^6 _; o' |
% P5 d; ]0 ~. Y- z3 Q
#define grading    20                       //亮度20级变化1 O# d% q' z4 w& N( o
sbit keyS3=P3^5;                            //按键调整占空比,PWM_keyChange+++ [) F; n; G' u  @
sbit keyS4=P3^6;                            //                                PWM_keyChange--
: v' |! l$ R! G- |5 C- @, g# B6 G7 h1 r, d5 U

7 n: H, v& F: z9 W2 z. Cu8 PWM_keyChange=10;                     //初值,按键调整在1~20之间变化5 E  v( s8 C) a# `. b7 O+ L/ f0 p
                                                           //占空比   PWM_keyChange/grading
& {. z2 B4 B5 J9 z* j* l( S: L
/ K" d: V; E6 K/ J' z2 I( e0 C* a
% d- ?+ s3 V0 V. D# i- S5 t
void T0_work()                                   //本函数由T0定时器中断函数调用
% e/ [) j, s" E7 e  Y9 R( x- n{        
; O3 ~; N2 Y8 e        if(timeMultiple1Flag)
& G$ V0 ~) v& Y, J9 i8 D; q        {                & k4 M& J3 H: |0 l
                led=off(7);                           //关闭7号灯
2 C% a6 l; E" p8 U                timeMultiple1Flag=0;   //清定时器复用置位标志
( Q+ v5 Z% c  Y3 Q% e        }, R7 n9 }9 ^1 u" ]; X, o, A( X- p; {
        * n8 K: n$ k" Z
        if(timeMultiple2Flag)) H; a% V) x/ @& \. k/ w
        {                / C/ O# [! Q5 L* l2 J6 V- o) r0 ~: @
                led=on(7);                           //打开7号灯
+ P7 P* M- m2 f+ z                timeMultiple2Flag=0;   //清定时器复用置位标志
! H" c3 u! h; T" c) e6 d        }                  % c5 y9 B: R+ Z  m9 W2 K" x
}
5 M3 ~0 O) d+ O* w/ ~" e8 A! j; A, K* N8 a

6 l# F! n+ W! K4 w/ Ovoid main()                                            //测试
. v8 |  s. O, t1 V9 p9 V{
* x2 ^9 D" m: M, E        u8 keyFlag=1;                                //程序中没有消抖处理,只是简易的按键进出自锁标志
5 A  D8 z% A2 x# `% e, `! ?        led0=ledon;                                        //先打开0号灯,用于和7号灯对比亮度               
, {2 t/ |/ k2 d        initT0(1,10,grading);                //1毫秒的基本定时,亮的时间1*10毫秒,暗1*(grading-10)毫秒
% P" y. |5 u: q; o: ]        while(1)
+ ~/ E7 n! A& W: `9 ^  b( q, d! M        {/ B0 T9 s7 |2 Q% @
                if(0==keyS3)
  I  @4 @! A( m/ \                {2 G- p3 P5 `% C; C; G( `2 D& e
                        if(keyFlag)                                                     //防止一次按键中多次执行; d9 l1 t' P) m! s1 c  {9 q( U
                        {1 J5 U4 K0 Q0 p- g
                                keyFlag=0;                                             //清标志,类似同步锁' Y( b" p2 |8 U* _3 e
                                if(++PWM_keyChange>grading)
2 y  h& {* W: t$ K- S7 w. ^* Q; Y, i                                {( q) v, Q/ Y3 ]" g$ v* S0 j
                                        PWM_keyChange=grading;          //占空比最大100%% X7 L, n1 O( e& Y( l3 {5 N
                                }
$ J6 {0 N2 c1 c7 Y: h9 @+ B. v$ }                                initT0(1,PWM_keyChange,grading);        
0 }, ^( E% n" B0 R9 D0 ~                        }                        2 t6 [% ]2 ?' L+ K/ @
                }
5 s! s! s& n- F. ~$ }6 @1 X                else if(0==keyS4)$ }) w. ~/ S( M, ^% d$ ]6 Z
                {
3 N  E& h( Z/ y: _$ B- ^. a( z                        if(keyFlag)* Q" A& A7 h( }3 `. P
                        {
2 n" I+ B, x8 k7 ~. |! Q/ }8 j                                keyFlag=0;/ t4 U5 c  Z# Z  r
                                if(0==--PWM_keyChange)                                //占空比减小
  L; H! u  e% o; [1 |6 E6 Z! u# I1 H                                {
: d9 G; _+ O8 c                                        PWM_keyChange=1;                                  //最小占空比 1/20
3 c, l% N0 U6 f# M0 T6 g                                }        9 a6 i- P' G4 B  T, x: A$ X2 J& b. u8 e
                                initT0(1,PWM_keyChange,grading);        //占空比减小2 E/ p/ Y+ r) M+ m' U5 E6 c8 B  `  d
                        }
4 A- k1 |  \9 _0 i( t8 s3 S                }. B3 E: j, B5 o0 I! F2 \
                else5 T6 T1 @6 T: C) B' `1 P
                {: u+ @& x# o* a
                        keyFlag=1;        //按键锁释放标志,下一次按键时允许调整占空比9 Q3 q3 i  A# s9 _
                }5 F: z4 F! X7 R+ a. K( {' K
        }
, i! G8 o  p/ o: v! p. f9 A% y2 g6 I}
9 K% ^3 z0 D$ h" P2 \+ z& {
; j6 U' _) o1 F+ h7 j" `) J/ l8 ?" o2 N8 k3 Q) h" {; ?" C

, I! S4 |5 y- f3 G- o: K: o
游客,如果您要查看本帖隐藏内容请回复
9 ]% L/ ^7 j; i. L$ a

* m' n: c6 V+ E+ _9 k! L
- J4 G  n" M( Z

7 l7 U) Y5 }5 z  R  V* r& q

该用户从未签到

3#
发表于 2019-11-14 20:58 | 只看该作者
为所以偶他认为退热问题依然
$ l: B3 ]/ C' A, R3 f
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-12 23:30 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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