|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机交通灯设计资料下载 已做出实物 含原理图PCB 注释...0 ?# l! q4 G p7 W2 Z
3 Z4 a" M6 S( g: Y5 i4 n
: a& V$ L/ w) L" S. T4 Z* `) N. X1 q下面的交通灯设计的配套资料,希望能帮住的有需要的同学:
+ f' P3 M- T# j4 L- _1 X- c4 z 0 U( b _8 i2 Z0 i- F
; P2 i% w$ H( A9 b/ {
& \# W& E( n; V6 s: x
6 \- M. t! p( T: \! J5 `; Y7 A# N1 Z8 K1 @2 a) s3 D
电路图我们提供2种格式,一个是DDB格式,一个是PDF格式,2个格式的内容一样,选择一个适合自己的打开。
Q8 \7 l& U& W7 xDDB格式的打开需要安装protel99SE软件- e1 {0 l* q9 A
PDF格式的需要安装一个PDF阅读软件2 C1 o# i* v' C$ A8 S4 f# w
以上2个软件百度里面都可以找到,请亲们自行百度;4 ]3 a i1 G7 v. s3 y! e
2 L5 t1 c0 w( U' Y9 m# K6 | ' f8 |) Q9 b) F; ^6 S5 T' A
1 O- X0 b( ], k$ {) m o
本proteus仿真文件是proteus7.4版本创建的,请用7.4版本或更高版本打开,较低版本可能出现无法打开的现象。# V/ |* m, u# `+ T
z! {8 k7 |$ x5 a, m7 n: x* u R" X. t, y
元件清单:$ c9 W5 h' n5 _/ ~* I6 l$ o) a
a* ]) Y$ H5 C元件名称 | 数量 | PCB板 | 1 | USB转DC005线 | 1 | DC005座 | 1 | 50V 100UF电解电容 | 1 | 电解电容10uF | 1 | 瓷片电容22P | 2 | 晶振12M | 1 | 电阻4.7K | 3 | 电阻510欧 | 13 | 三极管8550 | 2 | 2位0.56寸共阳数码管 | 1 | LED(红发红) | 4 | LED(黄发黄) | 4 | LED(绿发绿) | 4 | 按键6*6*5 | 4 | DIP40 芯片底座 | 1 | AT89S52(烧写好程序) | 1 |
% A9 g- g9 K8 K9 c. l单片机源程序:
6 K9 }& R7 D% N9 z+ R/ J7 C) W/***************51单片机交通灯设计*******************/8 ]7 |3 K8 Q( q% @1 Y
% B/ n& k( N- m# R
% R+ g9 t0 M$ M#include + v. Z! q) r% v2 L5 u
#include _' o7 K6 r5 i6 o6 r# v
#define uint unsigned int
+ L( F9 b6 W# Y% e#define uchar unsigned char/ Y$ C1 J/ G4 c2 T/ @
uchar night_flag=0; //深夜标志位
+ Y; [' z! F" ^( A0 T7 r& Juchar time_cl=0; //定义时间控制标志位 取0 5 o8 M# M% h% _5 K/ _" w/ S/ N5 ~
uchar flag=0; //方向通行标志位
+ ~; ]6 P8 ^* N8 duchar B_N_D_flag=1; //定义北南通灯行标志位1 z8 `. q4 q1 W0 c% z# o$ R
uchar X_D_D_flag=1; //定义西东通灯行标志位
8 n0 u: x& k! }4 A; ?4 W5 suchar i,j; //定义变量i- d' e; T1 B% Y+ s) c
uchar t=3; //数码管动态扫描延时时间基数! J$ Z( e; w8 _. a" i& G2 e
uchar num=0; //时间基数初始化为0
- F8 b& e. W1 U/ s; j9 W6 ?//uchar num_night=0; //深夜模式时间基数为04 a7 X3 {2 \1 m/ l* I: ?, B9 A
uchar time=30; //time初始化定为30秒
" S: o' Y7 K) S6 rint bei,nan,xi,dong; //定义 北 南 西 东
, _- |6 k3 Q1 L; B8 G ?. Uuchar code Data[]={0x18,0x7B,0x89,0x49,0x6A,0x4C,0x0C,0x79,0x08,0x48,0xEF};: C" Z9 {6 ?- P! Y" ]. } p
//定义数组 数码管 0 1 2 3 4 5 6 7 8 9 -
. g# _2 B$ ~5 V1 n# y! \1 \5 Y/***************定义 红黄绿灯**************/
: p7 @* c' G1 P7 O% j1 isbit B_R=P1^2; //北面 红灯0 E! Y1 C7 b) q: F
sbit B_Y=P1^1; //北面 黄灯4 \ q" h/ D" \
sbit B_G=P1^0; //北面 绿灯
; R9 F. {3 g$ }- ]sbit N_R=P2^0; //南面 红灯
" P: f7 k2 F3 p3 jsbit N_Y=P2^1; //南面 黄灯$ O/ g: S( ^9 g" V& u
sbit N_G=P2^2; //南面 绿灯
: E t' A6 h: Q/ X( ?sbit X_R=P2^5;//西面 红灯
& |; x* m. G6 E/ T# m/ N+ S( R, L% bsbit X_Y=P2^6; //西面 黄灯; ]. F% U2 c- r
sbit X_G=P2^7; //西面 绿灯; c q) q+ I/ D' @# b# Q( Q
3 g* u, n2 W8 K, U# ?: u/ y
8 I* W5 ^; Z" h
sbit D_R=P3^7; //东面 红灯' {+ X6 o4 ~# {7 R+ x- j3 u k
sbit D_Y=P3^6; //东面 黄灯
6 J9 j: n' A+ s( tsbit D_G=P3^5; //东面 绿灯
# c& g |- G: C9 O5 U) z2 S% D8 ?; I6 W6 E
8 q4 x$ ~# w: ~ hsbit s1=P3^4;//时间减: c) E) }, G1 s" t5 c& u, G
sbit s2=P3^3;//时间加& t0 ~& L' [/ o& Q; A
sbit s3=P3^1;//白天和夜间模式控制切换口2 u1 w6 |# x1 E( K
sbit s4=P3^2;//进入时间可以设置状态的切换口
* W+ p* a$ V! L/***************定义 数码管*****************/: M, u4 {3 b9 X6 j9 i, S- P, X
#define SMG_XS P0 //数码管数据显示
?( C/ o" Q( h, Z0 v) w g ?#define SMG_KZ P2 //数码管控制显示
3 M+ R: ?( K0 z9 ?8 jsbit smg1=P2^4;//定义数码管1控制口" c. H2 O8 k3 p; ]. T
sbit smg2=P2^3;//定义数码管2控制口. x0 \" J. x! L3 l
void delay(uint time);// 定义延时程序
! e. J' S/ K. j/ A6 Qvoid disp_init();//显示初始化
, Y9 A; N# I3 E. g6 F) |: _void disp(bei,nan,xi,dong);
2 o' u; l. G4 l1 \: ?
$ n# {0 a( j, p ~7 P9 ]. O" ^0 m, V b2 C
$ T2 b }4 ^) W" ?3 _8 H- b5 N& z
" \+ ^( u( o$ S0 L6 a
J/ h/ q( v9 _
( g7 W% H% d$ O: J$ j2 h# n, Z: P6 }9 y' K2 N! A6 m
. L2 I0 x8 m- a$ r
void Time0_init() //定时器0初始化函数6 P/ e8 Z# x. c" @# }
{, \! {/ C3 R, P+ e. q0 Q
TMOD=0x01; //定时器0为方式1
1 c4 H7 J& k3 i. S TL0=(65536-50000)%256;- s5 L, c) X( O0 j2 P6 d
TH0=(65536-50000)/256; //12M晶振 定时时间50ms
! j( p' L' d/ y4 |3 Q ET0=1; //开定时器0中断+ I1 w2 J+ w9 c& I
EA=1; //开总中断; D' g5 m) s( P' A: a4 r2 J
TR0=1; //启动定时器0- ~ ~2 \* y; g" u! d ^1 S" G) r) R- f
}6 R ]/ y* `, K
7 A0 C0 ?. @- w( r
) E t' Z1 W, r/ A; s) b8 _void night_mode() //深夜模式
( K1 V8 U7 W e, Z{
& K, F+ w/ w, J* U- w7 X B_R=1;5 f6 U( _7 l v
B_Y=~B_Y; //北 黄灯取反6 K5 u5 @5 ^! F2 S0 d0 U3 A3 l
B_G=1;
$ L2 D4 u# i p+ n N_R=1;9 X4 O: ?& d% W4 E5 W( E& b3 U
N_Y=~N_Y; //南 黄灯取反. N; q2 s0 S3 e% l# z* m
N_G=1;
2 d/ \, ]6 i$ {+ d# g6 S0 Q: }) m. n$ x' _9 `' k0 R+ X5 l
0 }2 S, P2 E7 M% p( ~/ X L
X_R=1;
7 ]8 j" @2 C+ ?: o* c1 `: T: v X_Y=~X_Y; //西 黄灯取反9 h, P; S" A# z0 r* ^
X_G=1;
4 [$ Q4 F; m. M$ F D_R=1;0 F) V1 w- u: E! G' s
D_Y=~D_Y; //东 黄灯取反9 y9 D6 U2 t4 u g M+ [( ]* n
D_G=1;
) i- g! x1 v' Y) M}: L0 Y* ?! T7 @" x* { X: T" G
1 ^4 R9 k0 g7 H. K6 Y
* A$ _, ^/ T$ P& K% E1 v2 {void B_N_G() //北南通(绿灯) 西东(红灯)
4 Q. ~) B/ p5 R, K{# V$ d: C5 O& I9 C- ?, O, Q# z) Y) T
B_G=0; //北 绿灯亮; w e% \- u* d5 o7 ^
N_G=0; //南 绿灯亮" Z c7 X& x8 e: c' i" x7 P
B_R=1;" y5 p% B6 u' ^0 J
B_Y=1;: H; f$ F/ e8 }; S2 [& M% _
N_R=1;; D. _1 l( o/ \1 w( o, s
N_Y=1;
" W8 Y2 W: @1 U, U9 K6 u# q1 I$ u+ Z: E7 L$ v/ o" P
& ^- _" S$ C# n" E+ U1 K& N w
X_R=0; //西 红灯亮/ g' n; p. X3 M) Y9 c0 u7 M6 W# ~
D_R=0; //东 红灯亮
% Z* N, X2 @ a0 d! o X_Y=1;
M) ?$ o: h9 S X_G=1;
! V. X5 _# A6 o9 t5 Y8 v9 t D_Y=1;
0 G, `' g1 i0 R' v D_G=1;! z+ J& E H$ I5 p) Z( ]3 J
}, B- Y% H' B' k& R! q+ |
; f" e, Z7 i* c# ?2 O. J
" F8 f9 F7 g% \& A. a
void X_D_G() //西东通(绿灯) 北南(红灯) * ~1 m/ a' ~" K5 d; A% E2 s
{
+ z5 i' {+ g( G; w0 K, D. c( K B_G=1;3 x$ p8 n W# G. x# e
N_G=1;# F/ Y4 V4 j% _4 C& z7 o# j
B_R=0; //北 红灯亮
8 e$ m, F3 D. O% G B_Y=1;
9 K& M* S! h5 K8 b6 B N_R=0; //南 红灯亮6 v) h+ E- x3 s" }
N_Y=1;- q4 W2 O3 B2 t7 ^; a; D) H! A
' f! Y& i. R' j- P: v L
: d8 y' m% L5 M' N X_R=1;
( ~3 m' |# L% }& X7 ]/ G D_R=1;
$ @' F3 Z, w" c3 Y; } X_Y=1;
+ ^! g3 S, o5 \4 x; `& L2 o X_G=0; //西 绿灯亮5 b* o: g! M6 a: Q/ ?
D_Y=1;! f' f: E2 E3 ^7 K0 {; s
D_G=0; //东 绿灯亮
4 O: f5 g+ Y2 q1 G7 P}
3 D c8 ] w/ {" l$ \% v* b, s
$ a' I% V1 v6 v! u: m! c0 Y K4 i+ a8 ~# c* h7 G
void B_N_tong() //北南 通行. k4 ]: `2 U0 ^6 o8 r( C2 S" ? P
{
) h4 M+ y0 {- c; L# _5 @# k if(B_N_D_flag==1) //当北南通灯行标志位为1; A2 p* O0 H* m+ a# [) S
{- o* m, a2 S: N' m3 b
B_N_G(); //北南通(绿灯) 西东(红灯)3 H$ R* h( a6 M3 H' I0 E" S7 V
B_N_D_flag=0; //北南通灯行标志位置0 ~/ h, o( u ] a3 S4 I9 l" Z
}
) W* d$ E( T3 Q* y while(num==20) //当1s时间到
q& ~9 \, O# O; _ {% x- `, @6 ?1 M7 ]" |! [: l
num=0; //num清0
7 g( v" h! a' _4 h/ e/ B: R bei--; //北时间 减18 S6 H$ Q& k* h4 m
nan--; //南时间 减1
1 u' N' V5 O$ ^2 y% V% d8 E" j xi--; //西时间 减1
4 v2 L/ N9 e8 Y- ]+ `& ~ dong--; //东时间 减1
# z8 h/ e% U& I2 T" } if(bei<=6&&bei>=0||nan<=6&&nan>=0) //当北和南时间在0到6秒之间
" i) s4 D: n1 _2 a' b {
, M: m9 h8 b) B b& }# A/ ] if(bei<=6&&bei>3||nan<=6&&nan>3) //进一步判断北和南时间是否在3到6秒之间# s# B) J- L# w7 r
{
, }' |/ J# N. v) ~ B_G=~B_G; //北 绿灯取反
+ ]1 ]4 K2 m6 q# o N_G=~N_G; //南 绿灯取反
# i% u& {# c$ ]9 x }
+ T. }) k B" ?5 s) { if(bei<=3&&nan<=3) //进一步判断北和南时间是否在3秒以内
! F! R, i, \3 F6 D, m& E {2 Z) P& U. O# z" n) G
B_G=1; //北 绿灯不亮1 a6 V! k; P1 }7 B2 u+ D' Q' z% v
N_G=1; //南 绿灯不亮
- I) i. a' A, D. Y9 b& i1 B B_Y=0; //北 黄灯亮
6 T. P$ U/ W% B4 ^* U N_Y=0; //南 黄灯亮
/ p8 P1 F. ]7 S. S1 N1 T/ f9 h( Z }" t7 Y; l: c! a& G" p' L1 x
}5 c+ V, u0 a) x5 i- c) C9 J+ w, ^
else //否则(即北和南时间不在0到6秒之间)& m c- Z6 P4 ~0 x* n- l- }
{
$ Y/ D% O$ }, {/ v1 X: k( O B_G=0; //北 绿灯亮
* m) R/ C& l |/ P" M: _ N_G=0; //南 绿灯亮
* k9 k, j- y( T B_Y=1; //北 黄灯不亮
( q2 L9 G/ d5 j% x* o N_Y=1; //南 黄灯不亮/ M8 ?1 X" e9 E/ H. k% m0 C" E% @
}
6 ^4 N# d0 d6 C" e } e% R# w7 v& }. M, |
}) a+ W$ H; g5 {, o8 Z+ I
# B& y0 E& J# A6 g1 t& ]8 _* r4 r$ M# \9 Z$ z' n
void X_D_tong() //西东 通行
. L5 K* \# R. p{' v0 F4 U7 _% e$ i) g
if(X_D_D_flag==1) //当西东通灯行标志位为1! X# g( e Z! K' ^. B2 I8 m& Y
{
9 v% n% h! x5 Z8 F X_D_G(); //西东通(绿灯) 北南(红灯)3 ~# w& R# c' v6 ]3 L
X_D_D_flag=0; //西东通灯行标志位置02 ~9 @& K1 b X- m! S. g
}
; N0 c2 t. a* F* p while(num==20) //当1s时间到 @; L5 W' }+ N2 ~% k" B# R
{0 E5 z) U |8 b+ C
num=0; //num清0
( W! ]( C+ v! l+ {" y1 A& k bei--; //北时间 减1
. K$ B# M1 ~9 s+ K3 x: B, E nan--; //南时间 减1
/ z7 @- f! q+ \6 Z! M xi--; //西时间 减17 ]) i$ |% ?* N
dong--; //东时间 减1
% z- d4 C1 _* U% \$ P% _ if(xi<=6&&xi>=0||dong<=6&&xi>=0) //当西和东时间在0到6秒之间
$ h) d4 e. s( s/ F/ n {
, X3 x. s7 V9 ~! a, t9 [ if(xi<=6&&xi>3||dong<=6&&dong>3) //进一步判断西和东时间是否在3到6秒之间
* _& R n% x( n* m# Z) X) | {. o L4 b: X% c
X_G=~X_G; //西 绿灯取反3 e! m9 m/ v4 K! A
D_G=~D_G; //东 绿灯取反0 B; W U$ Z. z) @3 f& V1 p
}
0 t( K3 V, Q' L9 u if(xi<=3&&dong<=3) //进一步判断西和东时间是否在3秒以内' K' M4 v7 N, M. U, `4 Y
{! w( k% f/ B1 f* d
X_G=1; //西 绿灯不亮
' K! S1 G" ^* \3 L( k7 [: L4 D D_G=1; //东 绿灯不亮 _. W" \9 u9 y, ]- v) m7 p
X_Y=0; //西 黄灯亮4 K' Q6 R% ~4 H! F+ q
D_Y=0; //东 黄灯亮
( o- E- F# q' C* v5 k# {" @. Y }
$ X: h6 y, e7 L- u5 H% o }
2 ?+ b, y7 W) s, a% D* `1 `; A else //否则(即西和东时间不在0到6秒之间)8 d( T+ @. I, Z
{- D# \- { V% v0 j1 r3 Z
X_G=0; //西 绿灯亮* W+ M/ p7 s( n5 p) s4 d( L- h$ k
D_G=0; //东 绿灯亮
7 n4 g, E. f# w% `0 y9 }( @ o2 u X_Y=1; //西 黄灯不亮, `# q; s/ e; ]. w3 ^ q+ r
D_Y=1;//东 黄灯不亮 & G; P# Q9 [9 a: g* K$ Z
}1 C; M/ }4 s7 Q9 W" S4 C4 q! t
}
0 T L# C: r; g}/ H" z$ n) `( v8 i
, {6 R1 e- N2 p0 T
* P$ s* N0 l x) c) kvoid Time0() interrupt 1 //定时器0中断服务函数$ N' h+ q& o7 n: B4 P2 o, ~
{' n. X/ G' M) O; E
TH0=(65536-50000)/256; //重新载装初值,设置50ms中断一次+ W& B& \' r6 j3 U+ D8 v J$ ]" w: f
TL0=(65536-50000)%256;1 D& k. ~- G$ |5 g
num++; //时间基数加1
) n# C/ h! G' A% e( ^# Q}
/ H4 U* c- p4 J4 p$ b# o % V c. [' {1 a2 J
void main() //主函数入口 : Z5 t2 }* R4 g# Z* N
{( L) q j% s8 I& Q
bei=nan=xi=dong=time; //把time值赋给北 南 西 东; Q3 w+ r6 E/ ~+ `% G* o
disp_init(); //显示初始化3 m# v7 _# C$ Q( q( G- t
Time0_init(); //定时器0初始化函数 7 o# @% |1 f% `9 ]8 E
while(1) //无限循环
! V& `1 @ [* _- n2 b, U0 a6 W- | {
/ ?* A+ G) [8 ]% }; f: E4 N% U0 y if(s4==0) //当P3.0按下(调整时间允许键)
" h% N# [( b& N {
% p, ]5 T4 T7 N( v a8 p delay(5); //延时去抖
* D c& z5 w6 P4 E s4=1; //关闭数码管显示' `9 [- b4 Q2 Y6 ~4 e. {4 [" c
if(s4==0) //再次确定按键是否按下
+ O4 k; J, V/ k {
$ g1 G4 x$ t9 O0 E& W4 k) T0 D time_cl=~time_cl;//时间控制标志位取反(开/关时间控制标志位)
! a* V$ r$ B* a" _6 g5 l2 _ if(time_cl==0) //如果时间控制标志位为0
0 t3 y8 y4 [4 p$ R: d; _ {9 s, `9 `, d8 M7 p' P+ Q" P
TL0=(65536-50000)%256;
$ A6 e# u6 H$ O* P9 |, ^+ I TH0=(65536-50000)/256; //12M晶振 定时时间50ms
& \9 ~: D k" S5 f) b TR0=1; //开启定时器09 a! t {9 F2 a" K" `5 Q* |- _) D! w4 e: v
num=0; //num初始化为0
8 ^- Q8 g/ U* C; ? } 9 M& q; r$ ]* M+ L
} m+ w( _# ]% H1 S
while(s4==0); //等待按键松开' y# i! p0 s+ h ^( c- J
}
& {5 `* ]0 B0 U+ t
+ I& p/ y+ X# w( V2 U if(s3==0) //当P3.7按下(开/关 深夜模式)- n# k; a" H" N. j
{
& { d# [3 r! ]9 T- a% W/ f; | delay(5); //延时去抖
$ a" ~; O" D* E9 ~# f* Z/ q% q s3=1; //关闭数码管显示. k0 z! S0 y$ S( E3 H( e& }) @6 a
if(s3==0)
) f9 U: ?! V' P% r$ g# l3 [ {6 X0 j. W7 z; p# ?- c: f$ r
night_flag=~night_flag; //深夜标志位取反(开/关深夜模式),1表示开,0表示关: [) q" Z; }' p6 x* B4 S! ]2 B. o1 v
if(night_flag==1) //如果深夜模式开, s) T% X$ W; X0 [9 r1 [( C
{
( ?3 d- Z; {' |; y5 d TR0=0; //关闭定时器0
/ C" m# E, d0 T1 c" e num=0; //时间基数清0
, i, J/ A- e5 G' H6 z+ z8 w TL0=(65536-50000)%256;
b5 i. ^$ T! l TH0=(65536-50000)/256; //12M晶振 定时时间50ms1 L( u _ G& I
TR0=1; //开启定时器0
8 b' G& ]2 z% w0 l SMG_KZ=0xff; //关闭数码管显示
( f) w9 z/ _: E4 k' l n v }
, @* \* ^4 U* T* T+ x9 \ else //否则night_flag=0表示深夜模式关(红绿灯正常运行) ' X( [/ R! c" `3 |) a4 x9 g
{) t% s6 u4 _8 ?
TR0=0; //关闭定时器0" k- C5 k. d$ w
num=0; //时间基数清0
. i9 ]4 J: H0 ` TL0=(65536-50000)%256;
% @' B' r0 {" \- w z C TH0=(65536-50000)/256; //12M晶振 定时时间50ms
9 R/ J! r& l& E0 o TR0=1; //开启定时器09 h- l6 a( b+ Y: x( A% [4 X
B_N_D_flag=1; //定义北南通灯行标志位
/ F- U( p7 [. `/ \ X_D_D_flag=1; //定义西东通灯行标志位
$ O. t; C: z2 H+ I0 Q if(bei<=3&&nan<=3) //判断北和南时间是否在3秒以内( L/ p1 r4 k# F: `
{
" q2 ?. D: L' ^$ T! e8 _ B_Y=1;0 e- N+ ~* L2 L2 O/ |. l2 e }
N_Y=1;7 ]2 x, e" A& K5 P6 T N
}
) u. I7 I, q* c8 R! z( m+ L if(xi<=3&&dong<=3) //判断西和东时间是否在3秒以内1 e3 s" z! e3 V
{% z& \2 F" b! R2 @0 c& j$ `
X_Y=1;+ }$ N6 P: W6 I: |8 ]
D_Y=1;
" l5 X5 |+ Q8 H! n" F) W8 m" _ }
/ P H( j: Y/ r9 K1 c* x% S }7 s' ]) [( ]. s
}
. Y% p2 _! _# B while(s3==0);
8 M3 ?) D5 n% C0 c }
1 M4 [ }; k4 k. I8 a5 v# q if(night_flag==0) //如果深夜标志位为0,表示关闭深夜模式,红绿灯正常运行
5 E2 o) A, G! o {
7 x) A4 ~2 o5 t m# a: i/ ~" g- u& ]. c if(time_cl==0) //如果time_cl=0(不允许调整时间),即红绿灯正常运行
& `' x3 c4 ?' R' J3 S; M { # X# H8 y3 T( \
if(flag==0) //flag=0表示北南通行允许8 @* b6 I$ @! h0 Y) j6 |
{7 t0 Y+ s0 A9 t; ?' U
B_N_tong(); //北南 通行
( z# \3 U2 u7 P% c, o( z/ T if(bei==0) //北南通行时间到; d# q+ N i' I5 x3 Z
{
, `% l. P' F1 x% l flag=~flag; //西东 通行允许4 N0 M2 t l1 j6 c% t8 X/ a
B_N_D_flag=1; //北南通灯行标志位置13 b: p, [3 r) A4 q
}; s) j, k& V, B0 ^" m" d- t
}/ a. z* R1 C i" I0 e- i
else //flag=1表示西东通行允许
0 b3 k( y4 t, }2 K' Y a {1 v1 @! `" c& h6 o; X; \
X_D_tong(); //西东 通行 2 s5 `8 L0 Q% M9 k7 C# ]% |
if(xi==0) //西东通行时间到
: H" u% s+ x% |; t" |5 p4 Z {( S& {! l0 H; p' ?, n
flag=~flag; //北南 通行允许
1 L ]( X# o" f X_D_D_flag=1; //西东通灯行标志位置1
6 S2 t. v* g" p% l. s }
! `; e* D, J6 h# M1 q ^ }% S( E8 s4 d2 h/ \- V
" C4 g9 O- @6 I disp(bei,nan,xi,dong); //显示时间数据
2 H7 a1 _6 J+ ?1 Z4 ? if(bei==0&&nan==0&&xi==0&&dong==0) //如果 北 南 西 东时间到(为0)
" ?9 ]' x* Q7 _9 d" s { N9 V5 Q- H$ J8 r! p+ k6 g8 ?
TR0=0; //关闭定时器0 [! F. w' Y9 i/ A
TL0=(65536-50000)%256;
* `5 W4 ?- B1 `8 Y TH0=(65536-50000)/256; //12M晶振 定时时间50ms
1 g, ]1 A! ^0 c+ k) ^' r( z for(j=0;j<3;j++) //延时显示闪烁3下
- s& Y2 N( x9 y( u {+ H1 u' y( T) U) m8 Q9 p
for(i=0;i<10;i++) //for语句延时1 c# V8 m0 e! L4 ~
{
! x8 H; f3 |2 u# T$ g) O disp(bei,nan,xi,dong); //显示函数9 }8 q# \; t, u" |# e
; P% H }5 M [; X }
& {" ^, S* ?# j1 {1 b# Y6 o+ m SMG_KZ=0xff; //关闭显示! d. \5 c9 Q4 q. I; E1 u
delay(200); //延时一下1 d9 o$ T7 l9 L6 A0 e- v* R
}- q; c# H! M3 I) C& C
bei=time; //time值赋给北
2 z1 Z% j# d0 m6 V nan=time; //time值赋给南/ Z: X: X9 g( x8 ]5 J( N& d) e
xi=time; //time值赋给西
# n' T0 p. v( V. h3 w& ~ dong=time; //time值赋给东
Q5 F Y4 f/ k" D# ]* _ TR0=1; //开启定时器08 n/ s) k" C; x2 M/ _! W( @2 a4 M7 x
}3 `5 a& e9 k6 i; S! X# @# v
else //否则9 [: ]9 c0 N/ Y7 @
{} //空操作% M; |9 j" F7 A; x4 e3 J) q! I" h
}$ r4 v; C. o. f1 D! D3 ^3 g: j6 b
else //如果time_cl==1(允许时间调整); ~# _5 Y- W8 W9 O7 n# a! H. C2 c
{# l" I& o. ~& m! R
TR0=0; //关闭定时器
% x1 O3 N, a1 Q. O( A0 a TL0=(65536-50000)%256;7 A* x6 J: _. M$ W; n' u* V
TH0=(65536-50000)/256; //12M晶振 定时时间50ms
% l% {3 Z. L3 g num=0; //时间基数清0( `( t4 `) G- ~: j
bei=nan=xi=dong=time; //time值赋给 北 南 西 东
$ U1 y* I. \' C8 V: }1 ` disp(bei,nan,xi,dong); //显示时间数据
6 J+ f; K1 {2 [4 w if(s2==0) //当P3.1按键按下(操作时间加1)
1 e. y" ~+ q. D# k7 Z1 I8 G {
& o' k+ [. f( L( _' W$ {+ E4 M delay(5); //延时去抖
2 c" _2 R$ I; ]' L0 s5 r9 p if(s2==0) //再次确定按键是否按下
; ^3 v9 o/ n; P: R7 k0 y! c {- N) ?+ X5 c& u, g- @# N, v
time++; //时间加1
+ |5 T# c" m ]/ U7 X } 0 I, e; o9 I9 ~6 U0 _
while(s2==0); //等待按键松开
9 Z$ ^8 y! L8 a# L# | }9 e' r& `( N1 F2 K/ e
if(bei==100&&nan==100&&xi==100&&dong==100) //如果北 南 西 东 时间到100
0 j' h/ S& H0 p' q9 l$ _: W { # r0 ]: p6 z/ N6 L. b' Q
time=1; //time等于1
. s' t8 P x+ O1 q }
9 [! M& a; v9 W% q& Q if(s1==0) //当P3.6按键按下(操作时间减1)
( r+ n" F. A& E1 S {
- s" i/ u5 a. f' K u delay(5); //延时去抖
+ E1 h5 e% A' n if(s1==0) //再次确定按键是否按下
5 X6 \$ h! n |1 |9 C! r# | {
, J3 Z) n) [) {- t) |7 f5 o% U1 r time--; //time减1. n* h+ p1 f0 n C- Y. _% H
}/ p9 z& f4 L3 }) A" w
while(s1==0); //等待按键松开
: d3 p& s8 c& ?; ?4 Y% R: M }- }. O: ~' i. o6 g8 @
if(bei==0&&nan==0&&xi==0&&dong==0) //如果北 南 西 东 时间到0
% Q1 b% N+ K- n* W" w" j {6 ~! I7 {7 V8 E" @+ j6 T
time=99; //time等于99
- c1 }% m# w, w5 F9 r2 t } ) J2 l' \# d, k8 `3 _4 l
}
2 ~# S: M ]3 Y+ V5 |! _2 z }+ F6 j0 z: d, ~' s% |
else //否则深夜标志位为1,表示开启深夜模式
& f; F5 Z& F |0 ]6 E { 2 J# W' G9 o0 L6 C' `4 ]
if(num==20) //当1s时间到
$ l# O# a& l5 w* Q" R6 E( |9 u {
& S* m6 v/ C) V num=0; //50ms时间基数清0
4 i7 b$ B6 {& Q/ p1 ?# n night_mode(); //深夜模式& A2 I& S' p5 k# Q j7 x
}
4 n7 k) {& Q$ O$ Z- g& x( `* c }' j# c2 ?% o) n8 x# t: }
// disp(69,69,69,69); + f$ a# m q3 a+ x6 }
}" ~2 y) A7 G2 J8 l6 {
6 a4 F. `& M# V) P+ l. E5 `}
6 g) Q4 y* s& O6 x0 T' l* t. c8 k- Z( f: a$ ~
# V+ f; S3 Z5 [$ ?) ?- i
0 o0 T6 Y5 X: O, J& |4 v; d9 W: y+ J
' ]" f7 I1 p Z) e) d( t
( R ?/ u$ t8 o0 D
$ a! @5 W9 v6 J2 z% `/ t, u1 X; [3 J; f( ?8 [3 a
- ]! c4 Z+ V, X; K/ Y# ^* H
' m, s, _ E q: ?; ] T/ w
& H7 `7 R& k2 Z! n4 C) g2 ~) b9 g( X7 t( z3 S& Y
void disp(bei,nan,xi,dong) //显示(北 南 西 东)时间函数: n+ ]6 E/ V# X0 [5 {# u9 s
{
) T. v$ s3 `, U; u SMG_XS=Data[bei/10]; //显示北的十位 O3 E0 S1 |5 m9 V, o0 \% i" O
smg1=0; //允许北十位显示5 g4 i0 | S: e+ C5 N" g4 C. X$ ~
delay(t); //小延时一下,使数码管显示更清楚
/ Q1 x7 I( \8 v- z; E smg1=1; //关闭数码管显示(消隐)3 q. b8 v8 `5 v {" x
SMG_XS=Data[bei%10]; //显示北的个位
* k( f) L3 Z+ Y% O, E smg2=0; //允许北个位显示
$ ~" P5 `" @7 e! G: t* y delay(t); //小延时一下,使数码管显示更清楚
3 l8 L; W' v8 ] smg2=1; //关闭数码管显示(消隐) , j' [1 r6 X: s
SMG_XS=Data[nan/10]; //显示南的十位 * g p. x2 L$ u! E1 C6 {1 M/ h. N" d
//SMG_KZ=0xf7; //允许南十位显示
0 z K2 n' B* S' V; _# Q9 s smg1=0;9 A& ?* G9 |9 N0 f5 e _
delay(t); //小延时一下,使数码管显示更清楚: K1 m7 ?( A3 w: v0 d
smg1=1;
% d( u" _5 `+ ~' G& C0 q# v //SMG_KZ=0xff; //关闭数码管显示(消隐)" } [: C5 q d8 N$ o" v9 d s
SMG_XS=Data[nan%10]; //显示南的个位8 K- n& f9 E: t- s! e- _, \
//SMG_KZ=0xfb; //允许南个位显示
( G' {6 r. M7 G1 B4 ] smg2=0; - s5 i' W/ f* X! S
delay(t); //小延时一下,使数码管显示更清楚
6 L% D6 H, `' {) D- j" P //SMG_KZ=0xff; //关闭数码管显示(消隐)
5 W' A, f# k. [: d smg2=1;7 k, x$ t E8 U! i
SMG_XS=Data[xi/10]; //显示西的十位 , H- y0 w5 l( [1 Y7 e7 h2 [
// SMG_KZ=0xdf; //允许西十位显示5 e1 P$ M {+ p
smg1=0;' A# a* Y0 R2 U/ |" ]0 O+ l
delay(t); //小延时一下,使数码管显示更清楚
- [7 O3 M9 X' c! T5 `. M9 o smg1=1;4 U4 D" p! ~9 c& L
//SMG_KZ=0xff; //关闭数码管显示(消隐)2 o* h/ ^! x/ Z
SMG_XS=Data[xi%10]; //显示西的个位
% B, M3 V" ]. Z4 v smg2=0;2 z4 S9 U/ }. C
//SMG_KZ=0xef; //允许西个位显示
4 y# L( k6 _8 k0 ^& u; I9 i" C9 [ delay(t); //小延时一下,使数码管显示更清楚4 _" B6 Z% P6 `$ g
smg2=1;
: T5 Y1 F) L3 j& F //SMG_KZ=0xff; //关闭数码管显示(消隐)
6 i% n9 \9 ?3 e8 s. z$ Y8 l& T i7 T( I6 u! F' [
& n. Z) G' [& p% g" l. p8 e, d m
SMG_XS=Data[dong/10]; //显示东的十位 $ \' K1 N2 }9 l0 m: u b. K
smg1=0;
7 Y1 q! e9 _( u5 s$ j% | //SMG_KZ=0x7f; //允许东十位显示: l7 M# R( H2 x& j1 L5 {. u
delay(t); //小延时一下,使数码管显示更清楚
/ p' r0 K% ?1 M1 X! o) M, e/ g6 w smg1=1;
8 x* O6 B% Y8 ]: e //SMG_KZ=0xff; //关闭数码管显示(消隐)3 g7 r |& z8 D- |0 A" k
SMG_XS=Data[dong%10]; //显示东的个位
' G$ f, U& C# k" Q* F# f- } P! z smg2=0;//
0 V' s; X3 @6 p% Y/ X //SMG_KZ=0xbf; //允许东个位显示% t B; ]/ C$ T5 t" a
delay(t); //小延时一下,使数码管显示更清楚4 l0 [( E( u5 g" c( w
smg2=1;$ A9 K; N3 | q* }
//SMG_KZ=0xff; //关闭数码管显示(消隐)
7 {7 g* Q9 r1 w4 E. w}
6 T8 F- G; z! g- \$ avoid disp_init() //显示初始化
! q% Y1 M9 @& u- K& a9 q$ {; X* q{
% B5 N& g" J3 c5 L3 Q9 F6 h for(i=0;i<3;i++). Y) J1 g/ ^0 o# o
{
. V c/ Y4 x c# e; H) z4 k SMG_XS=Data[10]; //数码管显示"--"
% H. ?; x) z4 N: t3 {2 f6 y' B6 q smg1=0;2 [$ j" V( O( _! G
smg2=0;//允许数码管显示
% m3 a5 \! M% U H& y! I: a& I B_R=0; //北面 红灯" A* A3 G) ], O3 ^
B_Y=0; //北面 黄灯 O; P: K4 m F8 a" v
B_G=0; //北面 绿灯
- y- J. ]! l! L B" v N_R=0; //南面 红灯2 ~) b6 L- `$ [/ {2 @
N_Y=0; //南面 黄灯$ e: J. @& C6 b/ f* J1 m3 n4 w' ?
N_G=0; //南面 绿灯
& L$ \: i. c. v- D: A X_R=0;//西面 红灯
: F; ~! ]; }9 X, ?- z X_Y=0; //西面 黄灯
; J: n8 @& B0 l: Q6 h/ M X_G=0; //西面 绿灯5 J. ~, h, w5 E- S4 ]6 D
D_R=0; //东面 红灯
, T+ D6 Y$ i0 ^) @) f D_Y=0; //东面 黄灯
( }( G9 o. M# X D_G=0; //东面 绿灯
; n" x, @. b. R7 q5 W delay(300); //延时+ O( P8 y, w. g5 n2 b/ Z
B_R=1; //北面 红灯
. X0 s: g( m v' B1 M B_Y=1; //北面 黄灯9 e' k. Y" r$ i% O* }+ H7 O& z
B_G=1; //北面 绿灯
7 V( P: @" {5 h# U8 X$ v* d N_R=1; //南面 红灯
% D2 |2 L- z' y& q. K8 n8 [+ z N_Y=1; //南面 黄灯$ J0 c. Q/ G# T( O. P+ B* K- W
N_G=1; //南面 绿灯% ]! H% u' g e7 ]. [
X_R=1;//西面 红灯
$ S6 P6 d* B4 X3 K. z8 H X_Y=1; //西面 黄灯
- Y1 n& r9 e8 ~# G D: s, F X_G=1; //西面 绿灯
' B& K0 D3 Y! e D_R=1; //东面 红灯
+ n1 r% {1 G& E5 k D_Y=1; //东面 黄灯0 V1 c2 u0 C' _# T
/ O8 _) q7 ?/ h( Z; m. x
( {; d9 T* z9 Y" i4 y: h6 i, o8 v2 i
! O3 O# h i0 I& A- F0 a% ^9 {
…………限于本文篇幅 余下代码请从论坛下载附件…………+ j3 H! o6 s" }: u5 t& z+ G
% b( j$ `2 n: g. d. s: [
5 {/ {' a# n8 | |
|