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

单片机电子灯箱控制器源码-小项目分享

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-5-24 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
大家都见过电子灯箱吧,就是路边那种闪烁的,这种东西的逻辑控制很简单,就是周边流水灯循环跑马灯,正转10圈,反转10圈,然后同时闪烁3秒,中间的字体是亮5秒,闪烁3秒,依次循环,逻辑不难,我们用开发板上的小灯来实现这样的效果,代码如下:大家都见过电子灯箱吧,就是路边那种闪烁的,这种东西的逻辑控制很简单,就是周边流水灯循环跑马灯,正转10圈,反转10圈,然后同时闪烁3秒,中间的字体是亮5秒,闪烁3秒,依次循环,逻辑不难,我们用开发板上的小灯来实现这样的效果,代码如下:5 p& b5 \4 G- |( n

/ h  z- l8 k1 j% Y  E    /********************************************************
  T  B8 M0 m. T& o" q, O8 [5 q    *描述:8组小灯正转10圈,反转10圈,常亮5秒,闪烁3秒,依次循环
! r+ t4 P3 u- |$ P5 D' f    ********************************************************/2 ^' g' V% z% V$ c2 s
    #include "stc15w.h"" }! O. \) Z, @- v
    #include "intrins.h" //包含左移和右移指令
# O- K7 N( Z9 h3 f- P6 b0 f' l7 n    #include "string.h"         //字符串5 X/ @4 f4 i/ `' t. r
    #include "stdio.h"         //标准输入输出- Y  y! y, \$ q* q% l
  p$ `" P: b0 w' W) O/ F7 P# U
2 @1 K5 s! s9 x0 y
2 T2 `0 `5 g" ?6 d* |5 B
    /*******************************************************************************6 K+ a2 Z+ J  m5 A, ^
    * 文件名:位定义% y7 j: i$ Z2 @' c8 q3 s8 X
    * 描  述:$ s8 |- u2 {% F7 g9 x" ^2 M
    * 功  能:
1 c5 J* D) Y! t; |, \    * 作  者:大核桃9 D; [- ], N2 U2 H+ q2 S, M+ j
    * 版本号:1.0.1(2017.05.23)( x5 K8 r. k* M
    *******************************************************************************/& T  J: A; w. p/ M2 |' \

0 V% A& s2 X+ i2 s& |; j    bit flag500ms = 0;//500ms翻转一次
: @; g/ j" ?! H. ]1 i( B8 D2 d7 F5 m9 G" R1 G3 j0 x6 w+ B9 m! E
    sbit LED0 = P1^0;//
* D7 G) l5 l! m    sbit LED1 = P1^1;1 y8 ?- U! }8 x8 N8 a/ x
    sbit LED2 = P1^2;
# H: K9 p6 V% a  k  M! `    sbit LED3 = P1^3;+ A6 p2 ^& ~' P: v2 `  J3 j! |
    sbit LED4 = P1^4;& b, E2 j2 o0 J, e) J6 x/ n
    sbit LED5 = P3^2;
( U; \* g1 D/ `- U7 V    sbit LED6 = P0^0;
- V, N3 E3 K. r+ }0 ~0 K    sbit LED7 = P0^1;1 L. ^& N! J8 u9 l) W9 K$ i) n) D

  v; q; O. O( C( L! N3 P; ]  l" T+ D  x    sbit DATA0 = P2^0;//
# \6 O6 R1 P; n3 w  H    sbit DATA1 = P2^1;//2 u6 ~$ C3 s9 |  t
    sbit DATA2 = P2^2;//
, f& J3 O% C, `# n! c! Q    sbit DATA3 = P2^3;//1 m- V' C, I1 Y1 @" H
    sbit DATA4 = P2^4;//7 N/ i. e( C6 J
    sbit DATA5 = P2^5;//& J( s7 j7 o7 K0 J  N, ]
    sbit DATA6 = P2^6;//
/ M/ S, Q2 N) J7 n, T    sbit DATA7 = P2^7;//* J/ T8 O$ j- ]/ s- K
$ I, D% G/ e& E  A3 W
    typedef unsigned char uint8;//0-255# z2 f5 |7 M. f  P* G" P
    typedef unsigned int  uint16;//0-65535
