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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
大家都见过电子灯箱吧,就是路边那种闪烁的,这种东西的逻辑控制很简单,就是周边流水灯循环跑马灯,正转10圈,反转10圈,然后同时闪烁3秒,中间的字体是亮5秒,闪烁3秒,依次循环,逻辑不难,我们用开发板上的小灯来实现这样的效果,代码如下:大家都见过电子灯箱吧,就是路边那种闪烁的,这种东西的逻辑控制很简单,就是周边流水灯循环跑马灯,正转10圈,反转10圈,然后同时闪烁3秒,中间的字体是亮5秒,闪烁3秒,依次循环,逻辑不难,我们用开发板上的小灯来实现这样的效果,代码如下:; s& p/ v; S! n' C7 E
' o# v, v( M0 m
    /********************************************************
% z3 ~6 v: I) w# B5 k    *描述:8组小灯正转10圈,反转10圈,常亮5秒,闪烁3秒,依次循环% s& _. G2 }' z: y/ D
    ********************************************************/' ]+ _1 [! `3 B6 f: I' _
    #include "stc15w.h"
1 ~$ e% B4 |4 S: s    #include "intrins.h" //包含左移和右移指令
/ y! d3 i6 D0 Q6 A    #include "string.h"         //字符串
& P0 I: i* B) `- }    #include "stdio.h"         //标准输入输出
- w) ?! I/ R. j3 k( Q" e  y6 s" j' q8 o5 K1 z

, A+ n: t8 Y# b. O
7 c5 b' V- r7 t: i1 F6 S    /*******************************************************************************
: |/ {( s5 E0 \, w" U    * 文件名:位定义
4 S9 s- U# }+ P    * 描  述:
8 M" m7 |$ D% k7 M: s! U    * 功  能:- I* M8 R' Z2 d! Z5 f7 G
    * 作  者:大核桃. t, l& O. N' j6 l  P( k- Y
    * 版本号:1.0.1(2017.05.23)9 d2 y* G) `) h' \3 v& w
    *******************************************************************************/5 J/ d. G* Q5 K/ R- L4 `

' y2 C. E2 E% Q( G2 n4 U' z    bit flag500ms = 0;//500ms翻转一次
* h! Z" X) n' M* O, T$ X+ Q* u' a' Y2 ^6 E( }# S3 i; `5 _
    sbit LED0 = P1^0;//: @" H+ `4 r! C6 b6 c/ K" |
    sbit LED1 = P1^1;
7 O2 P5 W" @6 Y# {    sbit LED2 = P1^2;
" j* Y5 V- Z. h! ~    sbit LED3 = P1^3;
# w4 l3 z* g; z, r( A5 [    sbit LED4 = P1^4;
- s, k" F. b  g  v9 K0 D3 ^' A, P* f    sbit LED5 = P3^2;
0 ]. D* q$ b' k    sbit LED6 = P0^0;
, F2 B" \' K( S    sbit LED7 = P0^1;% D& F2 _- y& ^& K7 b3 Y5 {& H
/ p8 d  z* N2 B# [7 u- s5 m' K2 E( _, f
    sbit DATA0 = P2^0;//# H! X5 Z* d4 b. U& G
    sbit DATA1 = P2^1;//9 o) q* [2 u( Y# Q
    sbit DATA2 = P2^2;//6 V& o' f$ p( ?. Y0 I9 O
    sbit DATA3 = P2^3;//
/ \8 F: n; F6 y- G3 E    sbit DATA4 = P2^4;//
; H8 S+ H" F" S% P    sbit DATA5 = P2^5;//
/ O5 |. b! v  ]8 I. J3 o    sbit DATA6 = P2^6;//0 \* s% E" L1 B' e7 O' Z
    sbit DATA7 = P2^7;//
