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