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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机走马灯程序和仿真设计完整版
2 `- L0 W7 s4 Z0 X- S- ~
走马灯程序设计完整版. o9 w7 C1 E8 o5 i
单片机仿真原理图:+ \3 ]0 f6 {/ P' t6 i

" r! B( `  w. H/ y: [; Z# B1 W
# B1 p1 l! a/ S' ^" B6 i3 D5 s" }2 `; z- p. x& |
- V' A9 O* S' D2 q
单片机源程序:! N# V  C" V) @% [4 T
#include <REG52.H>
4 z4 G( T4 d1 |& @6 Sunsigned char RunMode;
- `+ W. z& ?; u/ \: L8 Y//**********************************System Fuction*************************************************
  X/ r( |4 \: i* T6 {void Delay1ms(unsigned int count)$ x5 X' T3 _7 I9 [
{$ h4 U) A2 N% }: g
        unsigned int i,j;5 l1 y5 k6 W5 J/ p( q/ ]$ L
        for(i=0;i<count;i++), {! K6 Q1 m! z5 y2 [  ?8 k" N. G
        for(j=0;j<120;j++);
9 J: R6 ?: _6 x  s}

1 @  }: Y$ ], A& i. |unsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,        //0~7
- o9 I& F& Z# B# g6 f1 _% y& F                                                          0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};

, l& r3 w* A& N! {void Display(unsigned char Value)
% g6 Y" |; C9 o% O/ _% q& Y' U{
! Y' ^( z. I% w        P3 = LEDDisplayCode[Value];
/ A+ H+ Y+ I( ^}

' w, ^; W% G; ?! bvoid LEDFlash(unsigned char Count)
4 p( f! \9 Q/ z+ B4 `; X2 H{
5 D: s" S3 W8 D9 h) ~  M# g8 T& Y        unsigned char i;# m; |8 j- a9 `
        bit Flag;
3 y9 U9 m, w9 s+ z* d1 Y2 j        for(i = 0; i<Count;i++)) Q  ~6 ^/ O* w  Y! F
        {; L4 N% y$ Y& w: g: T
                Flag = !Flag;3 t* v' g$ P% K3 h5 z( e3 N
                if(Flag)* }& Y9 q5 _" e! c* e. y( C
                        Display(RunMode);% q% S: _; B' M" S1 l
                else
0 H# y( y2 g1 n. W' l0 ]: [# j                        Display(0x10);
3 E8 v: @' o8 R  `7 Q                Delay1ms(100);
  w- |8 [4 N# H: }        }
% b4 X5 v# {# b" _3 L        Display(RunMode);7 _0 F; }! M5 C3 I3 k) U
}
, ~8 D% ?1 A: r! v
unsigned char GetKey(void)
3 I& a5 h  |+ P4 Q+ K{6 Z% S" [  E2 L# H9 |
        unsigned char KeyTemp,CheckValue,Key = 0x00;
: u6 O* c, Q, N" ~5 z        CheckValue = P2&0x32;
: r* R2 H5 H7 J0 E) }        if(CheckValue==0x32)
' l+ W, P1 U* x) j! [( K& r1 b3 t. O! f                return 0x00;& U# V9 w" N& g3 P& k
        5 q; {2 H9 a- J$ q: G( l
        Delay1ms(10);
! H% B/ |& k% ]0 L        KeyTemp = P2&0x32;
% Z! p, m. W/ \3 C& C: ?" P        if(KeyTemp==CheckValue)
8 l- P& y: C9 i5 F: R1 O                return 0x00;

# B& X% `- V1 d8 t! O2 f' M        if(!(CheckValue&0x02))( N; D# w: t) x6 f0 D- G
                Key|=0x01;
8 U: c+ V9 Z: @) J0 z: u+ w        if(!(CheckValue&0x10))# m9 k$ [3 k2 M2 i
                Key|=0x02;
3 a8 H' S, t; v        if(!(CheckValue&0x20))
% a8 O' a$ {! l2 ]9 U3 S                Key|=0x04;
$ b1 o8 [1 `( h+ }: i: W        return Key;
( D3 Q6 s) B6 K/ N}
- }4 A- r, O) ^0 F7 D: O
unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;, ^  R7 P' x) L9 E
void InitialTimer2(void)3 Y( c( O; |' L( e. G: ~( k2 a
{( V3 ]3 R% j6 y) Z1 P# s+ Y
        T2CON  = 0x00;                        //16 Bit Auto-Reload Mode
' Q& [6 G  a- U         TH2 = RCAP2H = 0xFC;          //重装值,初始值        TL2 = RCAP2L = 0x18;' A# v2 J0 A$ A* j8 ^
        ET2=1;                                        //定时器 2 中断允许7 W, K$ M3 s9 Y2 T3 q6 |9 h, {. g
        TR2 = 1;                                //定时器 2 启动
8 x( y$ k$ `! `( Q/ \        EA=1;( {, X$ E! ]* |4 \- F8 t. B
}
; i  q5 K! G+ g, _+ i
unsigned int code SpeedCode[]={   1,   2,   3,   5,   8,  10,  14,  17,  20,  30,
+ M6 d3 x( {6 ~                                                             40,  50,  60,  70,  80,  90, 100, 120, 140, 160,' r$ v% ^: P8 h0 A" l  ~% G- c$ |
                                                                180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30
, q$ U- z# L2 s  q' W# kvoid SetSpeed(unsigned char Speed)
4 Y: U, y; y* Y& B2 B. ?6 p  Q9 N4 L6 g{
% e' n; w* _' e" @' b/ `2 x        SystemSpeed =SpeedCode[Speed];+ C% t+ M8 s2 `: R% e* z+ q
}
9 p3 y- a# F6 u* Y; U* q+ W8 d
void LEDShow(unsigned int LEDStatus)
5 m; X# Z  M  g4 a% v{
6 B, t: q, N; f3 }3 K' V" ?: q# ]        P1 = ~(LEDStatus&0x00FF);. I( z$ g- F5 n* [) m
        P0 = ~((LEDStatus>>8)&0x00FF);7 g& \" ]$ H6 z8 p, L1 M
}

) X% M( e, C: H5 Kvoid InitialCPU(void)
  y* G( m' M. m/ @% Q/ }6 N{
! H2 ~. a& F9 j, n: C5 Z        RunMode = 0x00;
) N2 _$ }- u0 D- I/ n2 [# p        TimerCount = 0;
6 ~/ d, H% F7 S$ K; O% F        SystemSpeedIndex = 10;

6 j# N0 ^$ |1 C6 S3 b        P1 = 0x00;
8 `, z6 w" G% f0 ~4 @9 S1 Y8 q        P0 = 0x00;, [8 i, ?0 x) E
        P2 = 0xFF;( a! d! T5 H3 e( m
        P3 = 0x00;/ _& T0 ?, P' m4 u+ f
        Delay1ms(500);% C/ W, n1 G  O0 Y. _
        P1 = 0xFF;
/ ]7 V1 y* I. w1 R  A9 A$ ?+ y. q' M        P0 = 0xFF;
1 P: r9 {# J7 G/ \& ~5 n        P2 = 0xFF;
$ K7 q. J% r( \$ |- k8 j( m5 m% ^        P3 = 0xFF;" {  k5 H: _5 \7 ?% s
        SetSpeed(SystemSpeedIndex);
) a3 z: P7 j' a" u8 S6 P. F        Display(RunMode);
6 G; w2 B3 ~- X9 |' m3 d2 [}
- H' R; [9 Q" \% K( p) u
//Mode 0
( C1 R+ t9 ?6 y" O9 Uunsigned int LEDIndex = 0;
& P1 k" |$ W1 ~" kbit LEDDirection = 1,LEDFlag = 1;; u& E8 S& p/ B6 `0 c0 a* r
void Mode_0(void). c" F, m: B$ `4 u
{$ L0 Y3 f1 C1 l1 n0 ~& u
        LEDShow(0x0001<<LEDIndex);
: m& l4 ~# N% F( A& d. f! z        LEDIndex = (LEDIndex+1)%16;
! c9 ^1 s3 s# O; D# H- P) b}
  }2 P9 z4 Z" r) [' o: c//Mode 1* P9 W2 D; \( @2 T  B" |
void Mode_1(void)0 w1 N3 n, b8 x" {( T. K. t
{
* W# I. {7 ?( G2 P" v! K        LEDShow(0x8000>>LEDIndex);
+ d/ d5 Z: {( o# `        LEDIndex = (LEDIndex+1)%16;2 E) [, L3 b7 V* ^
}# P% ^0 j2 P9 `) l/ F- U
//Mode 2
5 }1 O9 }  v/ ], m' B2 ovoid Mode_2(void)
% W" Q# s7 h( r9 Z{
+ f8 P) Z0 T! \1 k- s        if(LEDDirection)
/ `  v; ?0 C9 L' H* a- v( `* X/ \' h                LEDShow(0x0001<<LEDIndex);7 R& U. h5 c9 ^' q5 j0 ^. B) \
        else
8 \( V( y# ~7 G2 ?' ~) W                LEDShow(0x8000>>LEDIndex);
3 c, y/ ]8 @# \8 m; C) K+ z4 U        if(LEDIndex==15)1 l; I, B/ J8 B9 ?8 X1 ]# b. S
                LEDDirection = !LEDDirection;
, i8 Z9 f$ c: P# Y   LEDIndex = (LEDIndex+1)%16;
1 i  q- {% w4 u0 }, X6 Z}
0 H7 i. w/ o1 o//Mode 3" ~- K0 p( F+ {( w! Y2 Q2 |
void Mode_3(void)" s# }/ y7 a: A
{
) x' w3 J3 D# U, u        if(LEDDirection)4 ^2 E. j+ t$ r5 o0 ]
                LEDShow(~(0x0001<<LEDIndex));5 q( x8 I5 p* i: f+ w. c1 }
        else, @; a1 L$ X- h: Q
                LEDShow(~(0x8000>>LEDIndex));" G, V$ F& N4 H
        if(LEDIndex==15)- U# o5 N3 ^) N! G" Z1 a4 l
                LEDDirection = !LEDDirection;
/ p* [2 o  }2 b- r   LEDIndex = (LEDIndex+1)%16;
3 y- _5 |- Y  Y/ E}
4 d; S0 _# b0 U# |6 D4 \
//Mode 4
' |; Q  G0 {& d  Pvoid Mode_4(void)
3 T/ M" V: q$ U% W{
" {- W3 T: W& O& q' T4 ~        if(LEDDirection)
+ Z6 V" t& ~' D        {' z) o) [; i6 [- D: }; X7 x9 ^
                if(LEDFlag)0 Y; ~; p) w" d+ D  S* }2 x
                        LEDShow(0xFFFE<<LEDIndex);4 ^. h2 k" J7 j9 O: I7 o7 j
                   else
( G( @* d' ~  U- _( ~2 S) V- |& K3 J: c                        LEDShow(~(0x7FFF>>LEDIndex));
; ^" W1 l" ]) J; J. Y/ K) n; ~4 W  d, n        }
2 W: K+ g9 T# n( h( i- N& f        else% |' t4 F* h- _2 C
        {
* C" C/ J4 ]+ s* l: P. n                if(LEDFlag)
1 }* w" S  ^5 e/ V                        LEDShow(0x7FFF>>LEDIndex);
' `7 L$ O% [: g; q                else: j0 B& `! k1 T9 G; w" [
                        LEDShow(~(0xFFFE<<LEDIndex));7 V$ A: b  K: G0 P
        }
