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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机交通灯设计资料下载 已做出实物 含原理图PCB 注释...+ j: `8 J6 n2 u( @, t
* R$ a: A7 C, i( ]/ G6 u( B

' ?' g3 I5 u3 k7 s7 B' D4 P+ ^! l8 [下面的交通灯设计的配套资料,希望能帮住的有需要的同学:
# @) j. L" J! [. j/ D
5 X) N, n2 V: Y! {, q: Y0 H ) s7 C6 C( U3 t/ ^, m8 b# ~

2 o$ e1 @7 y  r6 O5 m9 R' f
: `% i$ Q3 ~% j! P
* w5 r% Y: o' k; x9 h% |电路图我们提供2种格式,一个是DDB格式,一个是PDF格式,2个格式的内容一样,选择一个适合自己的打开。
8 S+ f' l: f6 W( r0 [* D$ SDDB格式的打开需要安装protel99SE软件  z( t+ N0 m0 v/ A
PDF格式的需要安装一个PDF阅读软件
* b8 X+ o/ y5 ~) N以上2个软件百度里面都可以找到,请亲们自行百度;

$ G# J2 z% A. V* g. j* { 0 _/ C2 w" u: ?. F+ K4 ]9 I1 N
, g, g$ c& z  t! D7 M

0 g" ?# Y3 P' A6 t本proteus仿真文件是proteus7.4版本创建的,请用7.4版本或更高版本打开,较低版本可能出现无法打开的现象。2 J  E: A, W/ `% E% W+ z! x

, `6 s# L+ r2 B) g  n7 {. A5 K7 u7 T: x. G) \' `$ d6 }
元件清单:: v* T, f* [$ o  f$ V
  d( u5 v# B/ ?3 E9 \, H* h
元件名称数量
PCB板
1
USB转DC005线
1
DC005座
1
50V 100UF电解电容
1
电解电容10uF
1
瓷片电容22P
2
晶振12M
1
电阻4.7K
3
电阻510欧
13
三极管8550
2
2位0.56寸共阳数码管
1
LED(红发红)
4
LED(黄发黄)
4
LED(绿发绿)
4
按键6*6*5
4
DIP40 芯片底座
1
AT89S52(烧写好程序)
1

2 u* m! [/ O( V7 P( h( B2 Y$ c单片机源程序:
5 Q' V. A7 u  M7 p  e% }1 z8 D% Y
/***************51单片机交通灯设计*******************/
, g' m- ]) b/ y8 D! p% ^0 s1 ~$ m1 b
( ]& q) }" {# U5 V+ H+ k
#include
, E( U2 O2 p. U#include 4 f& g% u" z; P) q
#define        uint unsigned int( e3 J9 Z: c( p; W6 Y. c6 N
#define uchar unsigned char
! {& ]! v2 L) d5 ^7 R+ u6 {! m' S8 X0 puchar night_flag=0;                                //深夜标志位: g; ^+ F" A( L* Y8 I
uchar time_cl=0;                                //定义时间控制标志位  取0        
  b" v6 V# s) t- Tuchar flag=0;                                        //方向通行标志位' [0 s8 b& U, {
uchar B_N_D_flag=1;                                //定义北南通灯行标志位) O4 e+ ~3 u4 i  C0 u
uchar X_D_D_flag=1;                                //定义西东通灯行标志位7 S& y9 @; ~2 y: R% M3 V8 h$ @
uchar i,j;                                                //定义变量i( A/ P0 ~. i4 Y3 q4 t
uchar t=3;                                                //数码管动态扫描延时时间基数6 n  H) T0 H( b7 h) b
uchar num=0;                                        //时间基数初始化为0# X  U  R9 [  {$ W; ?! F
//uchar num_night=0;                                //深夜模式时间基数为0
, s0 l: l) f. ?" }" Wuchar time=30;                                        //time初始化定为30秒
( G4 @- U; I) uint bei,nan,xi,dong;            //定义  北  南  西  东  Z) h$ ]" r! @8 h
uchar code Data[]={0x18,0x7B,0x89,0x49,0x6A,0x4C,0x0C,0x79,0x08,0x48,0xEF};1 X+ ^, I. X4 Q7 ]
//定义数组  数码管   0    1    2    3    4    5    6    7    8    9    -# |( r2 E  }: G& _, c' B
/***************定义  红黄绿灯**************/4 d. t$ _9 M& Z  Z; H
sbit    B_R=P1^2;                                //北面  红灯/ T% y/ M9 m; V, v$ P& g
sbit    B_Y=P1^1;                                //北面  黄灯& v' M  P$ Y2 e0 d! s
sbit    B_G=P1^0;                                //北面        绿灯
' M5 _( d$ s( C1 e: @+ |4 v; Psbit    N_R=P2^0;                                //南面        红灯
% T# \) p9 {) k8 h2 O; isbit    N_Y=P2^1;                                //南面        黄灯
3 y+ h0 `( R- \# w9 c2 isbit        N_G=P2^2;                                //南面        绿灯3 e6 O# W; k5 E7 l1 ?
sbit    X_R=P2^5;//西面        红灯/ h" i5 F& s7 Z+ N4 O3 M9 m0 W/ F
sbit    X_Y=P2^6;                                //西面        黄灯, }: O, E+ T. I
sbit    X_G=P2^7;                                //西面        绿灯; A& r7 O/ ]; {6 A  y; I3 \2 ]! I

! Q0 R7 l. p3 o( a) B' x! t4 E/ m
0 W7 o) H: t% |
sbit    D_R=P3^7;                                //东面  红灯
; S' Q, N* @3 p& |) j' _0 M* `sbit    D_Y=P3^6;                                //东面        黄灯
/ d, F& N5 w2 h4 ]  xsbit    D_G=P3^5;                                //东面  绿灯! A- \* m' W8 p

# V& ^7 Q2 z/ R0 Y! [1 D; T6 ^' R# k

0 Y2 n! M, _5 ?8 b# j1 esbit    s1=P3^4;//时间减5 |1 C, S4 [( |7 @
sbit    s2=P3^3;//时间加- O2 j& V& i% Q: e
sbit    s3=P3^1;//白天和夜间模式控制切换口, C. t; p! d* k* s7 W
sbit    s4=P3^2;//进入时间可以设置状态的切换口
0 f2 H# Q" y  v# T5 k# G/***************定义  数码管*****************/
7 A  I# r# G" I) [( c#define        SMG_XS        P0                                //数码管数据显示
0 T! N0 B' t7 a# K  i' X#define        SMG_KZ        P2                                //数码管控制显示  L0 E+ u8 `1 U$ D% W  `
sbit   smg1=P2^4;//定义数码管1控制口+ K+ v5 F$ J% q3 a
sbit   smg2=P2^3;//定义数码管2控制口  b; J1 Y% W. }( {; b5 w
void delay(uint time);// 定义延时程序& O/ T( @3 |6 P3 @. g) i
void disp_init();//显示初始化
% V/ s6 t! q9 P: }% `void disp(bei,nan,xi,dong);0 X+ _' N( P1 f; b( r  {( v& i8 D

+ a" ]' r" D1 m# }- T0 M' |; P

9 U8 M2 O4 B* f3 l* H, ], a* x4 S) Y5 N" ?

3 a+ l7 u( M$ y0 K) i. `; n; @! R8 z8 j+ ]" d  b

