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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 RGB_lamp 于 2023-3-16 14:53 编辑 : u0 P, K3 p" ]( h
2 t3 R! h: E/ z& A8 P
各位大神,我最近想做一个基于单片机PWM功能的流星灯(水滴效果),可是看了一些资料,按着书上的程序做了一边还是不行。那灯亮度压根儿就没变,,,求正解啊。。。。& t% r, v3 J9 o& i. u4 i
#include
9 T7 m( `0 I+ X5 }" U#include
' f' }! Y0 Y$ b6 E; ?#define uchar unsigned char
2 O+ N$ s) `6 ?2 a***it PWM=P0^1;( y: m. `; V2 d7 e  C; {
void delay(uchar i)
( }5 I4 S0 |- V1 Y' a+ z2 ~5 v{% v( v8 A8 o3 {2 J, X- q) g/ y7 y
        uchar j;
2 u$ |; k1 T- Q5 _; }        for(;i>0;i--)
1 F' z1 l# I& }; N7 T1 U        {% F0 Y( r9 Q" N3 b8 Z- a! q0 r# H
                for(j=29;j>0;j--)
* A* ~7 N* x4 X6 Z( v9 t' |5 s                _nop_();
* |: J1 U0 t6 c6 Q  `2 M+ E  Z- T                _nop_();
6 F* ]; D2 x# }% W$ X        }( n0 Z' Z8 K( U9 s8 B
}/ k7 y% ~- i, w' M1 q, g# T4 Z
void PWMout(uchar q), d3 l1 r, Z+ @5 N$ Y0 g
{
0 r/ K7 G/ U/ h! E. q        PWM=1;! J* u  I7 m3 s  H+ @
        delay(q);
, s! v5 W! o; n7 f1 F; e. G& d        PWM=0;+ d+ B6 j* n& J# b0 I% y
        delay(10-q);, A8 D. J- x- a# M3 b' N
}. |+ a  \, q: W  w' @
void main()
, p! n& V% C8 u2 X{3 U; }7 S! l: t3 O, t- J/ @9 |9 G- N
        while(1)
  k4 O% v  n3 R        {) u- m& G! K. `( L+ t$ P4 |7 T) i

) i; L& C( O* X4 u2 i! K                PWMout(0);
7 ], b& {3 Q+ Q7 V+ [4 ^  c                PWMout(1);
! w5 z- R) v& G4 t' F! x                PWMout(2);+ N5 T: t1 ~% [& V8 x8 @0 r7 {
                PWMout(3);
' f0 L( d* A/ B/ R( R                PWMout(4);( f8 G- ?3 p+ {. d" G
                PWMout(5);
7 M8 G% g* _! L6 J# f                PWMout(6);
* |% g: z: d1 g! f+ Q9 m7 A8 }9 ]                PWMout(7);
; a) z1 X* V. p8 ~- F* [                PWMout(8);
/ Z& N! Q6 ?9 p8 O' j& p5 Q                PWMout(9);6 P$ l' M5 ~6 l4 n. _" |
                PWMout(10);- F6 K2 `2 I3 `- \
- |8 R7 k% {, c3 U  e  U
        }* @3 ~& p# ~+ _/ g; ^
}( K. J! p, o2 y2 q5 }) D8 d

5 U6 j4 ^& ]! u1 K! }9 }
% C) D8 c+ x+ j" B& Q 9 p5 V' B# Y7 h' e; H
+ z+ s# k1 J* `+ ?# A
- P/ P4 U, h' |0 x, y( b% r. i$ L

该用户从未签到

2#
发表于 2023-3-16 15:37 | 只看该作者
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义$ x) J; |7 e/ Z& ?& R3 _9 }

6 P; p. d  P$ w# M& c***it LED0=P1^0;// 用***it 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号
% r( L1 w1 R7 D4 J# M: o  R
- J6 P- f8 M7 [% l8 d
" J" l& b; R0 m4 x6 f& j& xvoid Delay(unsigned int t); //函数声明: D8 _- ~1 V0 R' y' s
/*------------------------------------------------3 b7 ]1 _5 V% x& y
                    主函数2 j" X# r, a0 }# v+ E4 J: |) u- D3 b
------------------------------------------------*/
( i7 [$ S$ _4 t4 Mvoid main (void). A0 l; G6 _* m$ J
{
: J6 V8 U! ^: b* ~! M' M" h4 ?                  
/ V. Z3 t2 m8 \7 Hunsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值% n6 |+ |' [7 \# m
while (1)         //主循环9 ?* ?/ O* M0 f/ Q; Y0 B0 T
  {
2 p4 X" f3 h) a2 hLED0=1;
, ?+ I! P5 D( PDelay(60000);        //特意加延时,可以看到熄灭的过程/ D0 \4 ]% f! u1 ]2 H% O/ |) @
for(PWM_LOW=1WM_LOW //电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次; P% I: ^6 n! Y+ h; x

* E6 e2 t2 W( C! N7 \                   LED0=0;        //点亮LED  5 k! L5 c4 s1 l3 _
                   Delay(PWM_LOW);//延时长度,600次循环中从1加至599
: y, y- D( I" h! ~7 a3 Q6 i                   LED0=1;        //熄灭LED
' |# G9 z9 N4 R. y/ Q5 l              Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至17 I: Y& r6 f1 t2 N
     
" q! h- U$ A4 {   }! C' A/ d3 ~. H. [
LED0=0;: m( Z- o4 w, k0 E3 t+ `+ }, L
for(PWM_LOW=CYCLE-1WM_LOW>0WM_LOW--){ //与逐渐变亮相反的过程2 P' u8 p% f8 j" r
1 K! [" U; Z! t% H3 s. A- J
                   LED0=0;% W0 O0 P$ e0 e# [
                   Delay(PWM_LOW);$ C2 s1 Z6 t" s. @2 X/ @' `
                   LED0=1;. N4 Q5 R# Q; @. {, Y8 c
              Delay(CYCLE-PWM_LOW);
% Z2 o0 k1 M$ I& a8 h( d4 s* Q$ Y% ^0 M     
- p5 g- r7 ]: \  b   }
7 g& p2 l. N8 p7 u                     //主循环中添加其他需要一直工作的程序
+ x" i( Z% x; |9 w% V% ^0 y* O  }0 u; u4 B, a2 O; \2 J: F' X
}
  L' u" _- D4 v7 T+ ]/*------------------------------------------------
2 j5 O$ Z' H7 L% S延时函数,含有输入参数 unsigned int t,无返回值
. H+ s) o3 S( _5 H* vunsigned int 是定义无符号整形变量,其值的范围是
' ]' O  d! c5 [* r0~65535
, ~- _* Q: p- U5 q* F3 k- Z------------------------------------------------*/4 }9 T0 J/ X! w: u& d
void Delay(unsigned int t)
3 z4 I% G! W5 U5 ~. @6 T" W{
; @' o7 u% }  Q- }& ]while(--t);
$ H: [2 j4 P' Q$ Z: B}

该用户从未签到

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-8-16 14:37 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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