% B7 p4 u. |# d0 n0 v    typedef unsigned long uint32;//0-65535*65535- T1 {* d/ b  u7 w

- z3 _2 Q! g5 e* P5 v  T4 G9 l8 d    /*******************************************************************************/ w% \0 |6 `" J% A% S' ]
    * 文件名:函数前置声明
! [7 Q  w9 d$ j- j* X2 ]    * 描  述:
3 C* I/ q8 d' Q) C+ J/ j  J    * 功  能:" [8 ]$ y  [) J/ c
    * 作  者:大核桃
9 Q  X, j2 d% |6 w    * 版本号:1.0.1(2017.05.23)4 `6 t- R" {6 @
    *******************************************************************************/' \; O& F% n) ]$ ?, |0 ?) c

: r; H7 w5 ]2 d    void Bsp_Power_Init(void);
( x0 u- ]6 M; z+ A    void Delay500ms();                //@11.0592MHz
: K, u; L* L1 E3 ]    void Timer0Init(void);                //1毫秒@11.0592MHz1 h5 k, L* F1 F3 V4 T; r

1 k1 U# X8 x) L! T9 G" Y6 _" j" v1 Y' f, I/ a, s
2 ]0 W8 U' O3 h8 ]$ {. y5 p
    /*******************************************************************************
8 g' U& i+ o4 S7 }, R% c' g% ^    * 文件名:主循环入口
9 p: ]7 B* X' l# {    * 描  述:
! q; u: S, K, L5 n2 K1 ]* B    * 功  能:
, D& Q) J" H0 F- ~! p3 n  V    * 作  者:大核桃& v" K/ _0 w' V( M1 L
    * 版本号:1.0.1(2017.05.23)" Z" B9 s. k$ K& Q9 s9 ^, t: K
    *******************************************************************************/$ @8 L) l6 ~# z: ^
    void main(void)
