找回密码
 注册
关于网站域名变更的通知
查看: 730|回复: 1
打印 上一主题 下一主题

单片机交通灯设计资料下载 已做出实物 含原理图PCB 注释...

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-2 13:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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! c
0 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 g
1 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 |

该用户从未签到

2#
发表于 2019-1-2 20:41 | 只看该作者
刚好在研究,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 02:12 , Processed in 0.203125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表