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

单片机走马灯程序和仿真设计完整版

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机走马灯程序和仿真设计完整版

& ?4 I, X: I$ ^& g/ B- q走马灯程序设计完整版
; F( Q6 k; b" N8 K6 h, R" d
单片机仿真原理图:
( x7 F8 L, m& e4 J. [( W   [8 b4 m& w, c% E( q( P
# I/ O7 g! P) o

- o8 d. }5 \% P. {( N2 U2 Y7 u$ D% P- f1 }0 M7 j
单片机源程序:
9 @6 j1 x! y; u5 _) f) e8 F: T#include <REG52.H>7 q2 ?' d/ t# {
unsigned char RunMode;
  ]5 M" O$ ~1 V' l  }$ v' u//**********************************System Fuction*************************************************
1 L  R0 K' M' v3 e; ~/ Wvoid Delay1ms(unsigned int count)
- N, T6 F" [1 |{- Z0 [, ?: i+ L6 F- ?4 G: m# i' q8 t
        unsigned int i,j;
7 D. n% p; S8 K* Q        for(i=0;i<count;i++)
" g# x% S! }- p+ X3 C: @. U: J        for(j=0;j<120;j++);: N5 g7 e. I% g$ m2 x  m/ e
}

9 u, d  H1 q$ T8 i; Q4 }( Tunsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,        //0~7
: R) c1 m+ }% _$ k" J; J                                                          0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};

; I& h1 Z5 `9 ~1 w) f& ~void Display(unsigned char Value)) g# W& ^9 d# `! I, {( c5 b! A
{" y; n* d* x, I2 u8 n% O
        P3 = LEDDisplayCode[Value];
( t! C3 R  j% w1 z' \}

; e; @' [8 G* ]+ @) D0 Dvoid LEDFlash(unsigned char Count)' u' U5 ]* P1 {9 I
{
3 r# R% Q. B  U2 b2 p: ~1 f/ u+ T1 n' A        unsigned char i;
4 m) {2 H# U3 Y7 P7 s3 U" E% j3 T        bit Flag;
* V0 O; \  |: ~+ Y' Z        for(i = 0; i<Count;i++)
: U8 k, z; s3 A  Q, M        {
# t* J: n4 \) E* B$ o; N" r( f! O                Flag = !Flag;9 x! ]4 ~! j; ~- M) ~/ A" h* Y
                if(Flag)
: `' o* g! J" B0 Z' S                        Display(RunMode);
; _( Q0 J, G/ R: R                else
* e! F& u9 o, {6 X                        Display(0x10);8 J, B$ A) ~' U
                Delay1ms(100);& }" Y4 E! t# W# e# W
        }1 b5 l* ~' t+ w
        Display(RunMode);8 P$ W9 z/ P9 r4 g7 s
}

6 n4 F3 S+ }4 w  Nunsigned char GetKey(void): r2 \! B5 s3 L7 ?
{; x4 ^2 p1 h' s3 D# h
        unsigned char KeyTemp,CheckValue,Key = 0x00;+ C  K' x% H6 z8 q! C7 P4 O/ |
        CheckValue = P2&0x32;0 C( X% L* y4 C; g! G$ t  N* V
        if(CheckValue==0x32)# G1 y3 X6 V. Z$ {" Y: s/ p
                return 0x00;
5 d% T/ H3 o- r9 c7 X5 m4 a          M. f$ c8 z& G- a2 g5 p  S, Q+ ?
        Delay1ms(10);
( [& X) Z, W! c3 a6 b- }        KeyTemp = P2&0x32;2 n6 Q- c. y; }' U# j
        if(KeyTemp==CheckValue)
, f: [$ G' U1 u7 X% R                return 0x00;
' u# Y# d9 R3 O4 |, k/ D  K  J+ d
        if(!(CheckValue&0x02))& M# g7 c* E1 P2 ^# F" _
                Key|=0x01;
& Q( j2 \: i$ u0 B4 p8 H$ H        if(!(CheckValue&0x10))5 T# u8 ?  i6 k' T, s
                Key|=0x02;
& j' r: l) w+ b& l4 |  ^        if(!(CheckValue&0x20))
1 e$ O* O4 _9 A                Key|=0x04;, @  g9 X: T# A; L
        return Key;
  Q6 A8 a% j( @, [+ b. R8 \( p}
# k- Z; v9 V1 T' |, n
unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;
* \3 c0 v, [: Dvoid InitialTimer2(void)0 j0 p: y6 f1 u9 `3 s: b6 c! r
{
( v/ k, l8 v: H1 o  i5 G        T2CON  = 0x00;                        //16 Bit Auto-Reload Mode/ W* k# J1 A) ]* U& k' v2 {
         TH2 = RCAP2H = 0xFC;          //重装值,初始值        TL2 = RCAP2L = 0x18;  A1 `* P7 I5 W; V$ N6 t1 S& h7 @
        ET2=1;                                        //定时器 2 中断允许
) t% ]) D; \8 v; q: K) c+ g1 S        TR2 = 1;                                //定时器 2 启动/ }/ j( z  x+ Z2 G& F# z
        EA=1;% Z- Y- D# J8 Y& K5 [
}
% y/ }$ m8 ?( D3 Q1 O; j0 L1 i
unsigned int code SpeedCode[]={   1,   2,   3,   5,   8,  10,  14,  17,  20,  30,
6 r  Z5 w! [' p3 ]# }2 e" f% @                                                             40,  50,  60,  70,  80,  90, 100, 120, 140, 160," Z" p- h  O1 }7 r( `8 l1 {
                                                                180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30
" G6 L; J2 L* evoid SetSpeed(unsigned char Speed)
( X* Q! R5 l" C{% w; n7 c( o& h7 }" T. E' h+ N
        SystemSpeed =SpeedCode[Speed];+ g" z9 F) d6 ]2 Y, g4 M1 C) p
}
% n9 L! W2 O% u
void LEDShow(unsigned int LEDStatus)
6 ~0 V. s' f' j& ]{
1 {) C7 I2 i  n6 y( G% M        P1 = ~(LEDStatus&0x00FF);
. M) f2 L2 C' o9 ~" G        P0 = ~((LEDStatus>>8)&0x00FF);& U! `& V8 y# b( a! }9 {" J
}

' @% A$ s2 P" w# d2 M% d% svoid InitialCPU(void)
! R& e. Z3 X% w4 y{
; Q: W  c- D: l3 d- F+ Y% v' [        RunMode = 0x00;; {* p* z, J! l
        TimerCount = 0;
; R& }5 o/ r5 j4 B8 H: Q) t6 ]        SystemSpeedIndex = 10;
  ~7 S4 p1 n/ v0 j- k  S: G, N
        P1 = 0x00;
2 @' ?, q. L# L) q. U, R2 }        P0 = 0x00;
# i9 M# n: h! m- J; I& @        P2 = 0xFF;$ v$ M: j) Q& {# L% q  w
        P3 = 0x00;
) D& _2 K" p# b. Z; g( m& J        Delay1ms(500);" }* s/ {& a0 O0 ~% v' s# L) @
        P1 = 0xFF;
& I* F6 C8 Y6 l0 h( w        P0 = 0xFF;
8 f& L) [- z( ^$ Y1 ?        P2 = 0xFF;/ C* D2 P# W8 m; _
        P3 = 0xFF;2 w/ X: T: C) z0 X+ L
        SetSpeed(SystemSpeedIndex);
  u, _) Q) m1 G1 n( T        Display(RunMode);
: T4 v+ J0 s# T# B* `}

6 d* P7 ?. l2 E9 I( i//Mode 0( l$ J6 A, x7 o; U( s$ T9 E. R$ ], ~
unsigned int LEDIndex = 0;* G! d8 S/ V% S$ E" W, w
bit LEDDirection = 1,LEDFlag = 1;
- F) k7 [1 f: Uvoid Mode_0(void)9 L# M9 d0 A: w. [4 ?/ H7 ^* i; l
{
  m" u& |; t  c% G$ R        LEDShow(0x0001<<LEDIndex);
5 y) Q' R2 e; T' f" G        LEDIndex = (LEDIndex+1)%16;1 Q0 A0 G. J. F
}* ?; C! w( k2 {3 V$ H
//Mode 1% i5 J( J" U8 X7 X, B: r
void Mode_1(void)
5 g& [1 p" @0 m  Y4 n{  m$ B  ~( w( f/ p% o: h
        LEDShow(0x8000>>LEDIndex);
* g" c! [6 Z: V+ _2 w5 g: d6 ]. U' p        LEDIndex = (LEDIndex+1)%16;
6 `  I2 b4 z7 y+ p; P; Y' ~}+ c8 A1 M9 i6 }- E3 j
//Mode 2
2 z# L, l& Y5 l( H* svoid Mode_2(void); k( K1 a3 p/ t
{2 s& N+ \- Q7 S& t- S
        if(LEDDirection)
3 ~) o" Y8 O; v/ S                LEDShow(0x0001<<LEDIndex);
1 Q) t. V& k6 c  s) H+ g9 h        else1 `6 R) \7 K7 P3 j  _
                LEDShow(0x8000>>LEDIndex);
7 B- N2 x3 a7 o) m5 s        if(LEDIndex==15)
& Z$ k7 L4 `( n# F  M3 ?/ ?                LEDDirection = !LEDDirection;
1 \0 Z8 v$ o* b) Q+ x+ L   LEDIndex = (LEDIndex+1)%16;
$ X6 Q. k' V3 V* Y7 u}: t2 \9 O% j$ O- X  M0 X+ x
//Mode 3! E# ~. p* d+ R6 N
void Mode_3(void)
0 E  `8 X+ y8 F' l* r{
; }4 U: M4 Z1 a1 r2 d% i: |        if(LEDDirection)6 l& \0 l3 T: E/ c0 g0 R! ?, [- m
                LEDShow(~(0x0001<<LEDIndex));
& S5 K$ s% n( E% I" S  q3 G7 @9 e        else' Z9 i9 T! {# r2 h+ L2 C
                LEDShow(~(0x8000>>LEDIndex));
- Q+ g8 {' o; b        if(LEDIndex==15)7 P6 \# p4 z  m' K/ J
                LEDDirection = !LEDDirection;9 [: u' ]# u# C% Q9 o
   LEDIndex = (LEDIndex+1)%16;
0 m4 N; c) v5 A# u3 k1 ?8 i$ g}
' G4 @2 m2 N4 M$ j
//Mode 42 ^. S" c! p5 a0 Z; s
void Mode_4(void)
5 \  X7 E, _! G6 E8 L1 q{8 M3 ?' s- `" |1 t  x
        if(LEDDirection)9 b  Z; L, h+ R0 X9 J) E
        {9 p0 _( @  Y* M7 L' G7 u: k
                if(LEDFlag)% }) G- I- ]! C6 k
                        LEDShow(0xFFFE<<LEDIndex);
, Y- {' @: g, @! D( Z( b7 W                   else' R! h" D# ?+ Q( v3 R, A
                        LEDShow(~(0x7FFF>>LEDIndex));
8 Q" W1 n4 _, y3 T        }
2 C8 ?) D* B' c: R; v6 c        else! |, @4 q9 t1 P  _
        {
3 n, n9 p+ [, D1 Z; I8 W6 E                if(LEDFlag)
; \) U0 `4 A6 a6 D                        LEDShow(0x7FFF>>LEDIndex);
1 b+ O: e* H8 a# h. o( ]                else
% ?2 h5 `  G1 |) g* V' |. x2 Q                        LEDShow(~(0xFFFE<<LEDIndex));
- _# j% d- X7 T+ Y        }
9 K# ~, A! h+ Z+ j        if(LEDIndex==15)
) H$ g* D3 K0 k; Z        {
" z9 J- J8 B" s3 l                LEDDirection = !LEDDirection;! {* _  g! F2 T
                if(LEDDirection)        LEDFlag = !LEDFlag;7 q3 d( g5 T* o, {( C  Y3 L5 S
        }+ b  Q! J  Z- z/ n* b
           LEDIndex = (LEDIndex+1)%16;
7 |- o( R0 C5 w' [2 i}
) `  u% o! @  @5 Y& ]- E0 i
//Mode 58 ~" y- g& ]  W+ D
void Mode_5(void)
' Z( w0 Y! s; G# F{. L: F. q7 m1 ~& t8 l
        if(LEDDirection)& m3 Z% R& {, n
                LEDShow(0x000F<<LEDIndex);
6 d6 l/ `- |8 L3 m; R9 k        else
& S! v! j) [  k. {6 O                LEDShow(0xF000>>LEDIndex);& P2 n" j5 i( Q
        if(LEDIndex==15)8 C" C6 a% [' a, P3 r: L1 W& ~
                LEDDirection = !LEDDirection;
4 Z1 n6 _  N3 E# T6 M% t0 G* n; X0 I    LEDIndex = (LEDIndex+1)%16;
: T) ~- r! n4 ?) k1 H7 G. E}

) b( Q! n8 f( e; H3 m- j7 X- j- M//Mode 6
1 `) r" P6 Q1 d! x) Avoid Mode_6(void)7 C- {. E) Y7 E$ k" T- o) f! n
{
. t& d, g& R. l3 u        if(LEDDirection)
2 p# K5 N# t/ E8 D. ~" j: e                LEDShow(~(0x000F<<LEDIndex));
. F% D; |% r2 r        else( ]) m, x4 K! r
                LEDShow(~(0xF000>>LEDIndex));
- o( v  O8 \. `5 C5 t1 ?        if(LEDIndex==15)
1 d3 o0 E1 R! j# N; ^* b                LEDDirection = !LEDDirection;. x9 Z0 S: Z& x+ ?$ s6 f) }
           LEDIndex = (LEDIndex+1)%16;# v5 n/ w& F4 ^# z( n
}
5 Y6 b. v9 S$ f8 h7 Y" N2 x- p
//Mode 7, G0 X' {0 }) b0 M# r" o& E
void Mode_7(void); l5 R/ T, a; N) [  S1 ]
{$ }9 b/ L% B9 D
        if(LEDDirection)9 K) ~1 e! k! \
                LEDShow(0x003F<<LEDIndex);
; d* x4 u) a  r, F" V        else& U, o5 N% T$ a, A8 e: ?
                LEDShow(0xFC00>>LEDIndex);
% Z+ b; D3 {8 L4 V        if(LEDIndex==9)6 a: I! d+ d7 `0 U% S
                LEDDirection = !LEDDirection;* h' f) B* ^5 a: Q. r2 x
    LEDIndex = (LEDIndex+1)%10;: d9 g# g" x# E; Y0 g' {
}

( l  S2 d+ U2 r  F//Mode 8
3 v1 ^+ e! g8 ]! w1 xvoid Mode_8(void)
% C0 D3 P/ w, R1 w- W{
; G1 f3 M; [* I  j$ [# ~, ?0 p$ L        LEDShow(++LEDIndex);
: G) z4 }3 P6 `- e1 ?" Z}

+ W# P! j; q* W4 H1 L" a! V" _4 hvoid TimerEventRun(void)) D. z1 M* A7 o$ q' p
{; x$ o" c% T3 K4 H
        if(RunMode==0x00)" x9 c; ]' Z* I; t( C
        {1 p& N: c- d# \' O
                Mode_0();        
1 k' r# ~0 \! b% h5 D        }
# r& D; w: V3 X        else if(RunMode ==0x01)
% k( m% F; J3 u  t) W# k4 s        {1 f+ @; }  u+ T: W
                Mode_1();2 n4 C7 r/ a! s; ?4 W% f
        }9 `* v5 b- n/ R3 O. ~' I
        else if(RunMode ==0x02)! j! a# M+ x7 v& u6 `1 B: D4 P
        {
2 L+ q+ E$ k* \! c( K& |4 k$ S7 B                Mode_2();0 e% _' d" p* K+ H
        }2 P1 h0 E) o/ i8 G2 r/ D. {
        else if(RunMode ==0x03)
0 a3 `' I+ k* q4 Q9 m/ Y        {
8 v; P& ^+ `4 `1 c( d                Mode_3();: Z9 o6 f6 m9 o2 s
        }4 X8 p4 K5 i9 t9 w
        else if(RunMode ==0x04): b9 F* H1 q+ r: ^6 {
        {
, K# g+ v5 ?6 t7 a4 v% n                Mode_4();) J  E: A' x/ Y- J0 U8 z
        }3 V8 N3 M  c' ?& c" \7 @. n
        else if(RunMode ==0x05)- i' z( w$ y( f2 ?2 K6 h; Y: s
        {1 q+ L# e8 l* Z" z' j
                Mode_5();
8 {. y; `" [1 @4 D0 n        }% u# N' n: A# q- Y5 r% P' d& O' C
        else if(RunMode ==0x06)
6 F0 r2 }* i% r% u$ x        {
/ L) M" b8 G' }, S  N* y- J                Mode_6();
9 Q9 K9 d& C1 @' k$ Z. ]3 X        }
/ M1 M) t/ {6 H9 o! Q5 v        else if(RunMode ==0x07)
. s# D2 a- f6 N: J% v. j' q        {
! M- {& s- t+ ^% r5 L                Mode_7();
. s$ h7 Q* }5 x$ A7 M        }7 J5 L: P! o7 I
        else if(RunMode ==0x08), Q, ?( E4 h1 g1 a2 b: b) T1 x" ^% K
        {
/ Z) S$ W: S$ I, T4 P4 A6 T- L                Mode_8();
' D+ s# d  ?7 g# f) j) T* X( D        }
/ X. S  T6 {9 ^0 q5 x}
9 r' |/ B7 i# U0 G
void Timer2(void) interrupt 5 using 3: S8 p) \: @- C  r
{( o3 @) X3 }6 u
        TF2 = 0;         //中断标志清除( Timer2 必须软件清标志!)
+ {  Z! M) w# y" l! z- n' G        if(++TimerCount>=SystemSpeed)+ A' s* c. Q1 V# c( U
        {! N4 k8 ~  `* [% H% `- c' q
                TimerCount = 0;5 e8 s8 Z" S* t/ }5 h
                TimerEventRun();
' |6 [: o/ C1 H$ O2 k           }, E: _+ \2 v9 R' w. T
}
& ^, }4 k! w8 E7 H* |. Wunsigned char MusicIndex = 0;
- i" N( T6 D9 Pvoid KeyDispose(unsigned char Key)
! O# N$ S, U$ ?& N- G" v{
- u1 Y9 R- z4 |9 U5 \        if(Key&0x01)* o3 N. k+ N6 o8 L' y. l6 s# Q
        {+ _- B& V4 d3 J0 h6 J* T
                LEDDirection = 1;3 z8 Y) B- c# B' E0 _! j9 F
                LEDIndex = 0;
4 h$ j0 t: x& ?, O' F. E                LEDFlag = 1;
- D( T  t8 P1 R+ V/ y' E                RunMode = (RunMode+1)%9;4 z) Z, l# j' I* e+ @
                Display(RunMode);
/ S7 g, A5 R: g: e; t/ a        }
. H  [! ]. J6 \6 W        if(Key&0x02)
, A" A3 _* Q- K8 O; k7 K        {
# w3 [: t6 W& X                if(SystemSpeedIndex>0)- [2 z; p) x) P1 i
                {4 k- l* ]; N8 ^; T
                        --SystemSpeedIndex;/ X: v/ i, O1 a  K
                        SetSpeed(SystemSpeedIndex);/ S8 u# J% V) h: u
                }8 I. V+ x- P* k9 R3 }* D5 J+ E# c
                else9 r7 c: ~" W2 l4 [5 H
                {" S; Q5 m* ?  n# h1 x9 R
                        LEDFlash(6);0 }* |0 n; H$ Q) v
                }( a' c8 y0 c0 a2 @2 |: S' d9 C# L  V
        }3 q# l6 q/ P! O& y- y
        if(Key&0x04)! }* X: [9 {8 Z( N  w
        {8 H$ n, t/ W2 a8 J2 Q4 j
                if(SystemSpeedIndex<28)
' N5 Y, K; F" O$ m                {
# x0 j. ^& d* o8 ]" V' V                        ++SystemSpeedIndex;
$ o) |) A" v: t2 k                        SetSpeed(SystemSpeedIndex);8 s" A# X8 \) R1 A
                }
2 k2 a6 {+ z% G1 E                else& A' L0 z  Z" ^2 B7 s: @
                {
( ~7 j7 p2 Y, M  R/ |6 d1 S4 T* g% P                        LEDFlash(6);' T7 M& ?) H, T2 T
                }
! _4 _  K" h! P7 |; w6 c6 {        }        ( e+ a1 w. W# `! R( t
}
  [9 L2 o9 h( M
//***********************************************************************************
+ k) s2 k# L" Lmain()3 U' g1 U; m- G6 m& b
{
0 c5 q9 X( v7 b        unsigned char Key;
0 k0 A: \6 ~$ \$ \4 S        InitialCPU();2 b! Z: ?4 G# E: f. s' v# f
        InitialTimer2();
' }% O4 ~% F& \9 S" P
        while(1)
, K/ O, @& s. x0 ~: |+ G6 ]# _        {
( ?. @' `; U. R* s* Z" _; S                Key = GetKey();

0 z- S: B+ v! Y7 u& x3 C1 F
8 a% q0 J( |; [, _. x- d" d5 H8 C…………限于本文篇幅 余下代码请从论坛下载附件…………0 y+ r  D4 G' _- H- {
游客,如果您要查看本帖隐藏内容请回复

& ?( e8 |3 m, c
6 P+ ?0 _/ J# x  Y

; w3 u; b5 P4 G9 }. x

该用户从未签到

2#
发表于 2018-11-27 10:18 | 只看该作者
这简直就是大学时期的必修课啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-18 21:31 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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