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