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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 RGB_lamp 于 2023-3-16 14:53 编辑
* W" O7 Z; |: ^* w  r' x1 Y7 I  i2 m) w3 N
各位大神,我最近想做一个基于单片机PWM功能的流星灯(水滴效果),可是看了一些资料,按着书上的程序做了一边还是不行。那灯亮度压根儿就没变,,,求正解啊。。。。
% i0 O7 }1 O1 n+ t5 T- W#include% Z* d8 G0 A: _' S
#include
3 E5 N  v: p1 s# S" }  x( y  r#define uchar unsigned char% Y( o! A" S5 j1 J$ r
***it PWM=P0^1;
6 t% w5 r% b- O5 o9 F8 vvoid delay(uchar i)% s$ z, T% F; t2 x: m( T
{
% @+ \7 R: d  z9 e6 `        uchar j;& s' u. F/ A: I, l) f
        for(;i>0;i--)8 x- `: B0 }# c9 J: x4 W) X
        {
; L* J. S, {; l% p0 F1 e                for(j=29;j>0;j--)5 W+ _( }, K! t# H
                _nop_();
; f: H4 W" u- p+ J: M# H6 V+ y; x                _nop_();
  I2 V" q& d% E' s. C& Y/ F        }7 ]3 k; G8 b& ~; P/ a% [
}
3 i3 O& Y' k: O5 _void PWMout(uchar q)
7 f- [' c5 A& |, W3 Z, h/ `" M% J{
& }9 V/ D/ V+ ?3 O$ g2 V4 d        PWM=1;
2 d9 R4 Q& c/ c0 |! Y4 @* `3 E        delay(q);0 g% h% X. l+ G: C7 }0 |& `5 q
        PWM=0;0 V+ P8 Y3 T" Q
        delay(10-q);' o" _7 |& {, ]* h1 K5 W4 \. Q# _
}& v6 q, K8 F+ L# r  E  k
void main(), k1 W& y4 ?/ M' j! b
{4 I$ E+ O+ t# l: e
        while(1)1 e) M( a- B0 w5 B
        {1 f! ]# ~  k  o* t) f0 `* l  C
5 G: n* t9 ~. z. \8 a0 ~- V
                PWMout(0);& S7 B1 J: H2 {9 r6 @/ V& l! Y
                PWMout(1);
  e! y7 [% Z& z7 P                PWMout(2);
$ a0 x+ c9 S# E  S% t$ H                PWMout(3);
" r% C/ c/ l# e4 v' Q' ~3 F                PWMout(4);
1 ?8 x: _& p7 @; N9 R8 `                PWMout(5);
' c7 f" P+ R5 J5 Q                PWMout(6);
3 |: L  ^2 T" u) t/ l8 c3 l( `                PWMout(7);
" d  X+ i5 p. ?8 k  G; M+ Y                PWMout(8);
6 k3 _' B/ q8 }0 C. h                PWMout(9);
; }* x6 R3 ]; s                PWMout(10);) t! H& J1 B' v& T8 T) |. g
9 {2 F) t7 `8 F( f
        }( [7 M9 x6 n, G
}
2 [+ |5 a" y: j$ d% Q - W5 D4 c, z$ Z# }& ?
) \$ q0 L" M, q0 E

+ Z/ s1 v8 N6 w, H2 C 0 x: q2 P. j3 H* D4 Z( v8 a% D4 A) C
5 ]$ M0 a( j# @5 T0 H

该用户从未签到

2#
发表于 2023-3-16 15:37 | 只看该作者
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义) m. q/ @( [3 M

! P0 X7 b- l! H- C, f/ p***it LED0=P1^0;// 用***it 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号! _3 M3 V% f; f2 c1 m& O/ Y  X: h9 ]; y9 \
( {. `) m- X2 u9 h4 A5 X$ H
/ Q8 ], j! t7 c7 h3 B
void Delay(unsigned int t); //函数声明
" q* ]# }& q. Y7 T/ h! ?& G/*------------------------------------------------
7 a9 X9 j6 _1 J                    主函数
8 u% E$ h& d" i3 A0 Y& U------------------------------------------------*/
/ L+ O4 H# {  \void main (void)
6 I, k2 M& C/ B& Q{
+ V: ]+ V- A  \, [3 {% @                  & |! D- l5 H  H4 `$ L5 L
unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值6 J; y1 `. L, S* D9 K
while (1)         //主循环
( X1 V% o4 w) q3 `" f# W: ~  {
7 `# R- h) c' ^& z2 Q1 [LED0=1;
$ h2 i2 D* o7 U6 e8 b  WDelay(60000);        //特意加延时,可以看到熄灭的过程
* a+ a' ^6 R7 j7 \- Qfor(PWM_LOW=1WM_LOW //电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次9 ~. K. s/ Y* H
( S5 |  ?& b' |) s1 Q& i+ }9 \
                   LED0=0;        //点亮LED  
6 J! K$ l5 ^" u  H) o1 H                   Delay(PWM_LOW);//延时长度,600次循环中从1加至599
- `# j4 A9 Z' y! z                   LED0=1;        //熄灭LED
: T+ K0 c8 h- O4 |2 L4 P% {0 l              Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1/ s7 `0 s5 ?& e; f( Y6 F" x3 E, \
     ; r( ^# N! p3 I1 |
   }
* S6 P2 M3 ^3 j, A1 `; C1 ~LED0=0;
- P: L: V2 c" a7 G# s# v5 Qfor(PWM_LOW=CYCLE-1WM_LOW>0WM_LOW--){ //与逐渐变亮相反的过程0 S$ _& U5 \1 ~/ T
+ }( ?5 e$ `2 D
                   LED0=0;
/ i' q$ |/ W3 m7 m                   Delay(PWM_LOW);
% e/ o* {9 v  X' x1 Z" v                   LED0=1;
' g+ s8 {1 ^. o" x" q              Delay(CYCLE-PWM_LOW);
! y$ @7 \2 @6 U* Q5 B     + d6 i) G) E7 `: z8 \9 d
   }% f  H3 i4 D, i4 g! t+ F9 o: P
                     //主循环中添加其他需要一直工作的程序
0 H: R& t% r! z  P  }
# d' y4 C1 @& t2 A6 N}1 r, m7 x) e0 Y' s& |' P
/*------------------------------------------------/ g, E% `8 s3 D, W
延时函数,含有输入参数 unsigned int t,无返回值
0 t/ Y; d/ n5 gunsigned int 是定义无符号整形变量,其值的范围是! @: R( B8 N/ A5 h3 i5 j" i* V6 n
0~65535
% A( a$ S8 h# O! i- ]------------------------------------------------*/
1 J5 t! v5 P7 U& _1 C$ b) ]% |void Delay(unsigned int t)
& z9 S. Y- g7 P( s2 p$ S, D{
% R7 E  j) B7 n% ^2 p& [0 m& zwhile(--t);% _/ |" A: E8 @9 {$ b  y
}

该用户从未签到

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-10-31 13:12 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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