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