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