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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 RGB_lamp 于 2023-3-16 14:53 编辑 7 X' q9 k9 n6 e! {7 L! h, W( T( C4 O

, W$ i. Q3 }2 k" G各位大神,我最近想做一个基于单片机PWM功能的流星灯(水滴效果),可是看了一些资料,按着书上的程序做了一边还是不行。那灯亮度压根儿就没变,,,求正解啊。。。。; S9 L: _6 g8 u# ~  p
#include
. e$ Z* h; }  z7 g5 @$ w#include) W$ Q7 k3 B5 ]4 C; O  B& d5 T
#define uchar unsigned char
. Y5 B+ Q6 ]6 h7 X***it PWM=P0^1;7 p% @! m7 w0 d# f7 w0 k+ E
void delay(uchar i)
6 T. F5 q, Y2 W; P{
, V& s/ r9 {7 Y+ V1 y        uchar j;
, @7 Y& a+ S/ l" o$ t/ b        for(;i>0;i--)
  a' X* L* V) t' \7 v+ T3 T        {2 L# P- n7 p# O, ?$ k
                for(j=29;j>0;j--)
# b; o: w- z8 a6 Z+ ^4 T8 X8 ^                _nop_();. y  y' g' F( i* ^: [
                _nop_();' D; B4 [  n' P% \8 O2 o% a: F( x
        }
! ^, b4 p) N3 F  F6 \' W( f: ^}& `5 Q7 X1 k" @, D: K8 s. ]
void PWMout(uchar q); `: S* [" w0 `+ e$ X8 K
{
4 U# L: O/ }8 E. A* g        PWM=1;
; }& ^2 p4 s% ~* E: I        delay(q);3 z: Z2 }$ _9 w
        PWM=0;
: |  Q, N8 u6 K1 v        delay(10-q);/ G# a  e" [2 P: d! G: N; {6 x
}
5 c( M; i" @9 s: h5 L* cvoid main(). k' z5 v# y6 D- f! a; m" l
{9 j' T3 {8 v. x3 T
        while(1)+ `8 f8 @$ B; v  m  b
        {
6 L- d# _0 z2 _1 V4 F0 `  |$ u( O7 R- R
                PWMout(0);/ L  N/ R2 i2 M) O/ D1 a, r$ {+ t/ R
                PWMout(1);, S9 B( C$ d$ u8 ]  e& ]6 I* V
                PWMout(2);
4 ^& i" ?3 a7 S: c1 J) P9 G+ D2 G% _                PWMout(3);& G' N2 |- g' h. E: a! E2 z, C( F
                PWMout(4);$ P/ Y. s  c. X. L% s
                PWMout(5);
* M5 d9 ^$ K  E, N7 a* n; [. P                PWMout(6);% C- z+ Y) M- x: G( j' {
                PWMout(7);
1 V( o$ B- _1 A& A. e# R& x                PWMout(8);
& Z/ |0 {( q: V# r. X+ A; k                PWMout(9);
0 V4 {( B+ D6 m                PWMout(10);
6 x6 S1 M3 T" D- |! j# K. S+ g) i$ Y  q( B+ j; X& }
        }* I: \; o# t+ l
}% m2 Q( O7 E: l: j

9 c2 Z+ {: Q, Q; c . B- o5 X9 A0 Z# a3 u
2 l8 T1 L. c$ v$ \& J  Y: S, Z' U

- o" b+ B8 s: H! c. e. _% d8 E1 b; W8 f

该用户从未签到

2#
发表于 2023-3-16 15:37 | 只看该作者
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
0 e4 x3 U% B% _$ D7 N9 Q
, M4 F+ B" g$ O$ U5 U- @***it LED0=P1^0;// 用***it 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号& k/ p- r, K: a" d0 z

3 @3 O$ A8 i" [( s: A  X' \3 J2 O: `8 w$ {) B% d0 u( O; t- o! x
void Delay(unsigned int t); //函数声明
4 t1 J6 K$ n7 ^7 n( d, L7 H/*------------------------------------------------3 |+ Z) G  L) L/ t
                    主函数
! {9 `% E# F# `! \; ?; j------------------------------------------------*/
$ k1 b. P* q/ evoid main (void)* |# ^% r2 r2 ~) @7 m2 ^8 g& Y
{0 F- a2 }6 I7 ~% Q) K
                  . }; ?" J# s' z% p0 }
unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值! v+ m. C' |; x$ R  C% {; y
while (1)         //主循环
; V) ~/ v0 q% L; `: n; N. X  {
* w4 l' b  c9 \2 o# M4 h  \LED0=1;
1 M* e! B& p3 @4 K  P. `0 @Delay(60000);        //特意加延时,可以看到熄灭的过程
2 D  D: x& [, Gfor(PWM_LOW=1WM_LOW //电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
( }$ O& M3 G* i( n4 y- Z( f
. L. K$ l2 J' O1 c  k                   LED0=0;        //点亮LED  
: u6 A! R7 G8 h5 f                   Delay(PWM_LOW);//延时长度,600次循环中从1加至599( b2 a9 D: U* k$ H: T5 @
                   LED0=1;        //熄灭LED
# W' C8 D; y! N              Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1; l0 s1 Z$ s6 p" {0 j! I
     
9 x/ H) G/ Z" ~6 ?$ B. b   }
% A, m% r  l1 _LED0=0;" r4 m, h( L; k2 k
for(PWM_LOW=CYCLE-1WM_LOW>0WM_LOW--){ //与逐渐变亮相反的过程
0 V9 X' ^: B5 K6 ?
; a, b( R' }; E1 p/ J+ b                   LED0=0;( L- l$ f5 o+ M8 I% C( z
                   Delay(PWM_LOW);
- R. M% P1 d; {# M, P5 Y/ b% \                   LED0=1;
- x+ Z( A: I& D0 V6 Y              Delay(CYCLE-PWM_LOW);
4 @/ s3 j3 O0 w9 k1 y' G+ u, d     5 |/ V/ p7 v! P' ?5 j; \+ m6 B
   }2 i  {! d; T# ?' [, c2 l
                     //主循环中添加其他需要一直工作的程序6 K/ M0 M6 G' Y" N7 f4 Q
  }% Q$ l" N4 M0 a5 c; i" _
}
# [. Y; F7 \* r1 l3 ~/*------------------------------------------------% |1 r3 J' f, s+ w  Y1 o! o1 D
延时函数,含有输入参数 unsigned int t,无返回值
4 V  y5 \( W: w) S! o" tunsigned int 是定义无符号整形变量,其值的范围是
8 V% Z9 x4 n: l  G9 U# z2 k" u0~65535
1 y6 z/ g1 P+ @# s------------------------------------------------*/
3 l# X% j. D5 O: O; R( W; |) Gvoid Delay(unsigned int t)
( l' K0 u1 y, l/ y+ H6 }{' W& S) U5 a. w$ {: \* g1 r# h7 `
while(--t);" U; \- }) j* f* 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-11-22 03:29 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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