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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 RGB_lamp 于 2023-3-16 14:53 编辑
2 I/ ^, }, R+ ^  Y
5 g; |- K- K$ ^/ H各位大神,我最近想做一个基于单片机PWM功能的流星灯(水滴效果),可是看了一些资料,按着书上的程序做了一边还是不行。那灯亮度压根儿就没变,,,求正解啊。。。。3 S8 F: H4 J# l  Y# @) x5 }4 R
#include
' c$ J0 B; t5 G#include" W" }9 C4 x$ w0 H5 O: p
#define uchar unsigned char9 o  B9 _+ L5 p
***it PWM=P0^1;" |0 C* R# g7 P3 I" d' j
void delay(uchar i)
9 U2 v7 b" m, U- V  L* B+ w  Y{- Q' b7 M# e, p1 i: f5 R
        uchar j;3 Y& f0 l) e; x4 j2 M4 b/ M. x6 x* x9 n
        for(;i>0;i--)
: [0 O$ ~& y( Y+ Z% t        {$ x) Z' s6 O) h( i* x. Z8 C3 u# ]
                for(j=29;j>0;j--)
$ n* Z  S( ~* ~- n2 j                _nop_();9 g* E1 H3 h# x* J" R* a
                _nop_();) Z; f7 l: e, U( a% Y! o
        }& m# P, l( U) D0 `' `. F4 e8 Y
}
  B2 O9 S  T; [6 q& k$ j; Z! N( {void PWMout(uchar q)
9 W# }' x8 `3 n1 `5 z+ F, b{( I& }! _+ D9 |  o) V! p8 Q
        PWM=1;
$ S& m; E; D; v$ F9 B) q        delay(q);# N) a  v/ b5 K+ N' u4 [
        PWM=0;
5 w$ S6 m; Y; H- n3 m        delay(10-q);
1 K  L" ]" o6 b! j. C6 X' i' _}
% ~. I2 i7 g: q# Y: g5 h, C" R! d/ Xvoid main()
) S+ t5 t( `: D7 R3 {3 A0 b{8 p( `' r. I* F% L! b
        while(1)
" c3 m) F5 |+ @9 p5 ~' U# x3 w        {
+ w  J/ x- p( B
' }% H, S) u/ M! U. p! i3 d7 {                PWMout(0);7 l6 k+ S$ q; C+ S% [
                PWMout(1);
  _1 [2 [* M' \1 Q1 W2 Q8 b9 S                PWMout(2);
1 I1 D) m' c- b5 R$ L                PWMout(3);
/ @* T/ W' s& K6 U3 V) q                PWMout(4);8 ]( V0 D( r/ [' h& d, @
                PWMout(5);1 k0 `" y: ]5 M% b( G
                PWMout(6);
: b2 I0 y% u) ?! P+ C5 D, i, Q. ~                PWMout(7);% D& `# {4 B7 G  Y5 v! K2 D6 H
                PWMout(8);
. r, _( L$ h6 H/ B                PWMout(9);( b3 ^* G/ @. ~  G# p0 }
                PWMout(10);
8 ?) {6 y8 I  ?6 ~) E
: T3 @" ?) N6 }        }
# }6 L, e. ~: G' B: p0 R: }9 E}9 I* J+ h/ T3 q0 n+ F& u
8 [# S, i+ V# _9 c
' ~+ w1 I8 }( z- D' K! s

0 a8 {9 I! l' |+ A ) z) ]3 k: R7 I& ~) D' }

6 X0 g7 q9 m* ?" z, Q

该用户从未签到

2#
发表于 2023-3-16 15:37 | 只看该作者
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
) w/ s$ ~7 t6 \( M* c3 b  f, u% P5 E: f. a
***it LED0=P1^0;// 用***it 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号; e- l# C9 v8 p# u' @- P- N

+ I9 v  |& w- w. l( T+ p9 q2 H2 f% g7 u9 \% n
void Delay(unsigned int t); //函数声明* E; R7 L* ]6 ?2 s# L
/*------------------------------------------------* Y2 R3 ^7 b# I; v) E& f
                    主函数
/ M8 e% u6 Q3 t4 x+ }7 f------------------------------------------------*/
* P* Y6 O+ Z# k9 v1 Lvoid main (void): V" n2 ?/ n, O  a. w; Q
{
" X; `& M* q, E( _: C                  9 I8 m& h; q) f, v) Q# n
unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值9 |  b* s0 N) v, O! X* ^% L" R6 w- p. H
while (1)         //主循环, q' D7 |9 m) F$ j+ ~
  {
' p# s  L' `- v! x  K% pLED0=1;
- _+ U5 b. x+ c% R- ~Delay(60000);        //特意加延时,可以看到熄灭的过程
. i# J  l: R+ \8 b5 f6 ^; U7 P3 O( Q  Nfor(PWM_LOW=1WM_LOW //电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
( g2 Q+ S+ O5 P2 A, v3 Z1 z" H$ l( n( J) y3 ]# Y) x
                   LED0=0;        //点亮LED  
0 D6 l% `- ^$ B% W) T3 U                   Delay(PWM_LOW);//延时长度,600次循环中从1加至599
$ ]/ L$ U  p# {/ n) e9 Z) w  l6 r                   LED0=1;        //熄灭LED% @' F  n! Z9 A" F
              Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至19 w' E5 L$ j0 C# T
     
) q) a  {) @. ?; T7 F6 d. O   }
/ h! h% }; ]5 {& WLED0=0;
) e2 E$ _( o9 ]- ffor(PWM_LOW=CYCLE-1WM_LOW>0WM_LOW--){ //与逐渐变亮相反的过程
1 Y) h) H7 B: v9 l( J8 ]* f6 Q# s2 [' t
                   LED0=0;
0 E# s7 S- i% f) P; E                   Delay(PWM_LOW);
) A7 D3 z* G5 Q, M# h4 J; Z                   LED0=1;
/ I) D4 P3 N. d6 I              Delay(CYCLE-PWM_LOW);0 h: r: V* x" ?: ^" U: a" p9 y
     ) q8 c9 o! [( g/ D7 S8 T8 K" C  x
   }
1 y' S$ T3 x) a& x  n& o1 @                     //主循环中添加其他需要一直工作的程序8 j- @4 h: N/ s* a
  }& \, P: W5 z( j: v6 M" s; P6 t5 X4 s
}5 [* @. _3 G3 o
/*------------------------------------------------
' @. O) j. Y/ G* s. U延时函数,含有输入参数 unsigned int t,无返回值; w/ ~4 x! ~* W
unsigned int 是定义无符号整形变量,其值的范围是. D8 F+ Z' a, O- t- C7 f9 Q
0~65535- E* l8 ?+ Z4 B/ ~7 G
------------------------------------------------*/) ^! U! g7 j9 V% N* f  i5 ?
void Delay(unsigned int t)% n4 L8 _9 j3 W4 J% U4 `
{- L* I. C" G1 P8 Y$ e$ u
while(--t);/ T' n/ ~3 x1 p- p/ w
}

该用户从未签到

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 02:50 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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