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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机走马灯程序和仿真设计完整版
* {: F: r  m" C; u; m  m2 L, \
走马灯程序设计完整版5 F8 ]* k! w/ ~& N6 U
单片机仿真原理图:0 ?3 N; ]8 D! w& F% m

3 X9 P  [/ V) V% L/ R) E% g& F% {3 J3 _" z8 t6 e

7 [( P* K, L; |0 _& j7 B
$ @0 s1 y3 g9 K3 q& s" D; W单片机源程序:
1 j) [! ~. e; a& p+ R( T#include <REG52.H>
8 z8 Q' ?9 C: s6 Cunsigned char RunMode;; l2 F* p  s) ~/ P$ E
//**********************************System Fuction*************************************************
+ T6 W5 X3 X8 _  Z8 F3 Q! N" Gvoid Delay1ms(unsigned int count)
) i8 C6 q8 Z2 ?3 }{) b0 w( z+ s: o1 y9 U" l' Y6 s; g* L
        unsigned int i,j;0 ?9 @, E4 p/ `( B. T  R
        for(i=0;i<count;i++)
) }" |; f& S" w2 S% `2 _        for(j=0;j<120;j++);7 B9 r9 c0 a( `
}
1 Y  `8 M. v2 w1 g# K
unsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,        //0~7
  x5 s- a# Q. _6 E( D  s9 n                                                          0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
) P" `& R" ]% [/ w
void Display(unsigned char Value)
# `# L# Y9 c, v$ @. a9 l{6 O4 K) |* @% O. F( l0 w1 T
        P3 = LEDDisplayCode[Value];9 M7 M2 J& i; t$ X
}
& ]) c/ E! U2 M' P2 V
void LEDFlash(unsigned char Count); J3 d; H; F; l6 V$ L$ f
{
, R8 Q8 T) n/ k2 x  Y' t        unsigned char i;
/ k- k( d. V4 s2 `' y; F9 Q% P        bit Flag;9 ?* F8 ?/ }7 @4 p. u; G! R1 z
        for(i = 0; i<Count;i++)
& J0 O8 w; r2 b/ p  y; u        {
( ?. T' D' f# B* ]5 P9 c                Flag = !Flag;4 s$ R. M# W+ Q' A. ]# h* N- X0 }
                if(Flag); j3 A3 ?% e( ^5 A! p
                        Display(RunMode);0 a2 D4 Y3 T2 s3 i
                else5 n3 N3 [1 M7 l. [
                        Display(0x10);
1 h7 U" W2 x, o; U% n5 G                Delay1ms(100);1 L) g  P5 r" m3 P/ U
        }6 ?3 {/ S+ @: r) Q
        Display(RunMode);
" c. M2 {" I  [! T* p}
+ [7 y( {2 v, m: g! n3 [
unsigned char GetKey(void)
5 T) J( x( D( R8 @: ?4 e8 Y4 q{4 B" ^% W; m) l1 {# M, a: y5 L
        unsigned char KeyTemp,CheckValue,Key = 0x00;1 r) x/ L7 p3 [; M' f! `
        CheckValue = P2&0x32;" N* ~* b$ V) a
        if(CheckValue==0x32)
! }# C% C$ s+ m& s& t  p                return 0x00;  ^% t' [7 e5 s; v5 M* J4 B+ q
        2 H% F  N1 x9 z5 W" f# H
        Delay1ms(10);
  m5 U* H( i5 N0 P* J! t        KeyTemp = P2&0x32;
, }5 P% s& V. |  Z/ G- V- }        if(KeyTemp==CheckValue)8 I, E$ N2 T: i3 g  I1 c* @
                return 0x00;
