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