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