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