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