" K5 K1 A( Y4 B: d3 z3 L$ O/ z        if(LEDIndex==15)
7 L: \2 c! M/ l) a        {
$ V! _# X/ _; ^                LEDDirection = !LEDDirection;" x" _8 H, g9 p4 G4 _: Q1 Q
                if(LEDDirection)        LEDFlag = !LEDFlag;& [$ Y; O2 R+ G5 e: T
        }% w' D" _0 ^4 \' D% j: }& g
           LEDIndex = (LEDIndex+1)%16;$ v+ ~; I- x( b6 p2 B
}
% Y) V0 K. @0 ]4 p. I% O  f0 L
//Mode 5
5 s' f* d7 L. Bvoid Mode_5(void)" o) n& P; u' f5 `+ V' d
{
1 ]/ p+ q8 X' t6 p# x9 [% H  s        if(LEDDirection)# q# @* E1 o2 N4 P* }
                LEDShow(0x000F<<LEDIndex);
% w5 S9 g3 w; O; S1 [& e- I        else
# p, J( D( w) J4 |& s$ Q                LEDShow(0xF000>>LEDIndex);
) O; E+ j  v  x9 d/ x# z" M1 q0 `        if(LEDIndex==15)
6 w* {4 m/ w: E( K                LEDDirection = !LEDDirection;$ F. f/ E. G, D
    LEDIndex = (LEDIndex+1)%16;
5 M! x" w% Z* u9 u* U5 `: u' _}
# l5 T; Q* `! ^5 s
//Mode 6$ D1 {* j' W9 O8 W/ s) N
void Mode_6(void)
7 G. L2 Q+ r  w3 O{
( S% G) T. O! {! y        if(LEDDirection)" B+ ~3 G  d4 R! t, ]2 C
                LEDShow(~(0x000F<<LEDIndex));
( z' g. U  I0 O5 ^        else
( W+ y4 J( z# _8 S                LEDShow(~(0xF000>>LEDIndex));
. N; h4 b: k% Y& ~) D9 [        if(LEDIndex==15)+ M# j8 j7 i: |9 M7 \3 y/ d
                LEDDirection = !LEDDirection;
' X+ _( z0 q+ j           LEDIndex = (LEDIndex+1)%16;6 t5 S/ J! Z9 J5 s
}

' `- [+ C4 Z3 \0 z% e* h' m4 w//Mode 79 k: x6 x( d" Q. M& L$ l
void Mode_7(void)' L3 R! u' {6 I7 h+ L9 H
{
9 a9 i' I1 ~; Y' U- C- {8 |        if(LEDDirection)' B$ l; l% N/ U, G& E7 l
                LEDShow(0x003F<<LEDIndex);
) q# _$ G$ p8 L; n6 G$ k) o8 }        else; R# t4 `9 q! H5 `# p* H
                LEDShow(0xFC00>>LEDIndex);
3 a7 d. X  b4 X$ X% L; ^5 @        if(LEDIndex==9)9 T* e  s5 D4 W+ s
                LEDDirection = !LEDDirection;
& p" `6 D7 Z9 k3 l    LEDIndex = (LEDIndex+1)%10;! b, m  V( s+ T1 e  h
}
5 c, D# m7 v. \- R9 Z  x3 j2 {
//Mode 85 l# V# p- z1 L& n; v( r+ `
void Mode_8(void)
6 a) C/ [- Z& o3 a7 y: _{
9 [$ I: D( l; ^, x. l- g5 p2 t        LEDShow(++LEDIndex);
$ Q; r2 t% Y2 J/ K6 q1 p: [( Y7 m}

8 l9 @2 p" a  H  f$ `void TimerEventRun(void)
- |5 K% `& W7 ]4 ~3 g{
: R" Y: H* w& R6 x- ~/ v        if(RunMode==0x00)/ a$ p" q+ ^8 r( r; p; J& m" i/ o
        {
# \$ ?  m1 h! H) q4 v# l$ z& j                Mode_0();        
3 ^, V4 R! f) g7 d7 m3 w        }
9 L6 T! ^3 L) P+ E, j* x        else if(RunMode ==0x01)1 `1 y. _5 |5 l! N" w4 i
        {3 c+ y3 H" L1 j0 s* ^1 [
                Mode_1();  B9 A$ m6 O6 L0 G0 J# F% r2 [6 x; j
        }6 ]5 p! {# {! q" |: ?2 g% O
        else if(RunMode ==0x02)
; C+ x" f- T# x0 r        {6 y4 g2 F/ W' g" m6 }
                Mode_2();
3 s0 n# r7 d1 d4 V- T, w' k4 S        }
) T6 \! O8 @+ I# d+ h' s6 z" l        else if(RunMode ==0x03)
" a2 Y" W$ P8 B0 g; {9 m        {( L) o% ^; _" T, Y9 S1 [
                Mode_3();
7 _, O5 `. C& Y: b3 Y+ y        }
- t* s' _, T! K4 D9 _7 ]$ P5 F        else if(RunMode ==0x04)
& y/ c/ I7 y4 J4 ^        {- p. ]6 n5 m! I7 I) w$ _( |
                Mode_4();
3 K% \  I4 ?6 d5 q# F0 G        }
0 n! R, y# |6 W: ^  l/ b        else if(RunMode ==0x05): A8 G4 @5 x4 F8 z5 C& c9 I
        {- U* ?+ v, N; y. c9 S( v- H
                Mode_5();$ {  T& e4 T& n  k* N
        }
% I. X8 C  j; Y- G9 C" B% n5 I# J        else if(RunMode ==0x06)
% p3 n& B6 Q7 E. R" I- T) v5 w- a        {2 v/ G" H, ?/ a: A4 d7 v
                Mode_6();9 T( t* ]5 O6 N  \
        }7 f8 Q9 r% K1 E  _. l  J
        else if(RunMode ==0x07)( y) {5 R9 }: `6 C" y' L
        {8 k, x) |! G2 v
                Mode_7();
0 V9 j5 z6 [  u: C        }) W' A" e1 U2 G1 Q& T+ t6 ?
        else if(RunMode ==0x08)
+ Q+ R/ w  G# m3 F: l$ j        {
: q6 k- v% b1 T5 B1 ~5 B                Mode_8();) @7 c/ X+ [6 C0 p/ }# D1 T
        }
6 u/ ]4 `) \2 F& f}

& u  F1 l  j0 f$ Z+ @3 ?6 yvoid Timer2(void) interrupt 5 using 3
' _8 ~9 }8 a( x: P0 |( q  S% k{
+ E! @) V) k2 o) U        TF2 = 0;         //中断标志清除( Timer2 必须软件清标志!)1 L& A) c5 T# j# K
        if(++TimerCount>=SystemSpeed)) L+ B9 n' w  N% N9 k1 c
        {0 |. A) z7 _9 C" {5 q5 E, z3 w# f' A
                TimerCount = 0;
3 t! e1 g" D7 E' k) ^2 s8 l+ e                TimerEventRun();
, P& D4 i3 O0 s2 _1 a9 ?           }% o6 B; ?. |" L& L$ r3 s
}- R2 ]/ N0 f8 e! Q
unsigned char MusicIndex = 0;8 r& o" X( `- q9 N+ f2 t/ w
void KeyDispose(unsigned char Key)7 o& {+ U! i  W, D
{
; w& G0 ], m2 h        if(Key&0x01)2 o, {* A" h8 q4 I! Y
        {
3 {5 N1 ~5 v0 F- m, M4 [                LEDDirection = 1;2 S: s( z1 k9 c
                LEDIndex = 0;% A4 V' U) g8 N/ K# r. t5 r
                LEDFlag = 1;5 t$ i8 ~; j( `1 L
                RunMode = (RunMode+1)%9;
$ b  ^7 c5 r  _8 N* ?+ j' ?                Display(RunMode);
2 t3 F6 ~. I$ }' v$ N+ h        }# A! _3 y" y; i2 ?- o3 k
        if(Key&0x02)
3 K% K) |! j) w8 k        {
8 Q! C( w) N& @9 o* m                if(SystemSpeedIndex>0)6 O4 ~9 A' \0 [+ b
                {" n. A$ h/ a; r; X3 o$ B( k
                        --SystemSpeedIndex;% t7 C( S; }) u5 `# [& X0 l" s1 Z
                        SetSpeed(SystemSpeedIndex);
$ \' {9 x+ S2 k: r* [/ Y# r                }8 ?0 ]7 ~: Q1 i7 K: s9 `
                else
* [" s) c+ j9 A% U1 |% Y+ b                {
8 e& i& D2 v$ p% A% L8 z                        LEDFlash(6);0 N; S, H. @- h  d& b( m- v, d
                }" N$ L3 o" k* J3 I: Z0 I
        }
# S% ]1 p4 z- n/ B  T, B( M        if(Key&0x04)
7 l- C8 M$ X# N        {* ~- X) b1 l1 \* O) S& t, F" S0 ]
                if(SystemSpeedIndex<28)
1 L8 J; r/ D  u' G: A1 t                {
. n7 l9 S4 A+ i5 }: @7 w                        ++SystemSpeedIndex;8 Y! k0 M3 A3 p. m. A+ n
                        SetSpeed(SystemSpeedIndex);/ a4 _, b* f! ^5 \0 q* p( Z1 ^
                }5 G' H, \% V; ~
                else
# N" D# O% q- j4 @                {1 e! |4 A: N3 M$ p+ B4 j
                        LEDFlash(6);  x/ \/ \5 R; P
                }
4 ]2 ?" m- T0 N1 `        }        0 J) r' V+ k9 N/ Y; n7 `+ O
}

) j* f2 q6 ~5 a: F) G& A; X//***********************************************************************************" f4 H2 e$ h7 x/ Y1 x
main()
* J: [1 i1 q* W9 m1 O{& f- ]5 z. F. k0 L/ ~* Y
        unsigned char Key;* v7 @# s9 s& E; `3 O% k% H; d9 |
        InitialCPU();& D" h1 ?. t# X  Y2 A  P' r* g
        InitialTimer2();
/ A3 c4 ]  v8 O6 N8 _- Y4 a
        while(1)
) d/ I) H8 w( i* Y        {$ M0 T+ N! U+ `% \9 l8 x& V2 i" [
                Key = GetKey();

, p/ t. F! I( O5 I" `/ z+ s2 z$ T* p9 |$ b2 t  Z$ e
…………限于本文篇幅 余下代码请从论坛下载附件…………
+ |7 Y/ o2 ~, `7 O/ \0 |; [! W6 G) c
游客,如果您要查看本帖隐藏内容请回复

, p5 {: u; V# F4 x
4 ]1 ~4 h+ o8 ]( i6 P  C0 Z8 O8 ]0 w
6 ~7 E1 B* e, ^* V0 D( N# i

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-2 04:29 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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