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

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

[复制链接]

该用户从未签到

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

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 Y
6 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 {

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-19 20:25 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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