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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 RGB_lamp 于 2023-3-16 14:53 编辑 ( L2 R0 g0 [0 B7 w2 R2 W4 v8 @4 O
5 w* i- b, M# x, b' ~! s9 n
各位大神,我最近想做一个基于单片机PWM功能的流星灯(水滴效果),可是看了一些资料,按着书上的程序做了一边还是不行。那灯亮度压根儿就没变,,,求正解啊。。。。7 P) [9 [; {2 r. b" g/ K
#include
* t5 H$ p* a; U#include
" d1 d- l' g! D5 n; z#define uchar unsigned char
6 v* \9 ]( L# b/ W7 P! \* y***it PWM=P0^1;, A/ q+ Q4 p; q  e6 I0 [- Y
void delay(uchar i)
9 Z& `6 k2 D' D! e, H2 d8 e{1 t- C1 y4 L# d1 w
        uchar j;5 c( z9 m% r; n& p) T% H
        for(;i>0;i--)9 c/ H+ y. a! w' |; P
        {. ^; t* Q& M' ^5 e1 S( E( x
                for(j=29;j>0;j--)& U! S$ t( G/ v; g# B- W
                _nop_();5 ?( @, L, O$ d8 \2 p" h
                _nop_();
. }$ z4 I  H; Y( u        }, p9 J3 _. H1 Q3 g' }. R* z
}
# M& [8 ]; P0 `5 `9 [void PWMout(uchar q)2 ]  q$ o: O/ T% w. }$ E8 [7 z
{3 f! A! p& y2 p- f7 [5 z! T# J
        PWM=1;
* j, @/ z$ M+ O        delay(q);2 d8 R% [1 I5 U. |& @
        PWM=0;
; z1 D& K. b: W  v4 |: j: p        delay(10-q);
- j5 I6 n+ u7 l5 k. b1 v2 I+ |}
3 A$ [9 A- b& e  v" a4 |) Yvoid main()
& W4 t+ i% X- N5 c{
+ _: n9 e# j1 s+ [* f        while(1)
$ w' J8 R* [- F& |) q* P        {
" R  Q. f. X) C* C$ |% f  H  a) Y2 u& [; {% C) x: ^2 N& p1 Q# R
                PWMout(0);
+ R! Y. H# s. U& O$ F  @                PWMout(1);
, |, y; G5 z( T/ t3 E" y+ o                PWMout(2);5 k- l6 T  T' W: l1 s' @4 F
                PWMout(3);
. ]; v0 l9 e+ V# l                PWMout(4);' A) [: x+ S! ?# m
                PWMout(5);+ L7 l: V: H2 _1 V( E
                PWMout(6);
7 I3 @  k8 S% {% M7 `& K$ `% \                PWMout(7);/ @+ L* X: Z7 D* e+ l& l2 Z$ ~  g
                PWMout(8);
! U9 Z$ i* b1 F* _8 Z  h, ]% S- ~                PWMout(9);
: a, Z/ D" \9 Q% R6 w( c                PWMout(10);
, Q, W0 |& [* V7 k9 k
% _4 I2 w! w! ^9 [+ d1 D" Y; h5 F- D        }3 y; K, F5 X) P  V
}
) K* y3 ?( R- g4 F( I0 U ) _+ E: e7 M( K" _( p; _& Y' i
+ ]: c* p3 j# O

" |+ {* Q' {% u1 j+ { & c- a' B+ n0 t1 ^
1 s2 i& F& [5 E6 c, h

该用户从未签到

2#
发表于 2023-3-16 15:37 | 只看该作者
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
! T  y; C- G1 t0 F; q5 K/ U1 O5 h( }9 K4 O0 i3 x
***it LED0=P1^0;// 用***it 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号
; v8 Z# a$ ^8 K8 m
5 S8 |% {/ J% N9 A! n9 g/ X7 X8 u4 f0 _1 u6 B+ D7 P) E5 P% A
void Delay(unsigned int t); //函数声明
0 Y4 o& b8 h2 Y  t) s: |; h/*------------------------------------------------$ _) K* W& ^) S4 {5 `' t
                    主函数' P" o1 ]- M! @5 f, S5 o
------------------------------------------------*/" K1 I7 I* [" _8 S0 V& b8 v
void main (void)
! x  z' g0 Y3 A3 Y/ X- x$ t{  w1 o& e4 W& g0 E" F9 e
                  
5 D: S5 @4 h/ \9 M. m$ A$ K0 dunsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值
+ B$ N9 {" S! K7 u. [! ~+ E8 pwhile (1)         //主循环
9 X* }! H8 A, Y: v  {. F0 {0 Y- C: I0 Z& E
LED0=1;
0 U: a! t' a* A2 U8 I* n7 iDelay(60000);        //特意加延时,可以看到熄灭的过程. _( o( m' u: c2 U9 O# Y3 Y
for(PWM_LOW=1WM_LOW //电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次! f8 v  E+ n& q# y

9 i+ P$ v1 L& \0 [0 z; X                   LED0=0;        //点亮LED  ( k5 `, a$ G1 D+ j5 U! J
                   Delay(PWM_LOW);//延时长度,600次循环中从1加至599
! U3 i& n2 S+ }/ [$ J                   LED0=1;        //熄灭LED* f9 h0 T3 l; o7 t6 g1 `* d* T/ t
              Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1# G7 J) c- L3 Z7 a% g8 J
     / u1 @+ D* T7 S
   }
5 J4 `- L. G. b/ S8 DLED0=0;6 Q. @8 m! i4 W% t$ Y
for(PWM_LOW=CYCLE-1WM_LOW>0WM_LOW--){ //与逐渐变亮相反的过程' ^7 Z% M' x' F  p; P; y
2 T. T8 `9 j; M2 `$ B% n& c( O
                   LED0=0;) x$ h1 w0 H2 z. o/ L, @
                   Delay(PWM_LOW);
* Z2 p: c, b% O# K                   LED0=1;+ P9 v* `5 d8 e) d% t
              Delay(CYCLE-PWM_LOW);2 U7 F- f6 ^- b- d8 I2 D" Q- O
     ( K. u/ e: ~, j( T* G5 m
   }
! x5 d$ V- w  i0 |                     //主循环中添加其他需要一直工作的程序
' L2 m. e  T! c$ I2 g  }
' k  T$ n/ }$ I8 `. Z0 c}
+ X! [% v6 i, X, ~  [9 y/*------------------------------------------------" Q1 Q5 Z( `  @
延时函数,含有输入参数 unsigned int t,无返回值+ Q  G0 Z& w" t) O2 M  m
unsigned int 是定义无符号整形变量,其值的范围是; H6 N" W: j; n8 J' ], h6 I" c
0~65535
; [, K, `; W: |7 _5 N$ B------------------------------------------------*/+ g  t% t3 g7 X2 b+ W
void Delay(unsigned int t)
8 C/ O. ^7 M& ^{( G- N& D3 f: u( Q9 Z. R
while(--t);. k- `7 G2 {# i4 Z$ w3 G  t/ O1 T
}

该用户从未签到

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 01:47 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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