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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 RGB_lamp 于 2023-3-16 14:53 编辑 1 W  q5 ?/ I2 c
( Z9 e8 j# G: d# K' t4 q1 x
各位大神,我最近想做一个基于单片机PWM功能的流星灯(水滴效果),可是看了一些资料,按着书上的程序做了一边还是不行。那灯亮度压根儿就没变,,,求正解啊。。。。# r7 d: k8 ]& g) j% b: F0 R' ?
#include/ L+ A; E' m2 v+ M2 Q
#include. Q; `# m4 y) y0 P% }) H3 |; _; P
#define uchar unsigned char! O4 M' |' O, r$ c$ d8 Y+ S
***it PWM=P0^1;& }* T/ g$ Y4 e( w& F( Q% _
void delay(uchar i)
1 A% P; g1 s2 G- ^8 u% j3 s{5 n& @$ O0 ~8 \0 i- V
        uchar j;. I* @, _. X% Y: v# A) ]; Q  D& @
        for(;i>0;i--)3 ]3 {- }# `6 v& C
        {
7 m3 k1 v- V( T$ Y5 r: K                for(j=29;j>0;j--)5 ]1 e5 m/ ^" T+ a9 l, V+ h) q9 S
                _nop_();" o/ d+ I8 N8 x6 x: r% T2 B( S
                _nop_();
* y' O6 G9 G. ~7 W, U0 A        }
: F; z% \5 E# Q) y# {( A}2 L6 `- p- J6 a9 m" G8 ]) ?, n8 n
void PWMout(uchar q)
) J1 h# }& e( q! G{2 }/ V, R+ G7 x
        PWM=1;* ^$ D: @1 J# B- U
        delay(q);
, p( k- S+ ?$ @% S" V        PWM=0;; v- J5 N" q% `
        delay(10-q);  M- y. {  g" e' ~6 L1 C
}
) u% E' F* l* J; Mvoid main()6 t# u  F; l$ c8 ]+ X
{
2 t, E. ]! I, _        while(1)
. ~% ]+ y; K# t! a# n        {
; i" ~, x% z. W  _3 D3 G7 s! L3 g- e( ]: ], r4 r; W
                PWMout(0);
. O8 X2 U1 [& q3 @$ A                PWMout(1);
, e1 A; B3 \: r( q- Z# V                PWMout(2);! f: K0 j% [6 Y/ J
                PWMout(3);
- c4 c4 ^$ k" s6 h2 A3 [                PWMout(4);& U* }2 W9 y8 ]! P  v2 _* @
                PWMout(5);
. d) G/ E1 Z/ S0 q2 _                PWMout(6);& S  ?* ^% B! Y0 e$ M6 T* ?
                PWMout(7);
! M* j' C3 b; R. X7 O/ _+ Z6 j                PWMout(8);
2 q" U0 Q+ J8 e0 _: p                PWMout(9);4 s2 h2 Z2 m2 U% N: v/ q' @3 \
                PWMout(10);
  u0 |  I& }1 n0 h2 H4 V2 _* C* a5 u- c4 E, W' Y
        }, Y$ c3 |3 Y" k- T; y
}2 x0 s' X) r6 J' d+ d  U  q3 P/ {

+ o1 g3 K; b" ]: ~1 G0 _ 2 f; c9 h# o# i2 O! o9 e

; I$ Q1 A# b& v; S7 t9 g. R 3 x7 R5 {$ b$ A# b: A7 |. y

2 L- i$ \: m9 E

该用户从未签到

2#
发表于 2023-3-16 15:37 | 只看该作者
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
5 M' a1 b3 R/ D% }0 B& H. L! d/ |- j& N8 W+ r
***it LED0=P1^0;// 用***it 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号
" _1 f/ ]2 p0 ?( @; ~- p4 F* m! h& L. P, p, D2 Q: R! u
+ }. `+ s; _% X6 Y1 O! S
void Delay(unsigned int t); //函数声明
) t. x/ B" F% b1 i4 }' s/*------------------------------------------------$ i4 j- r' x9 W2 ]/ B6 T
                    主函数1 }: k" \- i7 [4 T3 ?+ s
------------------------------------------------*/$ j) A' D( O$ T* Z. B! F+ Q
void main (void); z/ ]2 X& v% D
{5 \8 b) R% m) k9 F
                  
/ k2 Y& A: I; H* L- z, nunsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值3 {0 i) {" X& z) y1 b- f
while (1)         //主循环
. U& D7 N) p' C" j1 v  {
9 N9 @. h% \  w+ q% ELED0=1;
4 J$ Z9 F  f4 ?. W0 x/ p# @Delay(60000);        //特意加延时,可以看到熄灭的过程
5 o. X: q: f! q1 f0 ?  T( sfor(PWM_LOW=1WM_LOW //电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
5 R3 q0 h6 Z# T: m
1 U& {2 K' w% M: I: G                   LED0=0;        //点亮LED  
3 f6 w) O$ Z2 E% m; Y                   Delay(PWM_LOW);//延时长度,600次循环中从1加至599- @1 k: Z+ `  h: [+ q
                   LED0=1;        //熄灭LED
. B4 p. n0 j$ t! x5 D              Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1
7 w1 ]6 f  z0 D. g+ H     6 P4 @) ?; r/ Z* n# v* p  o
   }
( J( K2 k# h1 M9 w9 [- N8 {! ^LED0=0;
( o) P, `1 {6 m4 Dfor(PWM_LOW=CYCLE-1WM_LOW>0WM_LOW--){ //与逐渐变亮相反的过程: A0 L! b) Y  [( S! ^* h/ J
2 f9 I+ n5 B8 Z) t8 b
                   LED0=0;
9 w# n1 X9 u" t/ x# k6 u                   Delay(PWM_LOW);
; b3 N, N  i8 D2 j                   LED0=1;: W, F% \, f0 @: g# e4 o
              Delay(CYCLE-PWM_LOW);* R8 L3 C% G- |: y- `# S
     
/ ^: x( T; d- \# w; A; p   }
  G2 ^2 q1 x9 y; W                     //主循环中添加其他需要一直工作的程序0 J$ Q) ^" ?0 ^: x7 M
  }; Z/ z7 N5 k: v+ C" W; t
}
, n" V9 |5 @  d# q/*------------------------------------------------
) q% m1 l, @3 D( N延时函数,含有输入参数 unsigned int t,无返回值: U$ r+ V, ^( S6 `  s
unsigned int 是定义无符号整形变量,其值的范围是$ M, J" P7 s1 _1 S- E: n% P
0~65535
/ ^( l6 m7 o& r  P% \( s------------------------------------------------*/
8 [- p8 v" v% v9 a1 tvoid Delay(unsigned int t)5 T3 h6 P0 P3 C, [0 W$ Z
{5 l2 p+ K( F% E: S2 t
while(--t);# s( y2 ]  [1 s/ C
}

该用户从未签到

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-7-31 19:25 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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