4 R  T. D! ?* _* B9 b( U" D9 d8 x    {* E, d# T: t! `, X
            uint8 i = 0;  o0 `$ T8 y6 d. @0 R: W/ A4 S

7 O' q! u8 Q$ v6 C/ b" @% x            Bsp_Power_Init();//LED端口初始化
# a; E6 Z% C0 [( I            Timer0Init();    //定时器0初始化函数" A- \+ I* X+ N8 b# e

0 ?8 P2 N% S2 Q' P" S            LED0 = 1;0 x6 \6 M* ?9 n8 S/ t$ W
# Y9 o; V) Y  R$ P
- f4 D  }! u! ~9 \. }- o" }; Y! t
            while(1)4 F, m1 k# |0 h) n( O! k
            {
6 N9 K! w9 e: E               for(i = 0; i < 3; i++)
& z8 T$ _* ?5 O# O3 x; E. @1 y               {# G8 J% A4 V2 Q
                            DATA0 = 0;2 u% T2 b2 S0 r
                            Delay500ms();
9 S4 _( W# j( u) u% _8 f, i                            DATA0 = 1;
& M6 l+ L! {/ e" {9 I                            Delay500ms();
- p. [% m" f7 G" B$ w
! F* w5 |$ ^: Z4 X/ R% K                            DATA1 = 0;( K( _% X* o4 d5 r: l# X3 j
                            Delay500ms();) L7 ]! {% [/ o( a
                            DATA1 = 1;5 z$ o+ I1 X, |2 L% v
                            Delay500ms();6 }3 T3 |+ g/ W' D* D
6 r  K3 ?2 k! w: W  V
                            DATA2 = 0;
- y1 C) c5 R$ N, ^+ r                            Delay500ms();, p; _+ c- h) @6 E. n
                            DATA2 = 1;# p. }( G6 g/ E2 U7 w
                            Delay500ms();
2 J* x& q7 i0 |. f! v' z$ p# z; x" i, w6 V" I4 x
               }  v1 [0 S, b# h  j

- ^; O7 _' h3 K  r5 a                       for(i = 0; i < 3; i++)# {" R; L$ K+ b0 B
               {1 b  Q0 r6 N: P! G. l
                            DATA2 = 0;
2 R" H3 _* e5 V+ w                            Delay500ms();
5 W6 D% N. [& B$ ~" _                            DATA2 = 1;
3 ?0 W# }% \, A  H$ o                            Delay500ms();- U" Z( H3 M& h% z9 s1 L

# k, b5 a4 L: F5 _$ o% ?. K  Q) d                            DATA1 = 0;
8 x1 r, Z2 ^( i                            Delay500ms();
5 E  U$ r5 E- j) J$ ?                            DATA1 = 1;
( I4 W  l' D1 ~3 @. l8 W                            Delay500ms();
2 u+ e/ X4 G1 k' x# K! X; ~. s6 [& j2 w9 Z
                            DATA0 = 0;2 ?4 M& ^& y" m& v7 l
                            Delay500ms();
5 s% ?6 c2 `0 k, j% o3 n' ?0 h                            DATA0 = 1;: h: S# ^8 b* `0 _
                            Delay500ms();0 l. o, c# @& e  `* g

' \* {$ x7 l% E' m               }
# ?/ i& H3 E5 R4 G$ m/ v; {: U& v8 ~
                       for(i = 0; i < 3; i++)# ^/ R/ }( K, R8 `
               {
* q7 T! `' g+ K/ z3 }- M9 d0 X4 ?3 o                            DATA2 = 0;3 W6 p' P. W2 c
                            DATA1 = 0;
0 v- d$ R8 X: Y; `/ z                            DATA0 = 0;
! O$ x" \4 Q4 L                            Delay500ms();; A8 U$ J( l. [+ u! k3 ?8 Y# [

  x8 J: X% _1 }& E9 e& {; @9 H+ m! X                            DATA2 = 1;
9 E; J( B9 l. z5 F                            DATA1 = 1;
6 h# X8 [7 d2 r8 k                            DATA0 = 1;
8 W: [1 r- h5 l& \9 e9 u                            Delay500ms();% a' w, L9 B- w  r! W9 v! [9 ]

( e% h. n  S8 N1 o! Q! ?               }
1 G! X# Z/ a7 N' M; K% e            }
7 C' u8 u( G; y# e% B' B9 n
6 e6 w& V6 C" B+ p* o    }
8 f3 A5 F* c$ N& _: v: d8 `! A' t* _6 h! [- b: G
    /*******************************************************************************
/ P1 Q6 P( R% x) q% d( {    * 文件名:void Bsp_Power_Init()/ L, t2 K5 s! `! O3 j
    * 描  述: 数码管上电显示
, o. \0 [7 Z3 ~    * 功  能:编程模块化  j5 h" y4 K! ^4 B+ `
    * 作  者:大核桃* v& s) T% ?4 a% O) r" t* {
    * 版本号:1.0.1(2017.05.23)& E: H# U8 N5 i# [; [0 B  }7 t
    *******************************************************************************/
& _" l' M5 `" X9 W0 H' A) C: }    void Bsp_Power_Init(void)+ W0 r% g2 N. v$ K  o8 _0 R
    {) D# g; n/ z) B, C  x
            P0M1 = 0xFC;
: D) Q0 \; b, F$ p+ v. g5 _3 K            P0M0 = 0X03;+ |! P  Q7 @5 A9 `! a, u
            P0 = 0X00;( o4 J; p" o) |  Y5 l
$ B! T4 ~4 y* u5 B
            P1M1 = 0xE0;
% Z; E( q& J$ |' a0 m; m. M( ?. R            P1M0 = 0X1F;- R$ o9 s# k7 b  ]" m2 M2 T
            P1 = 0X00;
/ h# ~# o6 c. B% v& U* b
0 \7 A. y- ^$ W$ H
. R# G! g. x; y& [            //P2口开漏输出+ O( i* f! n# @0 x
            P2M1 = 0XFF;
- T2 M: @: [- n7 j0 m' M, `            P2M0 = 0XFF;
, k& D6 d/ A3 x& A/ \7 C8 K            P2 = 0Xff;3 K# W! ]9 w$ ]  v! L4 h/ u
    //        //P54,P55口为推挽输出  ~: Z, v8 n0 q0 x8 ^
            P5M1 = 0X00;2 N6 X  L6 x  F: p! i
            P5M0 = 0X00;! M( {* _5 ?' [8 l( Z4 S6 w
            P5 = 0xFF;/ U* \  z& m" \: A
. d3 x# X* g% V0 Y0 x/ S. N
            //P37,P36,3.2,P3.3 P3.4口为推挽输出
0 n  O$ m7 G9 R            P3M1 = 0X00;
8 ?: D/ m9 u- k$ Y! O7 K4 f) e0 ]3 s            P3M0 = 0XFC;
1 n: n9 T- ]4 ?+ a9 V! F$ \            P3 = 0X23;' F. V; o# m, w- ^7 d5 L  |; _
( O+ S+ v. l' s6 w" |
    }