# b0 L- Z/ U7 l; K0 e* [( w
3 Y2 H: Q$ n$ {' b    typedef unsigned char uint8;//0-255! X( n- B  U& Y$ _/ ^
    typedef unsigned int  uint16;//0-65535" ?0 l) m& M, x& z+ p% m' V6 Q
    typedef unsigned long uint32;//0-65535*65535" c( y5 W: [2 ^9 r9 z; g
3 k9 l9 ~- s* _: ~/ o
    /*******************************************************************************  H& E9 m6 w0 G, @
    * 文件名:函数前置声明) ^' a6 v( h/ Z  O; }% t
    * 描  述:
2 m, u/ b. m; F* P# A) [    * 功  能:6 V- g# [# n. v! y
    * 作  者:大核桃5 ~" x/ G0 |: M0 Y% i5 j& ]% W* f
    * 版本号:1.0.1(2017.05.23)( T0 r9 M3 W) \$ q9 \
    *******************************************************************************/) v! ]7 e7 h; Y6 P

4 }2 I& J# R! c# |6 D* w    void Bsp_Power_Init(void);  J5 m2 O: q) ^: G3 b4 r1 T
    void Delay500ms();                //@11.0592MHz
3 f$ c$ D6 p9 ?2 W    void Timer0Init(void);                //1毫秒@11.0592MHz
, K( _+ D4 {6 |) n  a) X
4 [+ m+ `. ]; w( f8 ]
/ C. f4 F$ m! R4 ~+ q$ _( |8 k! u0 V& R) O  z6 C" i2 |1 Q
    /*******************************************************************************: h9 p" S! |/ Y- E  N7 P
    * 文件名:主循环入口% m2 O' o' J  [4 @6 R3 p, m
    * 描  述:" c' ?, i% [1 z# v$ v. i
    * 功  能:
0 T8 V* l* k) D! K    * 作  者:大核桃* E8 V" v- r/ R6 N  s( h
    * 版本号:1.0.1(2017.05.23)' q3 f6 G& K1 C! t6 B
    *******************************************************************************/
3 ?, s1 c1 n# k( ]% ~    void main(void)
; O4 s* q( T6 j5 _; d    {
& R4 V: F  D# Z0 g            uint8 i = 0;9 G5 f, V0 z% @
1 w1 A, c, ]: e
            Bsp_Power_Init();//LED端口初始化( ]% P( S2 J& V! Y6 i
            Timer0Init();    //定时器0初始化函数
* I  U; @) N, N3 G4 c% m" J( a* w
6 o9 k# o1 j4 M            LED0 = 1;: P0 j" }& x! t& ~4 ~. V" G- F
" N( l" d1 h( l# x

$ `; N) t- V3 r1 H. X            while(1)& O* V" S0 f, g; ^  p
            {! k7 _: ~- X* k0 R- B4 x# }
               for(i = 0; i < 3; i++)
* B! `5 M$ p3 K$ j               {* g" q" w6 I/ L8 s% L
                            DATA0 = 0;
( V) ~8 j7 k- w% X0 Z( `                            Delay500ms();% K% u  O5 I  E9 \/ \
                            DATA0 = 1;
4 @4 s% }- J) ^6 E                            Delay500ms();5 W% ?0 T9 ~6 Q1 j# B8 H

