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