; g! x, }' u, Q! w) {  n; M% V7 P: O6 i+ ~- B7 N0 C
    /*******************************************************************************
7 ~  E- Z5 |$ m    * 文件名:void Delay500ms()                //@11.0592MHz
% |: ~; C  p$ u" X0 S    * 描  述: 普通延时函数1 J; |4 d8 Q) C( G/ S
    * 功  能:编程模块化
& c0 o. A. E- y& b; l    * 作  者:大核桃5 M+ @% Z$ a4 i
    * 版本号:1.0.1(2017.05.23)# Q( I) N6 B' \
    *******************************************************************************/) b, ?& ^4 ?) @8 n2 F# h/ n3 u
    void Delay500ms()                //@11.0592MHz+ z8 U2 f. U& Z" K- o4 P" y
    {
  l  a# q' _9 K0 V- t0 k            unsigned char i, j, k;9 k4 Q% x- d4 s( c% v- K5 E7 @
0 p# [+ P2 K' \
            _nop_();1 Q% a, u! g( B: W1 D4 U
            _nop_();
3 m- W0 m7 f* V' ^5 S            i = 22;
2 t1 \) I$ \# r1 f3 R            j = 3;/ t4 g' F6 e1 P4 Y( C+ J
            k = 227;+ s6 M1 n7 q- [" A- M, |
            do! \* n6 W# M* e2 q: _' V" F
            {7 D8 `' |. L. U+ p2 R' j
                    do' n# W" x& n# X/ |4 I6 _
                    {
0 G9 J, Y) i2 m, J! n% e                            while (--k);7 o2 d8 e; C. L; P, p  Y; j6 g
                    } while (--j);+ c8 Y2 j& @& V" L& g
            } while (--i);
# Z/ Z; j$ [' q" C- ^    }
& I) y9 E( o& l; n
6 [& b8 X% B* F- ~& Z    /*******************************************************************************
. p3 W0 M. c* d( q$ }0 z    * 文件名:void Timer0Init(void)
  l& I3 C1 z# Z  x  Q    * 描  述: 定时器0配置( f+ L- t, R2 c6 I
    * 功  能:编程模块化
0 i5 g0 K- p, K3 q% p- Q' [9 n- n/ x$ T    * 作  者:大核桃  _7 H$ E2 j4 W* ?( {7 M
    * 版本号:1.0.1(2017.05.23)
) a" S- X$ z% V; v1 j    *******************************************************************************/: G5 q9 w5 z2 t
    void Timer0Init(void)                //1毫秒@11.0592MHz6 O3 O: i# j1 Q* A8 C6 q- r
    {8 g, a; Q; O3 P3 v. i
            AUXR |= 0x80;                //定时器时钟1T模式9 g: O7 I* r3 g- ]0 N( f
            TMOD &= 0xF0;                //设置定时器模式 1111_$ X1 ~8 C' C( d/ M+ }/ n
            TMOD |= 0X01;       //16位模式,不可重装" Y+ d+ }! k* E3 p( ?6 V. o* s

/ {" h! \3 `! w    //        TL0 = 0xCD;                    //设置定时初值. N# o1 s9 h; p; c
    //        TH0 = 0xD4;                     //设置定时初值+ f! `3 J. K2 c3 Z& G  `9 w) O9 }

( _6 G* |$ F8 \2 I& @            TL0 = (65535 - 11059) % 256;                    //设置定时初值+ n' @' e: `  X2 b
            TH0 = (65535 - 11059) / 256;                     //设置定时初值. Q" g* k0 m* y$ P! b7 r; f

: h- }) W5 N/ v% `
9 G/ \- ^6 S. X; f7 q8 G- V' T            ET0 = 1;            //打开定时器0中断使能
7 J$ U3 S8 e8 C6 b* `            TR0 = 1;                    //定时器0开始计时( a1 b- j& z& J: T- }
            EA = 1;             //打开总中断使能5 B/ ^4 G. q0 w
    }
7 K: S! N9 E: k) `
1 L6 I' `9 e: `% ~$ G' R    void TIME0_IRQ_Handler() interrupt 11 B/ x' U% e% o4 ^0 _
    {" [) u  i& ~/ y# `- g
            static uint16 tmr10ms = 0;