5 U* _, K3 S2 ^                            DATA1 = 0;
8 ~* H* e2 Y2 J# k3 q  t* o                            Delay500ms();
: w! u9 N) v/ N                            DATA1 = 1;
: j/ w/ T& f  l; T" G5 }/ Z; N  F                            Delay500ms();
5 {5 H0 U5 k" _' i  h
; h7 `: ], j, o+ z4 {                            DATA2 = 0;" o# X" s& O8 v% Z* h- @/ ~! L
                            Delay500ms();4 ]0 O+ a/ X4 f: \
                            DATA2 = 1;
$ C9 Z) z2 ?, W* k& j                            Delay500ms();
0 F* h, c2 }% N" k) o8 N
0 ~+ O" {$ h# Z4 w# @               }, R# ^- O: X3 }" X; P

1 q. c" Y$ V2 a, J: B2 A" _                       for(i = 0; i < 3; i++)
. _! \7 F# `5 p/ `9 ?( d9 |               {$ ~9 a5 g& N; D) Y7 i
                            DATA2 = 0;
' Y% D1 j+ B9 f. m, b9 a& U: e; x                            Delay500ms();3 C9 t# p, M/ F! N1 Y. s
                            DATA2 = 1;
) a6 y. w; [$ q+ \) U                            Delay500ms();! u! p( h3 q' Q) }2 w6 k" D+ Z
& g% ]4 j: U8 e
                            DATA1 = 0;
; c1 P3 [6 E* @" \) f, }                            Delay500ms();
8 ]7 d  M) \  q                            DATA1 = 1;
4 X0 F' H9 ~8 A6 w2 H! ?( A5 T2 U                            Delay500ms();
4 i9 z$ o' ~0 t
1 K$ I% }. P. Z% d- T( U6 m                            DATA0 = 0;
0 n1 ?: ~$ N% U# N                            Delay500ms();
5 U/ t1 |+ x) t( A                            DATA0 = 1;! k7 E8 t6 f/ q7 [0 t
                            Delay500ms();
* K* K" f% O" T+ M+ E
1 D& W$ n' n/ Q4 D" N               }6 o; c( |* h$ D6 m0 V! ]
9 `# y& Z2 y, g. A! q$ \
                       for(i = 0; i < 3; i++)
- H( J2 y! ~8 l+ Y$ L8 A$ w0 W               {/ \5 \5 f1 t' x$ e$ h3 e& b
                            DATA2 = 0;
/ u; T' I, }. e$ S7 e% D                            DATA1 = 0;7 O- q3 i8 g* B
                            DATA0 = 0;0 F* [& a- }/ e! z& h0 Y9 Q& U
                            Delay500ms();: n6 }. H* e$ S7 y) p6 ^/ P
- c8 K* e4 f/ Z! J
                            DATA2 = 1;, f. f% e; o; V, u
                            DATA1 = 1;1 _3 }& j1 P& P1 R
                            DATA0 = 1;
# Y1 [! u! L  U4 A* r6 k& l& B                            Delay500ms();! m+ e! d9 z2 k3 c& v6 U  o: A
5 Z2 R5 ?& i, [' P- k2 z, K
               }, n' s% I, F6 c3 ^3 M* }
            }1 O" i- C' k/ p3 @4 u( u) {  i1 C! f6 B3 j

2 n1 S8 }- p) n; A. u( i    }
3 J" G. g- P( O, Y' t$ q; s: E/ L/ G& k7 v/ _7 o
    /*******************************************************************************; v# l5 ?2 B! f
    * 文件名:void Bsp_Power_Init()6 V3 w# A% s" R1 N/ N/ P' l: E  S7 n
    * 描  述: 数码管上电显示
; v& c3 B/ I! j5 d! n0 Z' s    * 功  能:编程模块化
: F6 z/ w( s8 D5 `6 s    * 作  者:大核桃$ ^, z5 A/ |4 j+ o7 ]( {  O
    * 版本号:1.0.1(2017.05.23)
4 [: v& O2 b8 A1 a2 V; d4 K    *******************************************************************************/( R' T( P4 c; E  @" o0 _% v
    void Bsp_Power_Init(void): D; |+ J( E# J: d
    {
- |. D" E1 k7 N! [            P0M1 = 0xFC;
/ K8 C0 t7 O9 B8 s8 o, F            P0M0 = 0X03;
" Z+ b" Y4 V/ z; m            P0 = 0X00;
& j& z* j& u) P9 ]6 a& I. x8 H7 X4 N" U' F7 Y" ^9 I% [
            P1M1 = 0xE0;! x. e8 w: C7 u6 r
            P1M0 = 0X1F;
* y$ n7 ^5 J; T4 y6 q3 r7 t3 t) ^            P1 = 0X00;
+ p* x. Q  t  {+ m/ b; }  b- _8 \9 t/ R
0 b5 K3 k0 w% H# M, \0 R3 K! f
            //P2口开漏输出0 U0 y. N  A$ y1 t1 M6 y# L3 y
            P2M1 = 0XFF;+ G& P- G" w# I5 ^8 n
            P2M0 = 0XFF;
3 Z9 ?; t: k# L0 G) v            P2 = 0Xff;( W# t% G! U) |+ C
    //        //P54,P55口为推挽输出) h! K+ W6 ~. {: H3 N6 v
            P5M1 = 0X00;( F2 ~) `* \, X, Y
            P5M0 = 0X00;  g" E$ c7 c( d+ y
            P5 = 0xFF;% @0 E& k- L. N1 Y

7 H% J+ h1 _: y1 m- D            //P37,P36,3.2,P3.3 P3.4口为推挽输出
9 t/ C+ V; i# n/ C2 J: b: a  K$ M' B            P3M1 = 0X00;
' `# r' |0 P$ v  i2 o0 U$ \            P3M0 = 0XFC;; F/ g* y& o) w- R
            P3 = 0X23;7 Y; _8 i: s' a9 E
. ?7 t# @! R$ w4 |; g
    }