, ?" Z/ ^. R, A* d" c5 x* K, N# }- K; K2 V; X3 G0 z
( h7 n- N8 M' T  u9 H% K
void Time0_init()                                //定时器0初始化函数
* H( R" S1 Q6 P. Y, F{. j% a9 y8 S# i8 E/ x/ P
        TMOD=0x01;                                        //定时器0为方式1
" b2 ], S( A: S' w; d7 ]        TL0=(65536-50000)%256;$ J: ~/ q9 F/ ~3 `0 g6 U2 x
        TH0=(65536-50000)/256;                //12M晶振 定时时间50ms
. d5 V( r: |" r, p- T' z1 N1 }        ET0=1;                                                //开定时器0中断
/ _  d) \/ ~9 g8 E" B; `, m4 r        EA=1;                                                //开总中断
5 t* i% B0 l9 _2 D5 r        TR0=1;                                                //启动定时器0
" i9 H' m1 w3 ]6 a5 l}! ~/ {0 a+ s/ @

/ O! S" R: A$ v. Q( ^; e
0 @3 o# \5 T% m
void night_mode()                                //深夜模式
* X* f7 I) g$ a' b6 U9 a+ F{
7 S' z, u4 g9 @& Q5 H: x        B_R=1;
0 h! Y) d5 b! ~, `        B_Y=~B_Y;                                        //北 黄灯取反
. ?5 t% q1 s% G% \        B_G=1;/ X5 B* \* c  O
        N_R=1;# [0 D5 o0 U3 v, m7 ?' h
        N_Y=~N_Y;                                        //南 黄灯取反/ X. m) h3 j, v
        N_G=1;! t! p3 l& x. S1 X$ I6 P) H
5 k3 C" T9 P5 a  b: B! H+ \  u

0 _, F+ k$ D- H        X_R=1;                                        , |# a$ }' J( X
        X_Y=~X_Y;                                        //西 黄灯取反
5 v8 h1 k, j7 [8 s. [        X_G=1;' m7 n# W2 g7 b7 h' W9 R3 |" D, s
        D_R=1;
  ?' h3 w6 _+ ]2 x6 n% Q        D_Y=~D_Y;                                        //东 黄灯取反
; ]3 F) W4 Y( d% s; r$ y+ @1 T  w        D_G=1;        
+ n9 I" w$ o/ [/ T3 X7 L}% A5 M7 h: X9 |/ D& I

! \+ m9 \2 ^. n$ o6 A& N
! _  v1 [. J% p
void B_N_G()                                        //北南通(绿灯)  西东(红灯)                        
4 B- X  C6 o( M{
' q- r6 K3 l% K8 I        B_G=0;                                                //北  绿灯亮, s1 O( z: n! I- o, ]2 a
        N_G=0;                                                //南  绿灯亮6 X6 r) U% O& }, A6 W( l$ H5 w- S
        B_R=1;
; M7 M/ ~' `& \( `8 [) {3 p        B_Y=1;
4 l2 W2 B+ w+ x        N_R=1;
, w+ @' S( |/ t1 S        N_Y=1;
+ ?; q( e# R3 G0 Y* z7 V! X6 Q4 Q2 p  P) t% n% ]) O$ B2 L+ V

+ _7 e' J+ ?6 ~0 V        X_R=0;                                                //西  红灯亮- W# X# M6 e; N* U% ?) [5 U
        D_R=0;                                                //东  红灯亮5 ]: @* Q, f) C- R
        X_Y=1;
1 r+ h1 m4 e; z  p! E7 |$ c/ F# @; x        X_G=1;0 j. G* `  X/ r; \+ a
        D_Y=1;; e6 d8 s% Q$ W9 p$ j
        D_G=1;4 f. v: S9 E; D$ ~1 [3 C3 t
}
3 w: @- D6 n6 \6 N% H
6 F, q) P5 Z: ]9 [+ Z! u% P
" x& g" p/ F- _2 h
void X_D_G()                                        //西东通(绿灯)  北南(红灯)                        0 X5 [6 K% X0 Q& _1 }+ A
{7 ~& u8 j8 U8 r! U
        B_G=1;" f4 H. J% i" b8 I9 I0 {0 ?
        N_G=1;
$ K) g% \% {) A1 G' H9 _% T        B_R=0;                                                //北  红灯亮
0 N5 u* r- D6 x- q6 W        B_Y=1;* A* M) }5 r" o, e  a& Z) G0 P
        N_R=0;                                                //南  红灯亮. v5 {0 ~; u: {! c3 o* K1 L% q
        N_Y=1;
