|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
交通灯仿真 AD画的原理图与PCB 源代码
/ r8 p8 A# J4 c' E9 e8 |
% Y$ g) T% |( k% D# o5 a* c/ h4 Q$ k/ V# J$ u4 y; b) l
这个51单片机做的交通灯可以实现时间按键可以加,可以减,实现南北通行,东西通行。
9 k5 P# |! A7 X% \
9 n+ F2 L9 L `" C+ v3 O交通灯仿真:
9 l& U2 ]2 v6 h) C+ E 3 @8 X; w9 g }" R0 h' [6 }, u
单片机交通灯的原理图(用ad画的)
L) P+ o6 f s * m5 b4 q+ }6 H: R# R5 F
# F, p8 ~9 E; k: P6 f* v; _; ^( S; T2 Ipcb图:
5 b% ?3 [3 r+ f5 @; t 2 p3 @7 j4 |7 _: j
c/ D; g w' _+ P# Q# y$ G+ {- n. v* w* A P0 N* S$ O! L
单片机源程序:3 G$ G% M5 r7 m8 P
#include <reg52.h>
1 ]- B5 l# y6 G4 `" K#define uchar unsigned char
5 r/ c0 s4 ~' b* y$ y1 k0 F( F8 J#define uint unsigned int
' n% V; X: T! ~# x( R' R/*****定义控制位**********************/ ( n. n7 l' C' N. A7 A& t6 q1 Z
sbit EW_LED2=P2^3; //EW_LED2控制位 {8 H. Q7 B0 r3 f m
sbit EW_LED1=P2^2; //EW_LED1控制位 " T& P( ?5 V0 @! _; D9 C7 u: F
sbit SN_LED2=P2^1; //SN_LED2控制位
& j! E J- C1 N' {3 M6 P5 ]sbit SN_LED1=P2^0; //SN_LED1控制位
6 m; n; @; i; y! Q% G+ `' X" Zsbit SN_G=P1^2; //SN绿灯% j2 d' ], z$ k9 F4 R. x9 u
sbit EW_G=P1^5; //EW绿灯9 U* ^+ A4 q. L% _- o3 Z* v p
sbit SN_Yellow=P1^1; //SN黄灯
$ q9 v! R: n) T0 w& ?: L f4 ysbit EW_Yellow=P1^4; //EW黄灯 2 |8 {! l% \2 x" f; w
sbit EW_Red=P1^3; //EW红灯
3 c" h0 G# E! \, U h% C+ Dsbit SN_Red=P1^0; //SN红灯 ; a9 a% ^$ M& C. d/ N4 U
sbit s=P2^4; //功能选择键7 _, t0 e' L, Q: J+ H Q3 ]" ~
sbit key1=P2^5; //按键加及东西强制通行# j% _+ [$ q- `
sbit key2=P2^6; //按键减及南北强制通行4 N' s- }: _+ ^" t
sbit fm=P3^7; //蜂鸣器
+ R2 u. S* m- H0 U" Msbit dula=P2^7;
6 }8 E( q8 k; V' e. g* U- k, Asbit P3_2=P3^2;
0 {4 H/ F, _. U ybit FLAG_SN_Y,FLAG_SN_G,f_sn; //SN黄灯标志位,绿灯标志位,sn运行标志位4 N, h$ v( w7 U3 N9 ^9 g3 m
bit FLAG_EW_Y,FLAG_EW_G,f_ew; //EW黄灯标志位,绿灯标志位,ew运行标志位
/ e4 g( _! F$ [- x) ~; I. Abit F_DISP=0,flag=0,flag_key=0;
& Z. W9 i% S" Dchar Time_EW; //东西方向倒计时单元
. c: @7 p( ?1 J( }8 `% b, i6 p! Achar Time_SN; //南北方向倒计时单元 v7 T6 z! H$ A9 Y; q; z
uchar EW=24,SN=20,EW1=30,SN1=34; //程序初始化赋值正常模式 G! X$ Y; y" L* B+ h
uchar a=0,i,c=0;
) v R) w2 y1 q' i$ D3 m3 l% F9 a( F& M9 Iuchar code table[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //1~~~~9段选码
+ g" w2 r+ j; K. juchar code LIGHT[]= {0x0c,//SN通行* T8 ^% M% ^& M& ?6 d
0x0a,//SN黄灯3 |- P* {( Z8 ?5 S9 b0 k" n
0x21,//EW通行
% h7 @" F. o- b" K7 ]" r 0x11,//EW黄灯, l( g2 Q* E' n7 c+ F- x3 q- b* f
0x09//全红
: G! n; b5 m4 v _$ a& B }; //交通信号灯控制代码
; h/ o* X8 g8 j: Y5 C; d# U/**************** 延时子程序*********************/
/ Q# H/ c8 A9 q5 q% x. e+ `void delay1(uchar k)
# j9 M2 F8 Y7 ~3 u5 F3 }{
. o2 p% L/ I/ w9 U uchar i,j;
, t/ p1 q8 a J4 b* p9 m) l for(i=100;i>0;i--), P& t( O' H `& ?* g
for(j=k;j>0;j--);
0 X) y8 F9 ]$ C% _ g5 i9 g} 9 ]8 b; d) T5 T9 b. r/ L0 A% Y
void Delay(uchar a) % N u6 t i8 w8 H0 V8 k
{ 4 C6 T) L$ R' x+ M$ d7 J
uchar i; ; W. V9 Y1 w+ d v$ C* R
i=a; 4 F) K# |, t$ k; o- Z# Z
while(i--)
+ q: J# D9 E6 {/ L7 p* ^ s3 l" F { 2 s6 i5 ^# |% w a
; * a2 `; m2 L+ P! g
} # O/ h8 O" W+ l$ T1 T
}
; u. Z6 Y" I" o0 }- w1 z/***************EW方向SN方向主干道数码管显示驱动 ****************/ ' W. B# S& F/ {: c! Z$ Z( }8 ?6 x
void DISP_SN(char g) 8 ]3 X) W1 L4 i0 Q
{
8 W4 r+ B+ w' p$ O' o/ m char h,l; 4 r& J" L9 L: \4 q7 s
h=g/10; //SN方向计时的十位数
9 Q. Z$ D0 @% K2 H# [+ x- X0 w l=g%10; //SN方向计时的个位数
: D; J; ^( d+ a5 U+ E2 n3 W& o8 C dula=1;8 m1 e& a$ p# x+ E S: X% S
P0=table[l]; //显示SN计时时间的低位8 G! ~9 d8 [7 D* k, b3 d& i7 V5 }
dula=0; & b: E( t4 v$ X; D+ O* B# R# e
SN_LED2=0; 0 Q/ [9 A( J2 _% e
Delay(2);
0 R5 _* `) L% h- H1 Y SN_LED2=1; ) F# P* I& ?, n' V5 e% r
P0=0; 6 b+ ^( @8 X, W2 ^; Z
dula=1;" u. d+ \3 _9 M
P0=table[h]; //显示SN计时时间的高位
; t! r" r2 Z F% P5 L dula=0;
; j8 j+ U. G/ L7 i SN_LED1=0; 0 d( y: q& H( Z* }0 Z8 J
Delay(2); 5 V& y5 P* M* C6 h+ U* H+ w2 b- m
SN_LED1=1;' S4 T/ t: v4 ]+ b% W
P0=0;, v# N) Z$ L: }, [! w; @
}
! v: f- }2 O0 v/ i& I8 r8 r1 Nvoid DISP_EW(char b)1 @' D! R; C1 x; x
{6 T1 ^) I* ]! d% X- r
char h,l;
+ N% p/ Q0 ], q: C: B; Y h=b/10; //EW方向计时的十位数 ; D6 s- n1 l, d$ m! Y$ i$ a
l=b%10; //EW方向计时的个位数 + |1 Q o# k7 `. N: }
dula=1;3 ^$ z$ Z+ ~% O1 o, d# ]
P0=table[l]; //显示EW计时时间的低位
) X2 d6 P0 m7 S5 L: A4 @* _4 }- Q7 q dula=0;
+ {; E7 L3 q' j5 V6 s EW_LED2=0;
& h# P+ @* m: Q Delay(2);. J4 b( Z& |0 L! M0 z6 J5 M
P0=0;
% d1 ^7 w: x& x! U2 {" u EW_LED2=1;
$ d/ C: v+ `; c' c9 n dula=1;% {/ d& Y5 Y+ h# K8 q, e! T
P0=table[h]; //显示EW计时时间的高位
3 x; {0 _5 a* X! R1 S dula=0;/ {5 I( e9 J" m2 \! t
EW_LED1=0;
" Q- m2 s4 m! `8 O$ P, j, ?5 X! d Delay(2); / [* ^) H3 y/ J. T" ~
EW_LED1=1; # n& l4 G* ]9 ~) ]+ R+ `
P0=0;' O9 |% g2 ^1 [1 T, Q
}7 s9 f% I. M1 T& h; ]; c9 W
/**************开机自检***********/
1 ?6 ~$ r+ a5 I+ i' I5 S Uvoid check(void). \% m* u$ u" ?
{
" Y6 ?4 |. T$ Z+ h( C: f Time_EW=5;
1 A* Z; n! I! C& s. [( v Time_SN=5;8 u D0 C, w7 J' M9 s% l' Q
f_sn=1;
9 Y& X2 o7 @& Q' c7 O$ s f_ew=1;
# k. B8 {9 z" g1 p. V" V while(Time_SN>=0&&Time_EW>=0)
# q5 [3 i1 A+ e# `/ r5 m% \ {0 k* k$ [* G8 w
P1=LIGHT[4];
: v; [& @! Y3 ?1 Y3 R; C2 B9 Y DISP_SN(Time_SN); , X" U; h& i& k5 H; N3 R8 M
DISP_EW(Time_EW);6 K2 p$ ^+ s1 b2 L! ^8 x: F
}
; A/ _/ f0 }$ \: X2 G6 W}
. }. F+ U$ u: Q6 `/**************无显示**************/
9 b A2 p* z9 w( gvoid dispnon(void)# A, M3 D( O$ i6 R$ X/ }
{
/ r; f! s5 f9 c% W dula=1;( V, w1 [* S) p/ M$ M0 l
P0=0; //显示SN计时时间的低位
# A( x1 P4 \ A dula=0; " K0 m5 q8 `( D8 T+ \) L
SN_LED2=0; . q* ]! n% E; _0 P2 j( g* u" A
Delay(2);
* h, P! F1 H2 y N3 H5 ~+ ? P0=0;
0 H {3 J) c! W SN_LED2=1; 2 y- E( F: K6 ^6 c+ G" T
dula=1;
( L* q! f4 i) S. n+ } g P0=0; //显示SN计时时间的高位! _5 \3 M/ `* s9 |( D& r
dula=0; " R- T' x# w9 I
SN_LED1=0;
% ~! u9 s. k: e Delay(2);
4 ~* R* G9 n9 q5 h$ ^7 X$ Q P0=0;# f6 m% z2 N" i# B% L6 b! B
SN_LED1=1;
- | U$ A, M) s5 i; H# ^3 n" p5 U p, v0 R
dula=1;' W! d; J1 a7 w
P0=0; //显示EW计时时间的低位" |6 F. p3 \& P8 D. [6 z
dula=0;
) c& ?0 O. o+ T$ Q EW_LED2=0; + B: U( r( [1 F" \
Delay(2);
* u/ @% d$ V+ d6 }1 j P0=0;6 X7 D. x, z8 _' B- E/ J& f3 W
EW_LED2=1; ; K' r2 L7 g$ ~
dula=1;
; \, l, C, {0 h7 U- ^ P0=0; //显示EW计时时间的高位
7 S; p, e+ C0 H _ dula=0;
2 v" G/ X- `5 T7 l9 F# S% j8 G) Z EW_LED1=0; $ U# r) y9 ^* ~1 \% `
Delay(2); ; K, {4 d4 h# }( A p1 ]( [ G
EW_LED1=1;
$ B+ X; {) L: o1 ]) i0 F6 ^ P0=0;: O+ R5 l3 K1 @! T0 i: c
}5 E# L4 j: K" A G- ^! ?* s4 X$ y
/***************按键检测*************/
" A) ]- o8 u( `3 ~* L6 g4 q& o+ m5 wvoid keyscan(void)
1 P. b/ d' J5 y: n% j{
& s) k4 h+ o5 G: i5 p. N if(s==0)
+ j8 O2 u6 B( A: R2 K: F! k( U# r {* P! |* n5 P5 V! T( F0 M
delay1(5);% Y+ B8 O. a; f
if(s==0)
( V9 r/ _8 _0 B h {
" C% c; X/ M; [( L+ {* S) N if(flag_key==0) u2 N }+ M- v6 G* k1 p0 v
{ # H) Y: c: l( [9 z) q
a++;
/ o x3 X0 r6 _3 H! b' f* f3 s flag=1;
; q5 | r& x; C# Q! R& ~ TR0=0;/ r7 r+ t8 E8 ]' c! J, a* m( J
P1=LIGHT[4];
3 ~; K( v# [3 n2 m0 u' Z if(a==4)
' t( m/ K8 O* W. S$ @* m {
4 j) G; {- G4 v1 g: I# d a=0;3 V7 q4 `- M' n/ v j% d
flag=0;
; O. b l, }8 y; q if(f_sn==1&&f_ew==1)
5 {+ ?- K3 c5 E! ?. l! U0 S0 H" b P1=LIGHT[4];
0 Z) O2 v% X/ c u: ?- l: M6 N if(f_sn==1&&f_ew==0)' i" U- X8 I! o6 s8 B2 i& {
P1=LIGHT[0];
" W2 T0 r4 h, D+ \0 m9 Q) j if(FLAG_SN_Y==1)* }) Y& t1 B5 _
P1=LIGHT[1];. H' ?0 W1 J J& f
if(f_ew==1&&f_sn==0)
e$ @" p1 @- g, q P1=LIGHT[2];
" I4 O- H8 D t5 h8 s0 O8 f. C if(FLAG_EW_Y==1)% S/ n9 Z( }* x4 A; m
P1=LIGHT[3];
. H' n& m" x5 y2 r; t( q TR0=1;
$ m$ c1 p! D+ B' _ C* s. K8 L* Q }# W {% ~4 [' P% J- q
}
4 w/ A, u3 a) r else if(flag_key==1)+ E; O5 T, t {- r. X7 L
{
9 y* w2 i6 G# T) y. j' P- k flag_key=0;
: K; \7 o" z$ Z) K flag=0;
: n) x( D; r3 h0 B4 M. C" N if(f_sn==1&&f_ew==1)" Q3 X" y! p/ W. g7 k/ n# Q/ U7 M
P1=LIGHT[4];& a4 U5 T# a: x" i
if(f_sn==1&&f_ew==0)1 }) {; U( j% Z
P1=LIGHT[0];4 c% o; ]- f, m
if(FLAG_SN_Y==1)* i0 Y( ^7 `# z" M2 w. z% X
P1=LIGHT[1];
* E, H* V2 w& c( o. T if(f_ew==1&&f_sn==0)
# ]4 n/ ^4 ]$ j) `0 x E5 k. L P1=LIGHT[2];
0 e# Z3 c/ c5 c& q7 Z4 S if(FLAG_EW_Y==1)/ P0 M: F1 f" a8 ]3 A ?
P1=LIGHT[3];
( l6 Z0 D$ N0 I D2 W0 o TR0=1;
# |+ h, k* R# G4 d }
4 o# u- g* r! Q" d) X4 Z V } % F3 Y g7 M9 Z- B; d
while(!s);
o$ M. L5 _! N% [' ]& z# Y! C7 b } 4 b$ t$ V/ [! d5 y' U
if(a!=0). `' a/ R/ {$ V7 O& u% _7 G' N
{
# q8 r, Z- C1 a0 Q- P if(key1==0)
& T% b$ `) e; L/ e. L! t {, G# P6 T, t$ N I
delay1(5);$ X) a+ |4 Z; M- M& j+ e1 i
if(key1==0)+ O' `. `3 O/ r4 @8 [. j7 ~
{( X) ^$ K: P- h9 e/ U' | h
if(a==1)
( X; Y8 y6 p# Y$ T {$ H" Z9 U4 c7 @+ ?% a! p$ n4 j" ^4 p
SN++;4 A E# d/ T8 q% s) D9 ?
EW++;
; [# }2 r7 A. U" d/ Z if(SN==100)
4 O* ^6 F! n+ R* b SN=0;
% o8 z5 u- D/ L. t. Z if(EW==100)7 g# x0 x8 t, M& G7 a, I
EW=0;
# v" |" z( t. F( J N _: a DISP_SN(SN);
) c' `- P: n$ n7 X$ `: U DISP_EW(EW1);
3 m" i6 o3 _3 _% Y8 c }2 s t* _7 U1 r
if(a==2)5 j5 D7 ^5 l1 J3 B
{3 |" `! n* B4 X9 e; e) \
EW1++;
! ]" x" P& c0 S+ s$ m) ? SN1++;
; r3 ], a0 ]6 l/ i( K if(EW1==100)4 ^6 Q7 H- h1 P6 r
EW1=0;
; K! T6 b. [# u1 r0 G e8 E if(SN==100)
1 Z% r/ Q& d' d6 ?* M; W# T0 | SN1=0;
/ \2 r; U* x7 w- u DISP_EW(EW1);
+ G6 m* A+ ^2 L# t! f DISP_SN(SN);* h7 M9 q+ P* e, ~& M2 ?
}8 q Z0 N& m* o, u) B0 m- F
while(!key1)
3 F" d+ {5 c% H; Z$ x9 b {
" W5 R1 J! h/ b if(a==1)5 X9 X& G) W. X0 M' J8 \; _
{* y# z; Q- N, @- R3 \( N2 U& t
DISP_SN(SN);
1 t9 h4 O- l7 q) Y: R m DISP_EW(EW1);9 p! k! N3 K3 J3 ^4 l
}
& o3 ^3 q7 E- M* s+ Q. \7 F if(a==2)- ]' J, Y: o3 w g
{. @6 o: X2 V! `* b
DISP_EW(EW1);. A/ B a! [$ U3 q4 L, u/ J
DISP_SN(SN);
, e& X0 T3 e# s! v1 @ }/ D3 r# I6 k( k
}
# W+ `/ g7 L' ?1 [, i) g5 f }% K3 T% V, O) T( s' n
} 9 z$ N% ]5 | [! l" a
if(key2==0)
9 |5 G! d6 e4 T. a T {) B* [5 g! I" p) `
delay1(5);
9 t+ G. k& S! K: h, D9 u if(key2==0)
8 W# o& B0 J" |% s9 t, N9 [# L/ F {
4 p5 o) B" }9 h7 S if(a==1)
4 u" e/ ~' H! w$ Z) P! K# Z {
$ g# ~3 {$ z) [- t( N+ s" D8 d SN--;
; o" Q4 U: j" r/ h& o4 o9 Q- T EW--;
& t, j" G' A$ w if(SN==-1)6 P; v+ J Y/ q# A
SN=99;
8 b3 k R+ @1 T# T if(EW==-1)( o7 w' x& A8 @
EW=99;
" }& H6 ~$ G* R, J DISP_SN(SN);0 @: g3 |2 r' y; [% P3 A5 i7 k
DISP_EW(EW1);
% B$ n/ q, g+ h1 j j/ g. g9 s }& O% h: p9 [5 q4 }* y0 l
if(a==2)& U+ m6 e2 r6 T" J% u9 g
{
/ i. d3 G; c% ` x9 ^5 f, h EW1--;
( d3 {5 f* G. a F$ V8 W- G SN1--;9 B. k( b& F2 p, t! W: _4 A
if(EW1==-1)2 m0 `5 x6 L/ E8 `+ \
EW1=99;( z3 d: z( }4 Z) \4 g1 C
if(SN1==-1)
6 @6 n/ h* ]* _% ^: N! ` SN1=99;2 i s3 [4 G0 p, J+ R& D; s
DISP_EW(EW1);8 D. x- W# T9 t! v8 Y
DISP_SN(SN);) F/ E0 V# n! I$ K$ }( K! S8 h+ |2 S u
}7 l- x2 A" |/ y+ ~+ a3 Y8 ]% o r
while(!key2)8 D; c$ N5 j, g* }
{
" D- |: b8 d# i2 \9 n' ]5 g7 l if(a==1)4 a7 A8 E0 A, j7 g
{
, [; i* ~1 X( Y- _ DISP_SN(SN);
# L: ?3 Y, w/ r _ DISP_EW(EW1);0 o8 T7 f$ x9 z7 G7 R
}3 P4 C4 p. p3 w4 t
if(a==2)2 s z, `0 P5 X5 M
{
+ ~. D8 Q h8 I* t) q) V DISP_EW(EW1);
* Y, b8 ~: j' g% u5 M( P. X( ^ DISP_SN(SN);$ Z, D$ T" q/ ^7 ?4 r& K
}
2 I8 d; a! s) [9 J }
* Y* O7 D1 r; E- S% X/ u }) W1 Z2 Q4 ?. |/ _
}
, l* K0 F0 {! u# \4 n. M9 H }
1 t$ R: ~2 I+ N+ R# n! {2 z& Y if(a==0)2 ^+ W3 Q7 f) ]! U7 h
{3 V' r3 S* y8 B' N* E1 m& J0 R
if(key1==0)8 @ r& ~ H6 K ]. U
{: Y) w: Q9 d$ H) X; E: o4 H/ n( f
delay1(5);
. O4 w+ Z* m2 C4 g7 c0 B if(key1==0)
4 k8 h. u4 {" o! s! k* e5 c9 |+ P {: Q8 W0 e! W3 y
TR0=0;1 E) S% S+ ?3 i4 [
flag=1;
9 d x0 ^7 f4 \" K7 f$ y5 E6 ] P0=0;
. g/ V- d1 Z' w% l! x fm=1;: E# d: q' X3 ~' x& C$ T, k
flag_key=1;
5 B9 W8 o6 K$ f1 ^6 A6 L }7 D1 ?: J% S! V: U1 k' S1 A1 j
while(!key1);
1 b) q8 v9 g0 a( N" Y5 @ dispnon();! g5 y; m" q( a8 {1 B B
P1=LIGHT[0];
' m9 o& Z0 f" W% u u }
6 v/ [3 z& {& z' k8 h* ]; T6 ? if(key2==0)
0 q0 |) f m+ v! _ {
o, N1 Z1 |1 v. x; ^; t delay1(5);* d: M* r n; y
if(key2==0)
6 p( }8 w; n6 X$ P {
/ g' ]+ M4 t X! F# C- i+ R TR0=0;
7 C* L3 O: [- N& P# _ flag=1;
6 a; `. n0 Z- D# a7 n, i5 j P0=0;- _3 z2 X. S* k( { g
fm=1;, K5 V. B/ O6 P8 }5 d6 E$ X
c++; q E3 N5 j) |' n8 g+ m7 C
flag_key=1;# O. K4 h. d: X& a
7 L) y- ~- n) }6 `" x9 M* p }9 s5 z0 O6 w1 E* C1 C1 {& Z
while(!key2);
" s. m! d$ T: w F; x dispnon();
}5 s4 |% r! _" a9 B# U P1=LIGHT[2];2 F2 h4 m4 s. y. v6 a
}$ l( R( p' b* N6 @& I: p) i7 z$ Y
}
2 u3 q9 N; F: A/ a}' y0 |4 ]$ Z- u P% p) x5 b7 d
void led_disp(void)
. G0 }% i+ f8 n7 e5 N' b* I9 d; D! J{/ j3 d# i; p1 T, A2 c$ [% ^
/*******SN通行EW红灯*** ***************/
6 y& G: I5 h$ N/ y" I/ s FLAG_EW_Y=0; 7 ]" i- G- g; w
Time_EW=EW; ) a% O" A, x I2 Q3 D
Time_SN=SN; 8 A0 r7 w" y* x2 ~# C, e
f_ew=0;
9 N- I7 L- Y U' z; x! T+ u f_sn=1; 2 ]" d }3 G7 V2 m) r8 e. e' e
P1=LIGHT[0];
|* Q- ], S8 A M% j# C/ G6 H8 p while(Time_SN>=0)
1 ~0 w6 u! x: v- G; D { ! Y7 Q& }- R: A$ R8 a9 v8 E
if(Time_SN==3)
2 Y$ B$ i: l7 S% x5 d; T7 o {
+ R2 B3 O. a, V$ X! N' i FLAG_SN_G=1;
K# l* ^' g6 t/ j: C' X* N6 A } 4 X3 l9 r0 W+ c7 h) ?5 `
if(F_DISP==0) # b6 O# }( `1 s
{ c W! t# o; K. y1 E7 v
DISP_SN(Time_SN);
4 U$ N6 C+ Y2 k8 I: m }
1 y, C! Z: w- f; z$ l DISP_EW(Time_EW);
S$ g; R8 I$ R# U5 u" j* T1 j } : F( o. i+ B( b- O! W
/**SN黄灯闪烁***/( @6 ^0 ]' L" A" r9 f
FLAG_SN_G=0;
\, I& D4 _- Z( l9 W! |9 g1 \ Time_SN=3;& r2 [# x9 v N5 C! Q+ W
FLAG_SN_Y=1;
- G0 B0 \* o: R7 q# d P1=LIGHT[1];
# g" {1 W1 v/ [2 t* ~; d/ | while(Time_SN>=0)
+ W0 I- J0 y. ]/ a* [ t, P% d { 8 v3 T7 h) |' `7 `: X6 d2 _1 Y
DISP_SN(Time_SN); 6 G! w8 i" t$ a( w# E3 |
DISP_EW(Time_EW);" J; E. K1 T$ s; F% Z
}: _3 G; m- D) O) M
FLAG_SN_Y=0;4 x) z3 E# Y7 U8 X- C: ?( _, E
f_sn=0;6 d5 a4 J8 ^' t0 Q. p3 S( X
/*******EW通行SN红灯******************/ ) w" u7 Y, {# p8 S& e! h
Time_EW=EW1;
$ a* C1 v$ A0 z. M4 W" x y6 o Time_SN=SN1;
. j1 b4 `' O" \6 q) h( c9 Y f_ew=1;2 _$ W) ?$ S0 f5 G; G$ V/ I
P1=LIGHT[2];
8 O, }7 K6 t9 v h) r /***EW绿灯亮***/+ L6 e& @6 F. u3 \+ [0 G; x
while(Time_EW>=0) ) `. Z) I( W4 b+ A l
{ 3 y' j! N( t6 [4 A# i
if(Time_EW==3). M6 M$ G3 d5 e8 A' @, A
{
# ^, u2 J5 I- l- Y4 U3 g" K; R FLAG_EW_G=1;! Q( x/ v4 }* P5 b7 b# K6 A6 A' u
} * A! x' d* y6 h7 v
if(F_DISP==0)
7 u! m- X7 w, U; z; D( P {
0 A* E; ~0 o9 Q0 G+ y) @ DISP_EW(Time_EW);
" k* N0 s+ t$ Y$ Y1 r$ \ }
4 ~* `' B0 z6 l DISP_SN(Time_SN);
- B4 o3 S5 e! c6 h+ \ } ! {& _# I) _7 Y- [6 e9 B
P1=0X00;
- K1 o1 m5 N5 ` S FLAG_EW_G=0; , @5 t3 K! x4 x" T
/***切换为黄灯***/3 S; k" |2 W' f( k
Time_EW=3;
7 ]% [$ h$ J' ?% |/ I FLAG_EW_Y=1;
$ n' x5 u1 O* J5 \5 x" b7 m0 U P1=LIGHT[3];
1 \/ t7 U! p# h2 c7 m while(Time_EW>=0) 7 p4 P$ j7 B" ]7 N+ h
{
8 c( ?: S( ?) t+ ^7 G/ I DISP_SN(Time_SN);
8 {9 e5 c9 r2 @' r! f DISP_EW(Time_EW); Z2 z3 x# Y; G. G1 M/ q( ~! g9 @
}0 |) S4 Q, z& C& @: a, w
FLAG_SN_Y=0;3 I/ r1 S& Z5 b8 ~
P1=0x00;
: d+ z; ~! z; {7 _* k& p}
1 |4 G( ?" ^8 E1 L" ^void init(void)
0 W) [2 o4 h0 G% K) @& h/ s- Z{
+ y' B: Q. }) L4 J* I IT0=0;; {7 |% A6 c# i" @
TMOD=0x01;//定时器工作于方式1 ' D6 k& {& h# C& L# U+ X
TH0=(65536-50000)/256;//定时器赋初值 # I9 b: i9 }/ h# s. M- ]
TL0=(65536-50000)%256;
3 w' l1 S, Y/ H, @+ F: q2 _4 l- N EA=1;//CPU开中断总允许 7 d+ A/ `/ O: Q8 s3 V. ?. e
ET0=1;//开定时中断 1 R; n; C' j7 T0 } n: i" u! e6 i
EX0=1;& R$ c0 `! M8 h$ s& \
TR0=1;//启动定时器0
+ O% R0 }$ W4 E |- f4 l3 A& u fm=1;$ c! p3 f! |. n. J/ h7 P. z$ X
}# S) z P* B4 c+ L' ?# X6 @$ h
/********************************************************************/8 G" A5 _# A8 t) |" r( _, W
$ L6 j) m) j7 u# v
void main(void) 6 V- }8 D, D+ W2 u# X
{ % d5 C* d$ X' _
init();6 q6 E H k# a4 M
check();8 c( o, s9 A/ J9 |4 O. V7 [) k
while(1) 4 w. m4 `4 Y& Q3 x9 T/ e- Z' f
{
- W; o' j' f$ U* e* O6 O led_disp();: G- q/ ^# o) _& L: v
}
9 K9 {3 {8 X. J0 D}
3 K' | ^# ]6 B/*****************定时器0*********************/
' L2 {+ p+ }1 A( T% I0 Bvoid timer0(void) interrupt 1 # H" q ~. l* ~# y
{
! G# @& y3 Q/ K+ K4 _ static uchar count; 1 I! ?. A2 F9 W8 s% c- Z8 K v1 u
TH0=(65536-50000)/256; & i$ @) r3 [, |2 ?9 s' L* E7 H
TL0=(65536-50000)%256;
% P6 j4 X$ n L5 X count++;
9 ?* z. e Y$ h0 T keyscan(); : Q) O) j: s3 v! `- E
while(flag). U" w1 v% }& q# B
{
( I9 k- N! o8 u3 m. p2 K" t& Q. i if(a!=0)7 ~+ q* m/ f4 |2 m
{
b0 z# y8 J% X% S if(a==1)
: {0 T% y h5 |# R1 w7 p! S DISP_EW(EW1);
. ~; y$ ^3 i* q- u% v; Q* L if(a==2)
9 ~" @8 T+ v; t DISP_SN(SN);& F7 m! `0 }! B3 Z' O0 ^1 ]" Z7 U
if(a==3)
5 O9 z- _$ F l- }$ G6 M {
2 Z" a# f9 f: s$ l DISP_EW(EW1);
9 e6 ~: e+ H1 ^! ?6 ^+ e2 k DISP_SN(SN);- G# V9 O |4 ^
}
' [7 _1 g! [8 G& q1 C- B S3 B }7 E, C% [7 W2 ]
keyscan();$ m2 F* e* w$ X, _
}
/ d4 @* o$ o. A, l# v: U if(FLAG_SN_G==1)
# Y2 U; Y9 [4 ` {
5 e# U4 Z* Q% ` Z& o if(count%10==0). o' A8 X# ~( I/ E# w+ z! j
{! W6 i% a7 }. X1 |: V
SN_G=~SN_G;+ [% S# ]5 L3 o$ \( v/ X
F_DISP=~F_DISP;4 G5 o) U9 Y6 ]( M: i
fm=~fm;' ^ B0 H" u. @ u M& }
}7 ^' K9 ]$ B% |4 G; H
}9 q$ E; v, A7 h* n0 S1 E" J0 h
if(FLAG_SN_Y==1)
9 k& |1 A) h" C2 { {
! Z) j0 ^# B. {1 H if(count%10==0)
8 G+ e4 ]. |, D8 J& {/ b( j2 [7 e {
$ \( ^3 b3 c; X; T8 P SN_Yellow=~SN_Yellow;
. {0 a! o/ ]- h! ?1 E9 x fm=~fm;
6 s& K1 u: Z o- R- f }
) b) ]6 f$ B! |1 Q5 L- { }, v5 Z0 v6 {! F# f
if(FLAG_EW_G==1)
# p, [6 l( {5 r1 c3 H {
4 H% i/ ^) z+ ?/ L- L6 J if(count%10==0): n! j. R4 }- w, |- ^) d0 r) S4 ~
{. k% g7 a! C: M" b- Q
EW_G=~EW_G;
Z! ?; w" V' @. [+ [0 m- H D F_DISP=~F_DISP;. h0 f# z; w2 m, R, g% d+ v
fm=~fm;
" M, B5 C5 ?; [4 I* F }! q8 t4 d; n j
}
6 s% o; h3 n; q+ F* v if(FLAG_EW_Y==1)4 B0 O3 [" y1 G1 h" w% ^! w
{3 D0 Z& Y2 N [
if(count%10==0)
$ o0 S* Y/ d; J6 C' H% o& [ {
+ c9 l/ S1 q: F1 R l: r2 \& k EW_Yellow=~EW_Yellow;
4 a* C, [- a. e$ y1 |" g: {$ e fm=~fm;
$ T2 r, {# D/ ~ }
Q: m1 N+ l/ m6 u8 d7 ^1 y9 Q }" _1 N$ J3 z4 B+ c) @- L, I
if(count==20)
0 ^: _1 [) d) t* ?# j { # p. s, b3 l, r! E, j
Time_EW--;
2 ^. A$ @' W! Q$ V7 U3 L$ Z5 U/ J) v/ x6 t8 }* L
9 S: {4 q' m9 h& z6 P. ^…………限于本文篇幅 余下代码请从论坛下载附件…………9 y) c7 l: x) @- ?) T+ M
全部资料下载:7 P2 ?9 u( l1 L
% E$ l$ `; c7 b) \: z, [
- k$ l$ B- b7 m; Q5 w3 H |
|