$ L3 @7 o: C  k7 S- T& O! |! G            static uint8  tmr3s = 0;9 o: {8 Y! L/ u- B* B
            static uint8  tmr5s = 0;
0 `0 q' [3 [1 n6 V* Q, H            static uint8 a = 0;- E& X+ I) Y( Z. t1 Q0 L) U
0 D# k9 I: F3 {
            TL0 = (65535 - 11059) % 256;                    //设置定时初值/ v+ Y6 s* @- O+ F& N! j% V
            TH0 = (65535 - 11059) / 256;                     //设置定时初值
8 T- d2 n! [) W+ b2 p
8 f2 T1 \% m0 ?" }, ^            //1ms溢出一次
- G  e( R$ ^0 d) A' g            tmr10ms++;
# K! q  Y( E1 L3 N1 k' f3 ?# q# f, [  }3 P4 D/ i  \9 S' ]0 _
            if(a)3 L' ]" c8 i$ y* ?+ t! h
            {1 z8 ^8 f7 }) J+ `' O
                    if(tmr10ms >= 500)1 U' M- E+ H6 L& p
                    {& |. p! Z( h- m: a
                            tmr10ms = 0;3 |  |$ E& m* U) l* [0 B
                            DATA4 = ~DATA4;//500ms闪烁依次
" ~' Z& A+ Q. Z1 `, Z. s7 X                            tmr3s++;$ ]# h  C  S" ]0 q; b
                    }) R* R, D# [3 f* K1 `- l
, a. G7 q% m6 B% }
                    if(tmr3s >= 6)
; }! K- c  b; q0 n8 p                    {/ k' b# X6 q9 }; L$ O
                        tmr3s = 0; //闪烁3次( H& n' C1 Z" Y* f" i' L2 p
                            a = 0;
( G  j' O& H( ~) Z                    }
' E1 D; c) g, d                            ) |( w3 E7 \  `: }# O; m
            }
+ q. }# u- i  d3 A$ q" i            else4 M) n1 |  ^0 U1 C3 t7 _7 b) G
            {
% V0 B% _. J- Y+ `4 f/ \                    if(tmr10ms >= 500)& N& z9 {; g/ B+ i/ U; ^
                    {3 O* C2 l6 ?7 ]! y1 e
                            tmr10ms = 0;
/ n' n+ e( k' [% G0 S) u( R                            DATA4 = 0; //亮5秒) J3 M/ N5 m" @4 e5 k
                            tmr5s++;
: \2 m# Q) j& a2 u' o* T                    }# |8 h4 K* ]! `/ g& T

( _( b8 O# L; Z7 x) d/ q                    if(tmr5s >= 10)
3 \& ~& D6 [4 F' B% x" f4 g; Q                    {
" t8 w3 q- P0 ]& q" P- t1 N                        tmr5s = 0;
9 i; M; |" `1 H7 v8 [& l/ w7 R                            a = 1;
9 b. ^9 `7 |: R5 L: f                    }         $ n& E6 u+ \5 |/ u( S5 P8 u7 z1 D
            }                                
+ Q2 O& {: g9 N, f) O) \" f    }
& m: B1 M# G4 w2 S+ _* Z- R( l5 \& z5 Z
  • TA的每日心情
    开心
    2023-6-2 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-5-24 13:23 | 只看该作者
    很不错的分享,值得收藏/ O6 \% M4 J* `

    该用户从未签到

    3#
    发表于 2022-5-24 13:32 | 只看该作者
    很不错的分享,Thanks♪(・ω・)ノ

    该用户从未签到

    4#
    发表于 2022-5-24 14:44 | 只看该作者
    了解了解。学习学习。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-8 23:02 , Processed in 0.218750 second(s), 23 queries , Gzip On.

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

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

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