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

PWM控制led流星灯(水滴效果)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-3-16 14:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
本帖最后由 RGB_lamp 于 2023-3-16 14:53 编辑 & T, u9 H* D" h# n% b( o+ k. ~

& q& F3 N3 O9 A/ s+ D" V8 {9 V各位大神,我最近想做一个基于单片机PWM功能的流星灯(水滴效果),可是看了一些资料,按着书上的程序做了一边还是不行。那灯亮度压根儿就没变,,,求正解啊。。。。
. q) \& R! S( `0 Q9 J$ u#include# p) K0 Q+ r) p+ B
#include- `' T8 H% K& u: f8 g' l
#define uchar unsigned char0 t: Y% u2 P4 G2 C; X6 B- n
***it PWM=P0^1;
  F' E0 p) l6 h' d6 D# i; Z6 O+ Wvoid delay(uchar i)9 |- }9 j* v' Z4 D
{
# P; D) o( `2 F0 L8 P        uchar j;
* E  _, z$ _9 N& s3 n! a        for(;i>0;i--)5 r; K0 b8 w$ c% D  j  a$ o
        {# Y" j* |/ Z6 x9 r0 d
                for(j=29;j>0;j--)% {' d, T2 T( E) g1 l
                _nop_();8 n1 s- @: V5 f6 n! O% |
                _nop_();
2 {5 o# M, E4 ?3 Q/ R8 h        }
$ o0 U/ o$ J2 u}
6 I( I1 E5 K& \5 D& Wvoid PWMout(uchar q)
) U$ e6 d1 b% d$ E% g; D( G/ C/ F{2 P3 a8 c; x, O; d
        PWM=1;
& ]7 _3 F% s9 d5 ~) |5 _4 W        delay(q);. M' B6 G4 `+ T& {7 b% O
        PWM=0;  o( [6 g& _( Z3 M; \" }4 B
        delay(10-q);
8 \) K$ R! X% d9 j' x}
$ {6 F1 _, B- n4 V1 qvoid main()
* J) q( A4 {6 i! h: K) [5 v{; o# r2 q  X* B1 v/ Q$ Y3 j) j) F2 V% G
        while(1)
. y# a6 D: P& q8 \        {
2 p  t1 B1 A8 J# E
, y& `) @4 N$ }                PWMout(0);
  _$ u6 b  b& W0 Z, g                PWMout(1);
9 Z% t" B' D4 o* M6 F1 B: ~                PWMout(2);
% C& ~2 ?: n* U6 i                PWMout(3);( b# K: S, k7 r6 g  p
                PWMout(4);
( l% p3 C0 W9 o& X1 {  |& B# `                PWMout(5);
+ a4 a  I% V2 w                PWMout(6);: g% d, y. _4 _2 ]
                PWMout(7);
7 B4 S; P5 O% m* V6 E; u" {                PWMout(8);6 H  @* R1 I7 z! B/ u1 s% p3 ?
                PWMout(9);
5 E  U) x4 [, n! @. d                PWMout(10);1 }  ]6 A, s/ W. G2 h4 Y/ X
4 q* ~$ E  _3 p. d1 b$ p7 U! S- f
        }
1 F* |# }/ v* |/ E}. O( \4 A' E1 @4 I0 k  e
$ G- \' ~" Q9 d/ @1 |( H% M; m  k
* @( }& z# T2 @' g
9 e1 v% k4 M, o4 \% Q- n# v' u

, e8 A7 \- h) N9 r8 o6 V5 c2 E
9 y. X& W8 L4 ?- N' }5 W

该用户从未签到

2#
发表于 2023-3-16 15:37 | 只看该作者
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义! l9 \/ e& K5 i6 n6 H) o
% m+ ]% a# p8 a0 H" T7 T% Q9 u
***it LED0=P1^0;// 用***it 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号- E, O5 u/ m% ~3 x5 t
$ A6 g' u  K' v3 z6 ]9 U4 W

) s4 N" y$ M2 _5 j% A8 ]void Delay(unsigned int t); //函数声明% J0 t& E. {( h" z9 Q. q
/*------------------------------------------------
! w0 M  E& O2 L( `) e3 s                    主函数1 w/ S' h' Z; n+ ~  s
------------------------------------------------*/
2 x2 Y4 t+ f! v; T% u& Q( Ovoid main (void)
7 J  g% Y+ I5 s& T2 S* ~( W{: j# P. C7 U9 L. \, W
                  : i1 X2 G: v7 A9 P& F8 s6 n' @
unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值
3 Y3 Q7 q% N/ x- _* T; K2 n5 p# i8 |while (1)         //主循环% y" j9 R  k  k7 K6 n
  {
4 e: }/ Z2 y. k9 C. wLED0=1;
/ f/ u0 u' L6 v( ?6 E8 Q9 p( i) u: Q. oDelay(60000);        //特意加延时,可以看到熄灭的过程7 D$ v8 p3 s8 v+ j0 V& h
for(PWM_LOW=1WM_LOW //电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
* T. X' O  k  E! H9 i2 {$ E
+ x7 ]6 D3 r# x& i                   LED0=0;        //点亮LED  
# M; x. q1 B0 i3 W, G) \                   Delay(PWM_LOW);//延时长度,600次循环中从1加至599
8 K: B% ?& p" n# a6 C+ Y                   LED0=1;        //熄灭LED, V  {( J! e. _" `" U
              Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1* t$ S$ ?7 r3 |) Z7 y
     $ e& H, J/ T/ c" y6 ], f
   }
; c+ W, Z7 ^5 N( I% {( @8 YLED0=0;
1 V% e! [/ \* v3 e+ p2 ~" z7 H* I$ |for(PWM_LOW=CYCLE-1WM_LOW>0WM_LOW--){ //与逐渐变亮相反的过程
5 w. q$ m# G/ }3 }+ ~& U" n& I3 m3 h9 b& X8 P
                   LED0=0;
/ \- Q- b. I& c1 W                   Delay(PWM_LOW);
) {1 Q! ?8 H4 ~                   LED0=1;5 E! H. D# l2 \- U
              Delay(CYCLE-PWM_LOW);! U8 Z) x. y. [! ^  f
     % B( z/ g- Q! l8 V  A/ x) R
   }
5 A5 _6 Y/ T: x# c: C8 d                     //主循环中添加其他需要一直工作的程序
% S( x" `9 a+ V1 o" ~  }
, K6 l! ]6 f' j/ _5 S. g( S}
4 R& y# ]0 E- `- s/*------------------------------------------------
; J! v3 k1 u0 p  u- x' Z1 \延时函数,含有输入参数 unsigned int t,无返回值
" o) W6 K2 w  k: w5 Xunsigned int 是定义无符号整形变量,其值的范围是. Q; u& j9 {  u: [& c
0~65535) R" \6 M7 U; h; i" H' _
------------------------------------------------*/
: a0 [# w8 G/ N9 J& Mvoid Delay(unsigned int t)
3 m) z* v, O9 t( w{
7 {% k/ y* ]& W3 E0 q+ ^while(--t);6 Y2 O2 g5 d$ Z( G" A
}

该用户从未签到

3#
发表于 2023-3-16 15:51 | 只看该作者
用数码管显示,包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  • TA的每日心情
    无聊
    2023-12-15 15:00
  • 签到天数: 380 天

    [LV.9]以坛为家II

    4#
    发表于 2023-3-17 10:04 | 只看该作者
    感谢分享,学习学习
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-27 01:39 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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