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