/ L. u0 V4 h$ D; ~( s# f
        if(!(CheckValue&0x02))/ n& {/ R# |: s, w. Q) u% X5 E6 Z. t
                Key|=0x01;
7 E# H) s% [7 x  m" L        if(!(CheckValue&0x10))
8 Z) L7 ^' ]& L' P8 Q" n9 I! p4 R5 u* O                Key|=0x02;
* y( K& W" c; L3 X' Q5 o+ l        if(!(CheckValue&0x20))
1 H. Z  [' b) H7 o. i3 h2 c                Key|=0x04;- f0 H+ ^- z4 I1 |5 ?3 Y) F% }
        return Key;
+ \! X' b+ @8 S. ]" F3 c}

4 N* V8 ]& A9 ?1 `& ^1 eunsigned int TimerCount,SystemSpeed,SystemSpeedIndex;
3 B1 l! g% t5 n) |void InitialTimer2(void)$ z3 B1 X8 t3 k+ s( L  n9 @0 i
{
. r+ h" h5 e1 k  Q. I$ E        T2CON  = 0x00;                        //16 Bit Auto-Reload Mode
& _0 y, V' U4 a! _. H+ q2 F* q         TH2 = RCAP2H = 0xFC;          //重装值,初始值        TL2 = RCAP2L = 0x18;
; c( C  k" ^: ]$ G9 y        ET2=1;                                        //定时器 2 中断允许
' o6 u% i, X+ S( P& k. y( [        TR2 = 1;                                //定时器 2 启动
8 Q9 g1 Z$ L& l% Z+ q1 e        EA=1;
, s1 [3 ?1 f, X}
. m  B: Q4 m: L) c$ [0 O
unsigned int code SpeedCode[]={   1,   2,   3,   5,   8,  10,  14,  17,  20,  30,$ U2 g, [' O+ _
                                                             40,  50,  60,  70,  80,  90, 100, 120, 140, 160,
. _) ~8 W& H5 _& V8 x                                                                180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30) I: X. I' P, z# p* z0 O* X
void SetSpeed(unsigned char Speed)4 P4 e' F; O- t$ ]' e1 a; C) a( Z
{
- M+ f0 J$ q7 G4 J2 ~, Z        SystemSpeed =SpeedCode[Speed];6 r: Z& G5 z$ j- l$ r
}
6 h" {& n3 \& P2 ~
void LEDShow(unsigned int LEDStatus)
9 ^8 r7 O+ A4 y{
7 z+ I* h2 z' V% B$ [        P1 = ~(LEDStatus&0x00FF);
& S2 }, r" E% j        P0 = ~((LEDStatus>>8)&0x00FF);
. }# ]! o3 V; `( p}

- g$ \7 m: T& R0 T3 J! hvoid InitialCPU(void): b% M. r8 P' }5 L) K
{
2 \$ s1 _2 H- d0 R7 o( y! B        RunMode = 0x00;+ V: y" k2 L" W3 {5 p6 A0 R
        TimerCount = 0;
+ B# o* e; P% Q% B' p) z( E% J" B' x. N        SystemSpeedIndex = 10;
2 ^; \/ j: l& i5 P) c9 z) J  H
        P1 = 0x00;
- N6 C+ X  O* |8 g        P0 = 0x00;$ @; m& w3 P2 k& R! N/ o
        P2 = 0xFF;% z. c6 I) z0 M6 ^  a7 [
        P3 = 0x00;
/ Y% z3 D; B. n1 K6 a9 D        Delay1ms(500);$ b2 {" |) W9 s' R/ [
        P1 = 0xFF;- ?& `1 O7 C5 @+ ]4 n/ @
        P0 = 0xFF;
. u2 c1 c: Z9 ]/ M        P2 = 0xFF;4 ~# a: U1 k! ~) R( n
        P3 = 0xFF;7 x7 g' E# t# h- h, e$ u
        SetSpeed(SystemSpeedIndex);
4 X, l7 K' R' G! ~& ]" R7 M3 Z; j        Display(RunMode);/ @  B3 G* U# F8 }8 w* r5 _
}
7 _3 Z# p6 F7 S) Y8 B8 I7 i
//Mode 0
( b: q9 L+ V7 z$ S" G2 Yunsigned int LEDIndex = 0;
" M5 Q, S* H" N7 u+ m3 Q. Pbit LEDDirection = 1,LEDFlag = 1;
7 i' k' z7 w. Y7 }void Mode_0(void)4 Q/ P% g; D0 {( G) Z9 L
{3 J  v9 V( K0 f, X) l1 Y& z- q
        LEDShow(0x0001<<LEDIndex);
+ O5 k5 f3 s0 F: \; G# q        LEDIndex = (LEDIndex+1)%16;, W$ l! V1 D. r4 [* D# s
}- q6 u/ {$ ^6 h* t% U6 q- F
//Mode 1
* U) T, I4 ~' N( X- Vvoid Mode_1(void)9 y5 T6 K; T& M
{
- e/ x  g' d. T4 G9 j, w  r$ H1 r        LEDShow(0x8000>>LEDIndex);3 g' W% H- E% b, _
        LEDIndex = (LEDIndex+1)%16;
/ G  J; u+ C. U# \6 ~6 ^( |3 a0 X}
* u% V' C# g! ^# F//Mode 20 K0 B' }$ `8 o  _1 f$ T
void Mode_2(void)# J  e  P  b2 y; w
{
# _  m  b/ n$ |, |1 _# l9 Y& t  w, K        if(LEDDirection)" y% r7 B$ I* c% r, t( _# o9 }1 ~3 G$ m
                LEDShow(0x0001<<LEDIndex);
5 Z% o9 y1 x! j" j" }6 ?        else
! r0 C# B* j" q' |                LEDShow(0x8000>>LEDIndex);' K! b) s$ k/ S% F5 h" I
        if(LEDIndex==15)
7 A8 j2 A( i0 R9 F# ]                LEDDirection = !LEDDirection;
4 W3 R, w8 ~# W% `5 N   LEDIndex = (LEDIndex+1)%16;
1 i7 N, P  x: A, Z- ?9 {}3 k% d: }: Z. B& l  M/ s
//Mode 36 k4 L# v, x7 b# o7 P  A
void Mode_3(void)
1 W: G- ?  N6 G" r0 G0 ?. D2 I9 x{
8 k/ V5 A' U( C- n7 i        if(LEDDirection): g; g3 f$ p: M) [1 A
                LEDShow(~(0x0001<<LEDIndex));$ E# |' W( Y1 J2 x
        else
. c/ G! G% Q* [  z( E9 [6 v                LEDShow(~(0x8000>>LEDIndex));
, X9 T2 J. C" e        if(LEDIndex==15)
3 L7 M+ `  ~$ U: s                LEDDirection = !LEDDirection;
* x$ g3 K. R. U) P' }/ X   LEDIndex = (LEDIndex+1)%16;
9 u) I7 m" ~: \4 h& G}

/ s3 J8 E+ e% k5 n//Mode 4. F# w" l4 r6 ]1 M1 u& w
void Mode_4(void)
& q" [, M9 j1 M2 q3 [{
+ e7 S4 b3 g; h$ g0 v! M" O- l% M        if(LEDDirection)
7 M3 T& B( o5 y6 B        {/ J  W% c2 D# k4 j+ z8 o
                if(LEDFlag), T& s: z/ N5 E0 v$ B
                        LEDShow(0xFFFE<<LEDIndex);) o+ Y, a- m: \& S" C5 y
                   else
. m$ O+ M  N( w) a' \6 B                        LEDShow(~(0x7FFF>>LEDIndex));& T1 f1 j: Y( O. ~, l: ^- b1 P
        }
& K! e! @, T; y. X, q        else
$ H& ~$ R) g) G( G4 w3 I, e! W        {* }: @6 s- x( ~  Z9 O+ W
                if(LEDFlag)* n8 c4 D4 o# K$ ?: A
                        LEDShow(0x7FFF>>LEDIndex);" S3 T) e5 i# Q" H6 V" l
                else
% v$ L+ @1 Q! M6 V1 b$ i                        LEDShow(~(0xFFFE<<LEDIndex));5 w1 s! [! }& `0 Z9 U
        }# y: Q1 y2 g  u# r
        if(LEDIndex==15)
* ?8 B! ?1 F$ n        {
- o1 n; @3 v1 _0 W6 O                LEDDirection = !LEDDirection;- z! U: j' R7 N8 {6 A3 a! R" `6 y
                if(LEDDirection)        LEDFlag = !LEDFlag;+ M; W  N) J6 z+ x, O" M* G
        }, J! K5 o& D: i% w. K- e
           LEDIndex = (LEDIndex+1)%16;
% [$ q/ I8 |1 V( {3 [}

2 Y% l' T5 g. Y6 [2 `# W//Mode 5+ b/ j6 r4 Z1 K& K
void Mode_5(void)
; c5 Q' K' Z' P# j+ d{
/ ?3 `+ o% t8 j6 T7 n        if(LEDDirection)
# t' ?" d; |! B% V                LEDShow(0x000F<<LEDIndex);# q5 y- N# z# q8 D
        else
' l# K+ ]- z0 E* n                LEDShow(0xF000>>LEDIndex);
/ `: |4 Y( I# [        if(LEDIndex==15). c: j& B, F9 N8 K# e2 K
                LEDDirection = !LEDDirection;
. `0 _2 J0 N) _2 G) z) p( L    LEDIndex = (LEDIndex+1)%16;# ?; {7 z5 |* n
}

- b# P$ g& X! q* t//Mode 6# C* E7 ?; d$ ]- g" z! P9 z: S
void Mode_6(void)
" ^4 `9 v1 q9 B4 k4 |8 R{5 N7 o% X) t9 h6 P
        if(LEDDirection)" ?* l2 q( e7 b3 I8 S  J: Q4 d
                LEDShow(~(0x000F<<LEDIndex));
; @& s8 x8 y+ L5 V0 |        else
; e( I' w0 g" k* o" t/ V8 _8 T                LEDShow(~(0xF000>>LEDIndex));5 W$ _6 b& h! a
        if(LEDIndex==15)5 o! |) E% r! D0 Z
                LEDDirection = !LEDDirection;
% y) s! n6 u0 x* D2 e/ f* ?5 c           LEDIndex = (LEDIndex+1)%16;+ ^& k& b) O3 L7 k$ V* d" ]6 ?
}

# n+ D7 }0 A+ L" ~  I" R2 ]% x2 |5 m//Mode 7
: C; t9 z# ^8 v* Avoid Mode_7(void)* M) w6 a  ^5 F
{
6 W  W4 \) b' }        if(LEDDirection)  ]3 M1 O7 D) Y( Q3 r( B
                LEDShow(0x003F<<LEDIndex);- k6 h8 Y6 I8 M( w8 W
        else4 d# m8 R4 J2 x; A% D0 Y+ ^
                LEDShow(0xFC00>>LEDIndex);$ l5 z; A' E( f" z
        if(LEDIndex==9)
" j$ @- w/ K0 B! n3 N. m1 Q                LEDDirection = !LEDDirection;# N9 `, X! i# u; D8 w
    LEDIndex = (LEDIndex+1)%10;
0 J2 {- G+ E7 A6 {}

  c7 w4 d8 `: T. X" T- r% X3 @4 A: w//Mode 8
. m. q. R+ n0 ~( [8 n6 F/ T0 uvoid Mode_8(void): s& w: S2 u; Y" `: \
{
! C3 h9 {* P  Z& B3 o" o/ ?        LEDShow(++LEDIndex);  a" b6 ?* G2 t# X
}

# w# V5 o- H2 V: L9 Y9 A. I* G  p0 c0 Pvoid TimerEventRun(void)
7 F9 K. C0 [. D; D( k( u! h& Q; B{
8 R0 j( c! ], h- e) T. _        if(RunMode==0x00)/ {3 U: v9 a7 g# U+ s' `9 _
        {
" a5 N  m# i. G, y, m9 M  H                Mode_0();        & q0 w! d" q' G/ m
        }, e, v% m) Z! X' {2 b
        else if(RunMode ==0x01)
* [  `5 |" n5 J( l' A/ \; ^7 {        {, o8 L5 W1 f5 y% s# U* }
                Mode_1();
' l+ M/ c# y& @. \2 l% S        }4 J4 l. Z" J3 ~$ |' L3 q# W
        else if(RunMode ==0x02)% C( m+ E4 a' b% E1 x0 I
        {: a' l6 g. j! D3 D! |4 J! P5 ~0 |
                Mode_2();
* w8 d: Z* W) C0 q# Z# p: M        }
4 Y# f4 l" `) r5 n! y6 g        else if(RunMode ==0x03)  y* T2 \- W' T
        {
& ?% u9 a, U( W                Mode_3();
+ X+ C4 |& K) c- K" E        }
& i( ^% Y/ I) \8 C- A" ~' V        else if(RunMode ==0x04). t5 |+ g$ F7 `8 {* g0 H% [
        {
! \! c5 p( K9 g$ S8 m                Mode_4();
* E* [) C7 X. Y% H        }8 z  h4 Q* [/ A& |- q
        else if(RunMode ==0x05): L+ {0 T  E9 H/ H
        {/ G! z- c% e) S4 }! b  \4 {' G
                Mode_5();
) i! ^; w: ?. @# s0 I. U        }, j8 f) g7 k$ j( R4 ^& F7 |
        else if(RunMode ==0x06)
) _; X. c/ L) G2 s5 |2 r9 M        {# K4 d' z* @0 U/ c( e
                Mode_6();& `" ^. M/ u; s3 K1 I
        }
. o+ ]4 ~9 K3 v2 k        else if(RunMode ==0x07)& c% e2 e+ z4 ], F
        {2 g7 T2 J) P1 x; z2 h  J) V
                Mode_7();
; E3 c' h* j$ t0 W7 c9 b& b        }
4 {* d% [5 {$ m3 T        else if(RunMode ==0x08)& v% j6 D6 D( F9 P8 G5 h0 d) z
        {
2 Z0 {. j- c6 @) g, C5 m2 B) T                Mode_8();
4 }! \' R1 w2 T3 [2 J        }
. t' R" `1 R; i2 f0 i2 a}

6 ]: S6 d4 }. J9 T9 Uvoid Timer2(void) interrupt 5 using 3* `2 l3 h+ U$ g  ]& \& W, f% w4 `
{1 l3 m  F4 w5 h! F: K
        TF2 = 0;         //中断标志清除( Timer2 必须软件清标志!)
. S2 a7 ~0 Q* E7 x8 c7 y        if(++TimerCount>=SystemSpeed)& f% G  v* O' G4 }/ \
        {# K& I- l4 A0 c( {8 w. O7 Z. J8 w
                TimerCount = 0;+ K( t3 [1 f* t: f& r
                TimerEventRun();
) R6 ?5 ~  A2 R: P4 _4 }           }
/ o( \2 B) ]  T/ g2 D4 Q}
( w2 f% n/ h  E& B4 ]) {& {( punsigned char MusicIndex = 0;
3 h3 K1 B  d) y$ L6 o! [  Uvoid KeyDispose(unsigned char Key)( R' o; p8 m3 W$ I" u3 d
{
' a/ L7 p: |/ y6 {6 d/ D/ H        if(Key&0x01)% s/ S, T& T% v
        {
" U* z( f9 b8 J5 t6 I/ F" I                LEDDirection = 1;
$ ?& i$ J. B( U                LEDIndex = 0;7 N4 u+ f1 f7 d' G
                LEDFlag = 1;7 r' Y3 Z5 N( W# t! r
                RunMode = (RunMode+1)%9;
, x! o- w  C* t- T- b2 T  ^5 q; }                Display(RunMode);: J- X# P9 x  U/ w
        }
& e" V( N8 D7 U- g, C' J/ X0 V        if(Key&0x02)
; u8 B9 f' M+ A- ^: R" j        {4 U, _4 R8 Z+ G( ^
                if(SystemSpeedIndex>0)
' z- P! _* U% M4 p! V3 o8 N- l$ u                {7 }1 L. R1 u1 e$ {
                        --SystemSpeedIndex;  ]8 E6 c0 s* r5 J7 _. {+ [5 u
                        SetSpeed(SystemSpeedIndex);
# G8 N( d, L4 {; ?1 s% u                }* W/ F2 w; }/ i( p7 Y( f
                else/ D7 s3 r( @3 @, L2 \  ]0 i
                {
5 ]! u, Z5 t+ @' a  N                        LEDFlash(6);
) u0 B  \- p" C8 M: \                }/ d% m$ g# K# X. \. D( b+ d4 q
        }8 w% C3 o0 H% j
        if(Key&0x04)5 v+ j9 r& O. K$ W  n2 M+ o! H
        {
# R" |: v. Z0 h                if(SystemSpeedIndex<28)
( L2 `- X! T* _% z+ x4 F                {
& v2 ^3 o; U- z% R" T6 x                        ++SystemSpeedIndex;8 E& W; ^" B4 k& L9 x% }
                        SetSpeed(SystemSpeedIndex);7 N; s5 Z$ }* f" H
                }  ?! t" J3 P4 C
                else  l4 w$ N; d0 C& ]* A* }
                {
' f7 s+ u2 Y. y2 u: m6 Z9 V                        LEDFlash(6);
/ Z1 I1 `$ N2 ~4 d                }8 C) L9 M  l) E4 e: C
        }        ' U$ r/ a! y) z, w. v3 T. G
}

6 I+ U( V; S6 |$ W//***********************************************************************************
. N8 f+ R# C, \# F% m/ G1 Tmain(). q( ]9 N8 [$ c8 l
{
0 Y& `# I) H& L6 S/ {        unsigned char Key;
- {9 l4 ~1 C9 a. b8 `* Y        InitialCPU();8 j/ V( O% s0 f% P2 X. ~& d# a
        InitialTimer2();
$ X/ Z; L: l3 v4 n
        while(1)& x. e' P9 T; [8 W/ k" P
        {
* ~7 |/ B( J: g4 g- ?                Key = GetKey();
. [7 r1 l* p! s8 z
: j. ?* D8 C3 d3 r' A; ?- `4 G/ N$ X; m
…………限于本文篇幅 余下代码请从论坛下载附件…………1 V8 z8 m. U0 K8 h/ N
游客,如果您要查看本帖隐藏内容请回复

% c3 p) R  `7 f5 m

' r3 t; x# D: L, T) [
/ N+ C$ D7 k: x, I  |

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 07:01 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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