5 M9 F8 V$ V. {/ v
7 Z. d7 x( q' Y, e9 t+ w- O

/ h+ E, L/ j2 ^" N+ b, {        X_R=1;9 L) _7 n' t, S# l' v9 B4 n
        D_R=1;! M- W( K. _) ]# N6 U; [
        X_Y=1;8 j6 S1 @0 o& @6 l& K) V% w* m& h
        X_G=0;                                                //西  绿灯亮  d) `% P& F$ |" R- h
        D_Y=1;
& U! p* i/ T2 |. b        D_G=0;                                                //东  绿灯亮
) G# H/ R, {& o. N- I6 H}: _3 |' h% [8 p
. p' A) g$ }! s6 v  ]+ b7 x. u

8 L$ H  x, L  C6 _' Cvoid B_N_tong()                                        //北南 通行
) c( A3 C, k$ `1 O{
/ Z! T* O7 M" V2 F; P# I        if(B_N_D_flag==1)                        //当北南通灯行标志位为1
$ M0 y2 O& R1 v5 l) w  a# U        {0 a1 o" [8 b1 j( O$ z
                B_N_G();                                //北南通(绿灯)  西东(红灯)8 r, B0 o% G) r6 A% ~0 K
                B_N_D_flag=0;                        //北南通灯行标志位置09 j+ P5 S9 r% @5 q4 b: u
        }
9 ?8 o+ g8 I, g- L% A2 r; {. d; N        while(num==20)                                //当1s时间到3 u* ^1 h9 G* [" \$ l& _
        {
' l* ^( [" P0 s6 L' B: P( P                num=0;                                        //num清06 C9 b& J( N, ?5 e2 Z% B
                bei--;                                        //北时间 减1
8 J1 r& P& W  ^3 q                nan--;                                        //南时间 减1
& f0 }( {& R0 P# K. {* j; [                xi--;                                        //西时间 减13 `9 V, v  K' }* R
                dong--;                                        //东时间 减1" y$ B4 q6 t& o) r; @, h
                if(bei<=6&&bei>=0||nan<=6&&nan>=0)                //当北和南时间在0到6秒之间
/ \' f" [& |: e; C! J( q+ u                {* e5 a8 w2 I, [5 d0 j
                        if(bei<=6&&bei>3||nan<=6&&nan>3)        //进一步判断北和南时间是否在3到6秒之间
! @6 U* D+ }& K+ b                        {
- W* G4 f) }' {                                B_G=~B_G;                                                //北  绿灯取反/ S4 C+ f- s5 p- a6 `
                                N_G=~N_G;                                                //南  绿灯取反/ }2 V1 c# q$ A, T
                        }