; a: [0 A: k% S/ X! w" g
: h4 d. V1 |! W3 W- E- s9 _    /*******************************************************************************8 E; c8 J6 ?. n: p
    * 文件名:void Delay500ms()                //@11.0592MHz9 Q& ^7 m+ i3 D7 _$ ^; R
    * 描  述: 普通延时函数
; T4 T6 ?- S% s: v3 F+ w    * 功  能:编程模块化! u0 p6 _/ {9 ?' Z
    * 作  者:大核桃
- u1 @! N1 t- ~: E( D    * 版本号:1.0.1(2017.05.23)
9 H; q( `! L  V    *******************************************************************************/
9 T3 I' g2 z# v0 d' X    void Delay500ms()                //@11.0592MHz
' O8 t8 e6 {+ U% m/ d1 h& o    {7 L) h- |$ R, P8 u4 u6 x7 u
            unsigned char i, j, k;
3 q' X7 R* [+ k8 ~$ l6 ~: J1 A, ~% M/ k  ?6 S3 ?
            _nop_();
4 S) N3 s, b; \- Y  Q8 d            _nop_();) U: L3 K1 B7 ?$ x3 d
            i = 22;
. x7 E+ H4 c1 D2 P! y, J            j = 3;, o7 B( G; L. Q
            k = 227;
9 u/ `6 s3 b  \9 Q) c* Y) D( ]  j            do8 c. H! h- K; C0 e' {
            {& O. G/ B( g' z) r2 Y
                    do& q3 f7 ]+ ?8 s* |6 Q0 [
                    {9 \- ?/ Y5 I% u: w7 i2 E6 W
                            while (--k);& l8 F0 ]$ c0 D5 s  x7 V
                    } while (--j);. F* g8 S* \9 Y+ a, E0 e
            } while (--i);
  {' N3 C8 q  a, P; E  U( P    }3 s9 r3 d. n; e# ^/ n
1 f  d: v2 w' w. |
    /*******************************************************************************: d" {8 @$ i/ t( |0 L- n' j
    * 文件名:void Timer0Init(void)
' @$ @# i) C0 k) W    * 描  述: 定时器0配置, }+ Z, r2 i4 [: W( A& O
    * 功  能:编程模块化8 ~' ]$ E3 E% B7 \8 E
    * 作  者:大核桃5 k/ ?- B( I! T5 s- u! W
    * 版本号:1.0.1(2017.05.23)9 v6 g* W, Q- i# N6 J! y
    *******************************************************************************/
: e5 h3 n  t/ b* _    void Timer0Init(void)                //1毫秒@11.0592MHz
- }6 f- s, I- Z8 N* j0 e! b9 u, {    {6 h' ]6 J1 a4 ^& z1 x
            AUXR |= 0x80;                //定时器时钟1T模式
2 l1 X; e4 z1 M  z' e            TMOD &= 0xF0;                //设置定时器模式 1111_
) |( j: ?" u; n0 k0 g            TMOD |= 0X01;       //16位模式,不可重装
% P+ T4 [! I* `: B* ]4 f3 ]' b7 r1 }
# W+ N8 N- n- g9 a- ?    //        TL0 = 0xCD;                    //设置定时初值
' d$ @! ?& o. F5 \0 ?    //        TH0 = 0xD4;                     //设置定时初值
3 k/ r: T( h  ]" J" K( W) ]$ ]- o" p9 j& e! x4 Y# d5 }1 w
            TL0 = (65535 - 11059) % 256;                    //设置定时初值9 i0 Y1 o) _& s, Z6 e* U
            TH0 = (65535 - 11059) / 256;                     //设置定时初值
