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