# `: ?1 X6 _+ K& X- \                        if(bei<=3&&nan<=3)                                        //进一步判断北和南时间是否在3秒以内
' N7 T$ E. s3 L! D                        {
* R1 e+ K7 Z# o! M6 h( k                                B_G=1;                                                        //北  绿灯不亮
$ g  z8 P) c" T$ n5 Z8 c                                N_G=1;                                                        //南  绿灯不亮
' v4 s/ g& G% v8 R4 P# P: B9 `! B                                B_Y=0;                                                        //北  黄灯亮
: l3 o8 C0 C" [3 {, T                                N_Y=0;                                                        //南  黄灯亮
7 O" q& p; t( t                        }' X1 J  X8 N' |/ }; Q" w6 {
                }5 X/ j) f" ?: S8 o# y
                else                                                                        //否则(即北和南时间不在0到6秒之间)6 a# O9 M7 \: A5 d5 [# ]5 X
                {
/ P! L! M. n& _0 ^                        B_G=0;                                                                //北  绿灯亮
9 M6 f7 Z+ T( t! ?( W7 _6 {                        N_G=0;                                                                //南  绿灯亮" \: _" W2 P, H' b
                        B_Y=1;                                                                //北  黄灯不亮
+ e, ~" @9 U8 x% ^* v% Z                        N_Y=1;                                                                //南  黄灯不亮  K4 L' i! Z0 u7 ]7 B% Y
                }
" r$ f- _- \* x# \        }* E% F) K8 q, y4 s! _. g: k" y
}. x6 M- D- [& g
* i" s( o; R/ x, g( k. Z6 w
& _$ l2 G( o3 C9 ^8 ^" `3 r
void X_D_tong()                                                                        //西东  通行
& ^  d( T/ G: `4 Y8 ~! ?{
+ B' p; {5 [" i' i+ J, S        if(X_D_D_flag==1)                                                        //当西东通灯行标志位为1
. M' U# s8 f* P  D9 p9 v" D) @7 X        {1 ?! I+ {% V. r: i. K0 v2 G
                X_D_G();                                                                //西东通(绿灯)  北南(红灯)4 v6 h" d: b8 Q) \
                X_D_D_flag=0;                                                        //西东通灯行标志位置06 G0 E0 k! D: \6 |8 n
        }
3 _2 q4 |/ b" q+ y4 m, O        while(num==20)                                                                //当1s时间到
( x5 M, Z! l6 R        {/ [! Q- n3 N, x8 H: @: Q( `& f. u# a
                num=0;                                                                        //num清0
4 w* J; U/ u8 o- s9 `+ Q                bei--;                                                                        //北时间 减1
/ _5 g$ s! ^1 z9 W                nan--;                                                                        //南时间 减1               
# O1 ^1 i+ x* B$ w# y! C  g                xi--;                                                                        //西时间 减1
3 D6 v' j) g' @                dong--;                                                                        //东时间 减1        ; O) Z5 T- o+ T* c! |
                if(xi<=6&&xi>=0||dong<=6&&xi>=0)                //当西和东时间在0到6秒之间9 l& e8 w6 C* E
                {6 k+ ^0 N9 [) s" i: N% o6 a) T8 A
                        if(xi<=6&&xi>3||dong<=6&&dong>3)        //进一步判断西和东时间是否在3到6秒之间
( F: f0 E; l; y+ P3 a1 N1 ]; P                        {) q3 b0 y/ x5 ]! @
                                X_G=~X_G;                                                //西  绿灯取反
; R9 W& Q( d4 Q                                D_G=~D_G;                                                //东  绿灯取反
& `% i' `  d9 c" n3 N" k/ ^3 f6 Z                        }
$ c, [- i5 I, I9 x                        if(xi<=3&&dong<=3)                                        //进一步判断西和东时间是否在3秒以内, p0 E% b2 P" e. Q
                        {
% g6 h: y: D5 X                                X_G=1;                                                        //西  绿灯不亮
2 t, Y# U, O, h' I2 `4 {                                D_G=1;                                                        //东  绿灯不亮7 c/ C  M, x) O9 Y& o0 u9 B
                                X_Y=0;                                                        //西  黄灯亮- N: t7 t6 ]) ^4 @2 j0 g
                                D_Y=0;                                                        //东  黄灯亮
8 O& s' ]9 v  o) {7 |8 Z, o                        }
. i; n6 \* w8 v9 ^7 [                }
0 q( {7 P: X, Q) _" V                else                                                                        //否则(即西和东时间不在0到6秒之间)4 q$ ~6 e5 _) S1 B
                {
8 J5 H6 w% }; b* }7 [/ q                        X_G=0;                                                                //西  绿灯亮
5 @% Y9 W% g7 h8 i  R9 k                        D_G=0;                                                                //东  绿灯亮  M$ N  m% M* h% s( }6 `
                        X_Y=1;                                                                //西  黄灯不亮* X) Z. P$ X  V4 U3 l
                        D_Y=1;//东  黄灯不亮        
. s4 R; A& B+ c( G' H7 V, R                }  z: W4 i4 A5 ^
        }               
. Q, V- Y. @5 q* ]/ w}5 F' \/ b/ o7 B  a# e
. n% k6 L& X1 S2 v: D& i2 a* m

1 b( x- r- H! @! z. jvoid Time0() interrupt 1                                                //定时器0中断服务函数4 M( M, u6 b2 r; E* J+ l
{
% V& t: c* [8 |% J  P        TH0=(65536-50000)/256;                                                //重新载装初值,设置50ms中断一次- o# h6 H7 A* _! N* d, y
        TL0=(65536-50000)%256;7 L8 M) U" x5 v2 j1 d- ?$ M
        num++;                                                                                //时间基数加1
, p" t8 }) T) V; U+ F, R}
* t( Z4 t( }" b8 o* `                  k3 t. N4 N& h0 V' c/ l7 f! k
void main()                                                                                //主函数入口                                                                                       
6 ]- J9 K# F# g) Z; O& b{' N# m* c6 a2 M4 h  p- F' D6 f- h  ^) z
        bei=nan=xi=dong=time;                                                //把time值赋给北 南 西 东( s# b8 Y' j. l+ u3 Y4 v6 O
        disp_init();                        //显示初始化
; s& B$ [( `. y' U2 }% K& d        Time0_init();                //定时器0初始化函数               
8 K6 X( p  Y( r# U: T        while(1)                //无限循环
3 _" T- G+ ~* ^7 b& H6 F        {  & C8 p# b8 o2 l! U* @3 p8 k
                if(s4==0)                                                                //当P3.0按下(调整时间允许键)
6 `5 ?! C1 ^. ]! w! X8 J2 i8 j: h                {! E$ A/ U9 P3 T
                        delay(5);                                                        //延时去抖" C3 m2 }$ r- C& t& ^& N" N4 u
                        s4=1;                                                //关闭数码管显示6 _6 ]# i6 n+ I1 c$ U
                        if(s4==0)                                                    //再次确定按键是否按下
8 R9 {. D$ {2 {$ z+ }; g                        {
9 q- M, x' g4 ^, W                                time_cl=~time_cl;//时间控制标志位取反(开/关时间控制标志位)        & d" G8 A0 A- e
                                if(time_cl==0)                                        //如果时间控制标志位为0
2 D, a/ o, l$ o# D                                {
/ S9 g" m: }6 i9 e! S- k  }                                        TL0=(65536-50000)%256;5 L& Z' h5 ^! W% A' `( {
                                        TH0=(65536-50000)/256;                //12M晶振 定时时间50ms
# {) N8 }8 N* ~. A. D2 z6 C" w$ E                                        TR0=1;                                                //开启定时器0
# W7 G+ n8 D+ h' ^2 I# I                                        num=0;                                                //num初始化为0        8 J/ q% V1 f( `& V2 W- Y
                                }        ; f( [7 n- s' ?% Y( k. l
                        }        
0 K2 |  ^/ [: I: |8 d                        while(s4==0);                                                //等待按键松开0 x1 g, {. b# d% M7 N  j, R) F" x) _
                }. E% Q! D) `/ H1 |6 k3 ^  C: g0 m8 t
                8 ?  U. `- C3 M4 j
                if(s3==0)                                                                //当P3.7按下(开/关 深夜模式)0 J) u# T- r2 D2 j& D3 Y5 B
                {) }" m: Z. o; N2 ?" o* R
                        delay(5);                                                        //延时去抖: N& o, O6 h; t1 W) [
                    s3=1;                                                //关闭数码管显示. b. {3 ^7 h) B1 ^7 V, P  {9 m
                        if(s3==0): q6 k/ L, E0 r
                        {
# E9 R9 R' v9 S, z                                night_flag=~night_flag;                        //深夜标志位取反(开/关深夜模式),1表示开,0表示关
/ t1 g8 q) \# ^' C4 b, X                                if(night_flag==1)                                //如果深夜模式开* B% D* \- a. M4 ]$ K3 ?
                                {
1 c2 f2 n% W) m0 K6 I9 _: A                                        TR0=0;                                                //关闭定时器0% V2 D/ w% \+ E) {* v5 j8 @' u( H
                                        num=0;                                                //时间基数清0
( t* f& k3 _, E* g                                        TL0=(65536-50000)%256;
0 U. R; Y+ P- A! J, W# p                                        TH0=(65536-50000)/256;                //12M晶振 定时时间50ms
, }4 k* E: s, V; ?  S                                        TR0=1;                                                //开启定时器0
! i: B! C$ c6 l                                        SMG_KZ=0xff;                                //关闭数码管显示        
1 M9 w# B# D# w8 `: s                                }
' N) f& L* _; k6 k$ O                                else                                                         //否则night_flag=0表示深夜模式关(红绿灯正常运行)                                       
% @; G' b' b+ X7 R7 ]                                {" M$ b: ^/ k2 ~: @
                                        TR0=0;                                                //关闭定时器00 k- n/ l0 [  ^, j- f5 C
                                        num=0;                                                //时间基数清0
: H. Z3 G' T1 H; H, Z                                        TL0=(65536-50000)%256;
% D( b) L1 ?2 B$ M( J# Y3 o                                        TH0=(65536-50000)/256;                //12M晶振 定时时间50ms
+ {0 b1 U- @3 Z8 E: X                                        TR0=1;                                                //开启定时器0
5 ?, ~* q8 g" h( t7 P                                        B_N_D_flag=1;                                //定义北南通灯行标志位
5 k$ ~" H5 U' p                                        X_D_D_flag=1;                                //定义西东通灯行标志位        & f' E. U& J6 G
                                        if(bei<=3&&nan<=3)                        //判断北和南时间是否在3秒以内( v* Y' T; I: @6 A; c7 e5 m7 Y% q7 f
                                        {
1 C# y% B! T* j( y% Z/ ?+ R                                                B_Y=1;
1 c) M) l  n+ y: p5 K                                                N_Y=1;" L& Z4 f8 m& }! N
                                        }4 F7 B: y# j' e# E
                                        if(xi<=3&&dong<=3)                        //判断西和东时间是否在3秒以内
2 k3 Q1 J! J5 G* h                                        {
+ k( O7 W$ x$ X6 J7 e                                                X_Y=1;3 W7 j0 X% F$ Z, I4 c! \& `# O
                                                D_Y=1;
; d1 _' k) @4 z) X/ h                                        }                                + Q. H$ L6 E; O7 t- s( }! a/ f
                                }
8 Y$ x+ W) o; u0 f                        }1 s; W+ W3 ?5 x2 L8 r$ T. A6 p4 \9 s
                        while(s3==0);                                                                        9 V9 R9 w, }% p' j0 |9 J  }
                }; v& W( k, v: Q" K6 ?
                if(night_flag==0)                                                //如果深夜标志位为0,表示关闭深夜模式,红绿灯正常运行, N: U2 ]# m/ [. k: |$ ^8 L' {/ |
                {5 I" v. k  I1 D5 _. b' a# \
                        if(time_cl==0)                                                        //如果time_cl=0(不允许调整时间),即红绿灯正常运行
/ E5 @; U& H. @+ Y                        {        5 o7 i, ?4 E% L* G* O( V- \; O8 ?
                                if(flag==0)                                                        //flag=0表示北南通行允许* y; |) a9 p0 U) P
                                {
$ c1 W$ J7 v  m+ d                                        B_N_tong();                                                //北南 通行
: p9 e/ H1 g1 V                                        if(bei==0)                                                //北南通行时间到
' J. n" I+ G; D1 O6 B                                        {. q4 ?/ P3 [0 f! J# S
                                                flag=~flag;                                        //西东 通行允许- [  ?' [1 o% M% N% y3 t+ N
                                                B_N_D_flag=1;                                //北南通灯行标志位置1# u3 z8 E- F# ~8 @; \+ e
                                        }8 H9 e; {* b0 }* M. q. Q+ q2 Y
                                }. J: v7 J0 d% _0 f7 {  |
                                else                                                                //flag=1表示西东通行允许
  f8 D) N: p: y1 @% N  ~; `4 l                                {* e, d' t1 }1 @2 h
                                        X_D_tong();                                                //西东 通行 1 |8 H. M! ~2 W* s  x9 o2 I# }- r
                                        if(xi==0)                                                //西东通行时间到
( `% E5 |; ]1 ^  v, q! q/ a                                        {
/ d* r) E; l& I& W* s% \                                                flag=~flag;                                        //北南 通行允许
' N% o- ~1 ~) j( B! U+ x                                                X_D_D_flag=1;                                //西东通灯行标志位置1
) s3 {8 H4 E+ m                                        }# P/ w( j# c6 l$ p  D6 C
                                }
4 x- \5 P$ L- |& o: q- s        
# b8 e' v$ @/ i                                disp(bei,nan,xi,dong);                                //显示时间数据
. @" p/ C4 A- q' g. \0 w* F                                if(bei==0&&nan==0&&xi==0&&dong==0)        //如果 北 南 西 东时间到(为0)# V) h$ L% t/ n$ w2 F
                                {) T+ L3 A; w  @
                                        TR0=0;                                                        //关闭定时器0: w: b; K7 a: w
                                        TL0=(65536-50000)%256;                        9 `  N# m& c' H+ v: j  u
                                        TH0=(65536-50000)/256;                        //12M晶振 定时时间50ms& E; C* z. ~  v) B- B
                                        for(j=0;j<3;j++)                                //延时显示闪烁3下4 K# Z" {! X' a+ n0 V. r& q
                                        {8 F! e' b- S  \, \. ]8 I
                                                for(i=0;i<10;i++)                        //for语句延时
0 U$ k( p  k+ c( W                                                {
1 q# Z; n# p0 [. c- o$ r                                                        disp(bei,nan,xi,dong);  //显示函数% n( {/ V( q5 R$ s
                                                
) ~7 o0 E# d8 k2 ]5 w1 C9 B                                                }
, q  Q! \/ s( m5 Y                                                SMG_KZ=0xff;                                //关闭显示
2 ?1 j* x% B; ~$ a2 U3 W                                                delay(200);                                        //延时一下
, X9 B- m4 M  O; u  R4 V7 Y                                        }
1 f7 T. B* U2 X                                        bei=time;                                                //time值赋给北- ?' V. u7 v% w6 v% i4 M
                                        nan=time;                                                //time值赋给南
7 X3 ^  ?3 I7 [8 j5 L3 w% L                                        xi=time;                                                //time值赋给西
3 t! Q6 v' o* b                                        dong=time;                                                //time值赋给东& p6 \( F* n6 [4 Z3 q' D- i
                                        TR0=1;                                                        //开启定时器0( n0 U% D: y8 {# h; ^, N: ]
                                }
* z4 \: u- ^6 k$ m; c5 H                                else                                                                //否则
$ d3 R6 f2 L) J( v% B6 G' j                                {}                                                                        //空操作
' \, ^3 F- e! T                        }, B) a, l# U9 A% E3 k* g
                        else                                                                        //如果time_cl==1(允许时间调整)  J" x2 }+ l: Q0 y; B% ]
                        {
; ]: S$ j) u1 h: O! a9 g% L                                TR0=0;                                                                //关闭定时器' g/ F- D2 P0 T; r7 _% N0 n+ J
                                TL0=(65536-50000)%256;) T- ?5 |% C8 x+ s; D* t) c+ ]3 @+ d8 \
                                TH0=(65536-50000)/256;                                //12M晶振 定时时间50ms0 |6 u0 i6 H: {5 V( }
                                num=0;                                                                //时间基数清0' W7 F  r; ]: u4 y" u* N; Y) O
                                bei=nan=xi=dong=time;                                //time值赋给 北 南 西 东. V4 z1 ?: v7 p/ W, ]
                                disp(bei,nan,xi,dong);                                //显示时间数据. ]! k& C0 ~- i3 h7 G
                                if(s2==0)                                                        //当P3.1按键按下(操作时间加1)6 m: q! e: ~$ ^) s: P
                                {: n2 j; _* v, y, E$ O# t% C8 L
                                        delay(5);                                                //延时去抖
0 V6 T; h/ f% X. o5 A                                        if(s2==0)                                                //再次确定按键是否按下
# I1 l- U* X. ]" K3 g% l- J                                        {$ w! ~( [# o) H2 |
                                                time++;                                                //时间加1
; D( D% i3 \9 r1 g% X: [! r2 b  t                                        }        
% |# S, C; z$ R                                        while(s2==0);                                        //等待按键松开        + _! H# V4 q0 R" W( t
                                }
- G7 \1 c: t) h. n0 @$ y- K                                if(bei==100&&nan==100&&xi==100&&dong==100)        //如果北 南 西 东 时间到1006 d, V) |; \9 V$ ]. {
                                {        ; j! j/ _* w1 w7 U0 C5 Q1 G2 h3 L
                                        time=1;                                                        //time等于1# s6 f; Q% l/ l0 P
                                }
  ^( `5 f4 R' c; H9 _                                if(s1==0)                                                        //当P3.6按键按下(操作时间减1)               
4 r  O, c3 X; G' j+ Z& l                                {                                                                                : j( ]9 G% W# Z7 a& K. r6 {% }6 Q' P- m
                                        delay(5);                                                //延时去抖
" m+ `1 X; M3 R* Y# m: z                                        if(s1==0)                                                //再次确定按键是否按下
+ s  O) O' q# b  p  H                                        {! X. |4 i8 L$ g, }  L! a
                                                time--;                                                //time减1
" O' J: ^5 Q* u8 ^+ a% v. k3 ?5 m                                        }! Z+ K' ]- O: M$ z* ?% o# z( n1 C
                                        while(s1==0);                                        //等待按键松开" x3 L8 A+ ]0 t: k% E2 p6 v
                                }
$ q- S4 u. {" b$ M$ K7 V* }2 I                                if(bei==0&&nan==0&&xi==0&&dong==0)        //如果北 南 西 东 时间到0- }+ _3 }" u% D# h1 w6 b9 R
                                {
) `4 R, @  _# U- w1 {                                        time=99;                                                //time等于99
) r! v# Q( B6 e  U4 U5 c1 ]                                }        
( P% b0 Q" M" k) X& M                        }8 t' Q2 M( C4 G5 v7 w, U) W1 i* ~- l
                }. R2 y5 R1 J2 Y8 {; W1 B9 ~- A9 n
                else                                                                                //否则深夜标志位为1,表示开启深夜模式
8 Y' g* b5 z6 }7 Y- R) n  O                {                # O. Z2 O2 r/ H
                        if(num==20)                                                                //当1s时间到
* z, J* M0 }) W1 N* H2 m                        {% u0 O1 n2 u7 W/ O
                                num=0;                                                                //50ms时间基数清0
. \) [$ j: _2 z4 g7 M1 I' ?: p* h                                night_mode();                                                //深夜模式
; M+ j: Q4 E' x' E                        }                                
5 G) k( v- ?7 J                }
4 ]1 s/ P  }( ?& D0 u7 d  //  disp(69,69,69,69);                        8 @0 Z% c, c, r( I5 B
        }
, w. W+ q% T0 p- c    5 R$ W* Q5 c, d" E
}4 X# ^! Q9 R% Z: T
# x, V/ `" t1 c8 e

, W. x( a; E# r3 t" s1 b7 C2 x$ @2 f+ f. Q
) V& u1 X: M: N9 \5 |% n
( i4 [" b7 ?  l0 f

* g8 `' g) c# d8 ]: {, o/ i
0 Y( g6 [* y* h6 x

/ V3 x% O  G: y  n
$ S- A5 z  U0 q2 ^0 V

/ @5 D! C9 p; G8 S9 b
. g6 }6 Z6 ?: o. L

  R1 o% @: i6 zvoid disp(bei,nan,xi,dong)                 //显示(北 南 西 东)时间函数. B/ D6 x/ j3 t  {( W5 Z; ?
{0 u* p8 {7 H. r% N5 N' O" U
        SMG_XS=Data[bei/10];                //显示北的十位
6 ]& X5 s, b/ T( N) ]& B0 A  {. T2 W        smg1=0;                                //允许北十位显示. O# R2 H+ p2 g5 V  G
        delay(t);                                        //小延时一下,使数码管显示更清楚
7 q4 c+ k; r% h; D6 f    smg1=1;                        //关闭数码管显示(消隐)0 E& R" h) `6 M$ T( n3 u1 y
        SMG_XS=Data[bei%10];                //显示北的个位: Q$ D, S4 \9 d$ F& y; m  p
        smg2=0;                        //允许北个位显示
3 ]& Y& ]% J2 i( e    delay(t);                                        //小延时一下,使数码管显示更清楚
# h9 h8 b! e: s  Q4 U        smg2=1;                        //关闭数码管显示(消隐)        0 k  S/ b% y2 k, ]. v3 }3 o
        SMG_XS=Data[nan/10];                //显示南的十位        
5 N8 {: u. A' {- e) Y//SMG_KZ=0xf7;                                //允许南十位显示. y8 ?7 w! r' Q5 F3 [
    smg1=0;; A1 F; G) H% C6 ]1 X
          delay(t);                                        //小延时一下,使数码管显示更清楚3 g3 R1 W. M1 k( [# e
        smg1=1;
& u) q0 H& O) j2 ~, x    //SMG_KZ=0xff;                                //关闭数码管显示(消隐)8 f! G* _/ d) _1 x5 K$ H; U  W3 O
        SMG_XS=Data[nan%10];                //显示南的个位
6 I; \( C7 ], I1 M) O& _2 U% V8 {        //SMG_KZ=0xfb;                                //允许南个位显示9 f9 O3 \& K( N
    smg2=0;        
. _) H0 ]: C/ T( F    delay(t);                                        //小延时一下,使数码管显示更清楚5 Y* H* C' g! O# f( R5 H
        //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
3 ~: m, V, w: ^    smg2=1;
$ V8 @5 G' u0 G9 w        SMG_XS=Data[xi/10];                        //显示西的十位        5 J  W5 D' C# ]# i
  //        SMG_KZ=0xdf;                                //允许西十位显示
1 Z, D: p( |+ `& q, P% D        smg1=0;7 Y9 Q8 H1 z! r4 G- _
    delay(t);                                        //小延时一下,使数码管显示更清楚) C% r  `8 v$ s/ \9 \1 O# N* P& X+ i
        smg1=1;
' t: e& E6 \$ x* v6 m    //SMG_KZ=0xff;                                //关闭数码管显示(消隐); d$ \5 Z& t/ w: b) ?. n0 @
        SMG_XS=Data[xi%10];                        //显示西的个位
. ~1 |8 D3 k, g1 P9 ?+ m        smg2=0;" j9 k" B2 U) _
    //SMG_KZ=0xef;                                //允许西个位显示
. U, v* `* f+ ]  B4 Q' x" J: W% b        delay(t);                                        //小延时一下,使数码管显示更清楚1 \) m1 V! H1 T( s) c, x
        smg2=1;
4 O: b( j* ?( y' B: S9 q' f: j' f    //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
! U2 v* b) p& W1 A; W5 f- D3 H" W  G

# b. J" O) ^1 r2 G+ m" N        SMG_XS=Data[dong/10];                //显示东的十位               
# `) s$ B% |, ^$ Z: X+ M; D        smg1=0;; Q- x- d: {; Z1 `5 P
    //SMG_KZ=0x7f;                                //允许东十位显示
8 l+ S' G) }( B( O" h        delay(t);                                        //小延时一下,使数码管显示更清楚
  X6 X! v) G0 T9 R0 j7 y  R4 c, v        smg1=1;6 o& W8 V  i6 D1 y0 ~
    //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
' W  r7 [# U& r3 L3 _7 b3 _8 ~        SMG_XS=Data[dong%10];                //显示东的个位
7 X& y8 ^2 ?4 |! O1 n        smg2=0;//
; Q% N; \' d3 R6 {) G    //SMG_KZ=0xbf;                                //允许东个位显示
& S) A* l1 c; u( T5 q        delay(t);                                        //小延时一下,使数码管显示更清楚
! S) r" v. m$ @( W4 |! n& j% i( f        smg2=1;; s9 ^4 [+ z% i5 f" n% H9 R6 E& P
    //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
& R# z' s# Z( [2 P$ j}0 [: C& z2 V( Z0 B  z; x
void disp_init()                                //显示初始化
" F2 _4 |; S- P5 N  F; M6 T( c, f: g{$ _6 S  B* ]8 p* ~& @/ b& C- \* L
        for(i=0;i<3;i++)
3 X/ Y6 d+ i1 X; w' |( K        {) _7 I0 Y; r/ g
                SMG_XS=Data[10];                //数码管显示"--": U% `2 q! u/ |. `( M6 u& Q' p$ v  O
        smg1=0;
+ k1 h) N. h7 x4 f        smg2=0;//允许数码管显示
6 y- _( r, g5 z+ `( q+ [        B_R=0;                                //北面  红灯
7 @/ M) f; L; \4 X, a        B_Y=0;                                //北面  黄灯' O9 |8 X% U' {  D7 q3 \
        B_G=0;                                //北面        绿灯
: P* U. x2 W; Y; N7 r. M) a/ B        N_R=0;                                //南面        红灯6 }9 I4 Y' D9 h6 P! `1 z3 X
        N_Y=0;                                //南面        黄灯
& A. [; S; B1 m8 |            N_G=0;                                //南面        绿灯
) p; K4 Q& C: \) \" O        X_R=0;//西面        红灯' I0 W9 l7 H7 g& p2 C' y
        X_Y=0;                                //西面        黄灯
9 S% e" I9 \8 h% c& g  `4 z) \- r, R        X_G=0;                                //西面        绿灯) j& J  D3 L! h% u6 M( [
        D_R=0;                                //东面  红灯7 }1 e$ F; x' b+ m( g; T
        D_Y=0;                                //东面        黄灯8 P# _7 m0 s: I7 M
        D_G=0;                                //东面  绿灯
, `1 T1 E9 T8 ?5 g0 d/ t( j                delay(300);                                //延时/ i7 o$ M2 x; i) F) W/ E# ^
        B_R=1;                                //北面  红灯
) Z  V3 E% q5 N9 K% G        B_Y=1;                                //北面  黄灯4 Z2 H: y2 n' Y& l% Z7 B
        B_G=1;                                //北面        绿灯/ h; C/ M9 x( H/ g- D: r/ A
        N_R=1;                                //南面        红灯, T) `5 s" V2 }% s& ?5 s0 K# Z; @+ [+ \3 h
        N_Y=1;                                //南面        黄灯' p. }- o' e5 ~5 N, p# W
            N_G=1;                                //南面        绿灯3 T. \) Y0 A; c" |0 y) g
        X_R=1;//西面        红灯
3 {8 N! @/ G1 M' x! s& o        X_Y=1;                                //西面        黄灯
$ I/ W& g* [/ q* v  g        X_G=1;                                //西面        绿灯
' Y, E& S# o9 X2 E" U        D_R=1;                                //东面  红灯" p" }' D9 G7 K4 ^/ Y
        D_Y=1;                                //东面        黄灯
' j" I; [3 e0 H/ J) l; i! u9 _+ n2 k4 e3 a) h7 R9 }
* d! A2 k; }1 @/ `3 Z# c

; r1 r* ~" S! A- C8 w& Q3 \6 X( j: {

5 K2 L) u. b, H$ h7 X# E…………限于本文篇幅 余下代码请从论坛下载附件…………% h: A, `  c+ F9 J
游客,如果您要查看本帖隐藏内容请回复

8 [4 l# P7 X/ D

/ B  [$ u. J; Q6 Y0 d. f) U

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 16:00 , Processed in 0.203125 second(s), 26 queries , Gzip On.

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

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

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