% E# f6 w% P; r7 M# b2 \
& q) c/ b" f* u, F
' j: f' v' U. c1 G7 v& O  Y            ET0 = 1;            //打开定时器0中断使能6 ^0 {9 A2 r; O! Y, W) A
            TR0 = 1;                    //定时器0开始计时% u; G8 ]+ o% h- R# m6 T  t: f
            EA = 1;             //打开总中断使能4 H1 G# r5 r4 v) `6 V6 [0 b
    }' k0 ~, s( X9 M! b2 K

8 Z# p. ^/ W3 a/ s  P; q    void TIME0_IRQ_Handler() interrupt 1
6 Y: H8 n4 R4 k7 u7 S+ D5 J7 Z! V+ C    {+ [7 w' o% k; V1 d
            static uint16 tmr10ms = 0;5 A$ o$ f7 M: c$ i" ~$ B' O6 G/ I
            static uint8  tmr3s = 0;
5 Q, B7 b. s( {# F+ {9 ~            static uint8  tmr5s = 0;
0 @( c+ E' P* d0 b/ Q" h! f            static uint8 a = 0;% t' M9 f4 M( ^% I; F' m% W' g( ]
, M" G3 `% G, S( K8 t: S1 ^) ^" A
            TL0 = (65535 - 11059) % 256;                    //设置定时初值4 ~/ x7 P+ l0 j: L. V# h. R2 S
            TH0 = (65535 - 11059) / 256;                     //设置定时初值2 ?' D2 I: N1 z* ]" [3 J) ~

+ T- D4 w7 Y" u0 z9 j# K7 i            //1ms溢出一次9 ?- x$ B! R, `0 o) M5 Q
            tmr10ms++;  t, v' P1 P+ L7 r
3 R& Z3 d, C. ^0 O! c2 _
            if(a)7 J6 T* a3 r. A6 B' ]5 c; k, z
            {
' k1 V: ]3 _9 m1 b                    if(tmr10ms >= 500)/ m# Q# U6 f8 W  o* r( y2 x
                    {
2 ?- t, S1 x% S! k                            tmr10ms = 0;4 l$ |4 S# P' y, j9 A: m
                            DATA4 = ~DATA4;//500ms闪烁依次- L6 a( I$ e: Y4 Y% `1 f
                            tmr3s++;
# f3 X' Q- W& E                    }
  c4 s3 C/ u# I  S/ J! ?+ C' h( v, [. B& k; D
                    if(tmr3s >= 6)
9 x0 a0 B7 c$ w1 _: |% z$ {/ ^                    {
( [7 A' U/ _0 \% ]4 Y9 t* H                        tmr3s = 0; //闪烁3次
6 E  A- q( g3 n1 _2 A% ~                            a = 0;% e6 \9 g5 Z( f2 X* m6 U
                    }
, }+ a: N. _' u( r8 n5 B- P- S                            : @: x7 I' B* H7 R' q
            }
, o; t: q+ Q, s' U& _/ ^' O            else! C: \/ T' Q( N
            {
! _6 m) x# o6 n+ L3 _7 @                    if(tmr10ms >= 500)
! ^2 N; f7 E# |) i0 P                    {% o" n/ Z( w4 w# u% V, w
                            tmr10ms = 0;
7 u0 S* Z1 p; ]6 l6 P3 B) F5 t9 _                            DATA4 = 0; //亮5秒
5 Z1 W( e5 B/ `( j6 ]! {0 G                            tmr5s++;& j' q8 v* X6 I5 y) d8 ?' G+ X* L& y
                    }
) u) E- C; n+ O1 V  n- N/ f6 G' a) x+ M, `3 h/ d: v
                    if(tmr5s >= 10)8 {8 X: [  @% N: b2 [4 {
                    {
8 F! C6 f3 H  M6 S: J' ~$ j                        tmr5s = 0;0 c, W/ N2 ]& V8 {6 N2 W1 v
                            a = 1;. j) t' v3 L  |8 r5 J% E5 ]
                    }         
, p+ e/ h  o6 G: x            }                                
4 }, H7 t) {  S: c0 Q, k3 s# E    }
; V1 Z# ]8 ~9 F
" D( s, J' a. N& D0 A; l
  • TA的每日心情
    开心
    2023-6-2 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-5-24 13:23 | 只看该作者
    很不错的分享,值得收藏
    3 C& L( B7 ~$ g& A

    该用户从未签到

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

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-11 12:41 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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