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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机交通灯设计资料下载 已做出实物 含原理图PCB 注释...* W- Y6 `( L! D7 \0 Q
; U7 E8 X2 D% d/ S; L* J& i
* p  m3 a5 o% M: i2 D9 s4 |
下面的交通灯设计的配套资料,希望能帮住的有需要的同学:. T9 `+ I9 F6 Q8 D% H( t/ s, Q

* L$ @; F  e. N5 l2 C; M- U8 Y
' c& \7 E' E1 B0 B$ w/ _( W % ]. R3 |- b$ c5 y* z8 L
# A0 I+ ^/ }+ C0 P, V) B

# k: B; s0 v8 i# Z/ Q8 w电路图我们提供2种格式,一个是DDB格式,一个是PDF格式,2个格式的内容一样,选择一个适合自己的打开。, I0 ?" ?  A4 `1 N# u5 m1 c- U" _
DDB格式的打开需要安装protel99SE软件) {1 J% E  u0 G6 a3 M
PDF格式的需要安装一个PDF阅读软件8 C- d( b, Y& E5 d$ }. Q
以上2个软件百度里面都可以找到,请亲们自行百度;
, u" G- f5 ?) Z. |/ F, \
0 O- i0 V1 {. p: W1 b  o! t
* ], |  d* e& x* H
* w- F' X1 _7 a
本proteus仿真文件是proteus7.4版本创建的,请用7.4版本或更高版本打开,较低版本可能出现无法打开的现象。; e) Z9 h8 G  J0 z
8 y& w# h* s  B, _8 ^- N6 A
' e/ t) H* `& p2 \# r
元件清单:( n0 T8 C8 C+ e7 M5 o* f9 A2 X
* n; g" Q5 D! R
元件名称数量
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

  p1 I+ J1 o! ~单片机源程序:
, P, a* d$ O- v
/***************51单片机交通灯设计*******************/. o7 w5 \+ ]8 M
4 y* j/ Y6 Q8 o4 z) v7 Z

5 ~" @3 X0 q7 P% Z! x#include : |/ N: Z& Q1 n2 E7 J8 z
#include
  ~$ ]9 p0 T4 _8 s* K#define        uint unsigned int
  F9 |, \) b4 r% L3 a# q& R! L#define uchar unsigned char% |# x. l) f, J5 G
uchar night_flag=0;                                //深夜标志位* }. C( P5 t# q, v3 t
uchar time_cl=0;                                //定义时间控制标志位  取0        7 R' u3 o& S' M7 I% N
uchar flag=0;                                        //方向通行标志位
- b# s6 \, D" x; K3 \0 Muchar B_N_D_flag=1;                                //定义北南通灯行标志位! u5 t# L) S0 A6 M8 W
uchar X_D_D_flag=1;                                //定义西东通灯行标志位
% U0 ], M8 h9 _# K1 u* L3 o$ Nuchar i,j;                                                //定义变量i
) L  \& C5 H/ A- I. f$ p2 J+ Vuchar t=3;                                                //数码管动态扫描延时时间基数
/ ~  w+ M/ a, U, [( J5 Duchar num=0;                                        //时间基数初始化为09 t; l4 s& D$ P- B* x- d
//uchar num_night=0;                                //深夜模式时间基数为0
9 A  a" F% L2 N5 W& u1 R, c  c: suchar time=30;                                        //time初始化定为30秒. n/ e7 a: \+ e# E4 x3 H1 @3 E
int bei,nan,xi,dong;            //定义  北  南  西  东# d; V/ S: F* f. ^- y
uchar code Data[]={0x18,0x7B,0x89,0x49,0x6A,0x4C,0x0C,0x79,0x08,0x48,0xEF};0 G: J: x$ @+ ?
//定义数组  数码管   0    1    2    3    4    5    6    7    8    9    -) y. y9 P6 t2 i) Q+ r/ E
/***************定义  红黄绿灯**************/1 z/ a/ [3 g- G
sbit    B_R=P1^2;                                //北面  红灯$ F4 W1 C+ P( P; k+ o$ t- k
sbit    B_Y=P1^1;                                //北面  黄灯
+ a) `: [$ i- Y* Vsbit    B_G=P1^0;                                //北面        绿灯
1 m- H! Q, p) gsbit    N_R=P2^0;                                //南面        红灯/ F8 o5 W1 W, g$ q; x  ^
sbit    N_Y=P2^1;                                //南面        黄灯6 S# \/ `$ B" Q% P6 h( D5 O! f( M
sbit        N_G=P2^2;                                //南面        绿灯
6 Q  }4 I: h% X6 ssbit    X_R=P2^5;//西面        红灯4 ]( U4 l4 _' N
sbit    X_Y=P2^6;                                //西面        黄灯1 \& j: n7 Y9 H/ X# K0 L6 O
sbit    X_G=P2^7;                                //西面        绿灯6 ?4 _$ u2 r6 E4 u# Q4 y

- Q, [/ f+ b4 G: n3 z8 J
/ q/ C$ g1 l; d& D3 [) `0 I6 K1 J9 h
sbit    D_R=P3^7;                                //东面  红灯
% e2 v* r- P& }, vsbit    D_Y=P3^6;                                //东面        黄灯
  |/ K: x; s% E" B$ V) u+ G* L  _sbit    D_G=P3^5;                                //东面  绿灯  R( c! x1 X1 |$ |6 d2 B7 N8 H

6 X) J, L, ^1 l$ M" W
* o" J! s5 J3 f1 L; I0 q+ V
sbit    s1=P3^4;//时间减, |( e% L. g2 F( H* F. v$ L; o
sbit    s2=P3^3;//时间加
( ?  V5 p; a) F( c$ S8 O. j2 csbit    s3=P3^1;//白天和夜间模式控制切换口( R8 k; w3 l, q& \2 t
sbit    s4=P3^2;//进入时间可以设置状态的切换口
. X% x& g7 b4 e0 {7 }3 }/***************定义  数码管*****************/; m: i. \: r9 ]* s! O( ]
#define        SMG_XS        P0                                //数码管数据显示! F% [6 t" `' J/ |' r+ d% K
#define        SMG_KZ        P2                                //数码管控制显示) w- H; P- ^9 E- u& w3 A! ~+ n. e
sbit   smg1=P2^4;//定义数码管1控制口
  e0 c5 [8 t& z( V) tsbit   smg2=P2^3;//定义数码管2控制口
9 c0 I% D) u( [( M" [8 [void delay(uint time);// 定义延时程序0 R% R! j6 a8 k3 l
void disp_init();//显示初始化$ U6 c) ], m. n! L6 f
void disp(bei,nan,xi,dong);/ U& _6 {1 m) u0 H' z) o' J

: b; `& k/ i$ {

) e# w' A( O' Z# N: x" O
$ @# d2 b; \  n0 D8 `

! r7 m# C% @& V% y% X4 ^) }$ M) P! L5 T, W4 h4 e

/ }3 @2 j/ H% N! Z  n0 _
, `% A7 @, ~/ G9 d' C8 u

5 s1 M7 _/ O# V: ]) H! F8 Zvoid Time0_init()                                //定时器0初始化函数
- n6 N/ L1 ]3 U9 L% ~2 l{4 q5 Q" g+ I6 t5 D- A
        TMOD=0x01;                                        //定时器0为方式1
9 d* r+ Q8 _0 `        TL0=(65536-50000)%256;; O9 Q4 R7 i7 k8 T  V
        TH0=(65536-50000)/256;                //12M晶振 定时时间50ms( W9 [7 T& n7 Y7 ^3 ]' e, E: a, y% P
        ET0=1;                                                //开定时器0中断
7 Z7 ]& X. G2 ]9 F, z        EA=1;                                                //开总中断
' {/ ~9 Y, M7 p2 Z; y2 o        TR0=1;                                                //启动定时器0
$ B) u! R9 C# M}
  h* H# u- t! A. O6 j4 @# K; J% @2 q+ R! N. R% }

/ E$ w, C" |& E  Uvoid night_mode()                                //深夜模式5 Z* y% q3 C$ O6 k0 [
{
& `! F; X0 e: |/ g  D! ^+ l1 _        B_R=1;
- N- _# K9 z& E' o5 m        B_Y=~B_Y;                                        //北 黄灯取反- K  e& e; F2 R; S% z+ H# y/ {
        B_G=1;
) n3 g! M/ ?' {6 ~/ S        N_R=1;+ Z; H7 c# U* T- C$ T
        N_Y=~N_Y;                                        //南 黄灯取反
/ P3 Q+ B8 Q5 w, g9 ^5 b        N_G=1;
: `% g3 z+ g0 t: z- L5 k  K
1 x" J. \$ q# o: a1 i

* T. M/ O1 M( s& b  p# [6 H+ s4 v        X_R=1;                                       
. o; P# h6 a9 P        X_Y=~X_Y;                                        //西 黄灯取反8 ?3 Y" g+ L" y. W/ _
        X_G=1;
% q  J4 d; y6 }0 ?, w        D_R=1;
: i# }: @/ m  L* S        D_Y=~D_Y;                                        //东 黄灯取反3 x2 ~  j; v# X) N% S, h9 c  D; c5 _
        D_G=1;        & W8 I- N" \8 n# q* T2 ?
}& C. e# n9 ?! e; {$ j6 |- P# F

2 i; X/ t! {$ ]5 ?7 l$ ?+ e

, E4 P" e! a1 J- n2 h0 Dvoid B_N_G()                                        //北南通(绿灯)  西东(红灯)                        1 X1 M7 Z) W8 _& O, p. h+ \' C7 D
{+ Z2 Y" v- @  \1 O4 ?4 Y" T) a4 ~
        B_G=0;                                                //北  绿灯亮
4 u8 W& d# Q" N7 @, ]        N_G=0;                                                //南  绿灯亮
* T% C$ t* M7 l# y        B_R=1;
0 d' \( _# Z% @2 u- b        B_Y=1;! o3 h, O" ?$ w; W$ b
        N_R=1;
% s; P/ ^8 x8 ^. B; X$ Q        N_Y=1;, Q) W, @" e) h0 ]
' `' C1 Y8 e& T/ Q9 K  s  z5 _! U
1 y8 @- G+ W+ w2 T5 F) ?
        X_R=0;                                                //西  红灯亮
9 p; u: O+ L& b5 N1 |( J        D_R=0;                                                //东  红灯亮  D: _# f- w' `8 {  \: n. Y: x
        X_Y=1;
( e; h9 k. z7 Y. X; E" `        X_G=1;
# g% g" y- d6 r7 v% d" w6 {        D_Y=1;
: H$ }) E) g# a1 ]+ K! x$ f7 F        D_G=1;
1 y5 B2 b) z1 _% L" j" g8 ?2 {! |}
: u) {: |: j+ d  l% t* `* t9 A$ h
! S, ]6 `% M' x  G

- K/ Z. u3 p# j: ~4 b7 [+ [! K* |1 Wvoid X_D_G()                                        //西东通(绿灯)  北南(红灯)                        ( P1 M1 V- P: P: Q
{
. u" E. ?& m# I" U, S& w- K  s        B_G=1;
8 y7 H5 J, X' o+ y        N_G=1;
+ a( a6 t+ J, n4 ?! H0 _0 f        B_R=0;                                                //北  红灯亮: ^' D7 `/ z8 C6 q6 f. g' N
        B_Y=1;* e- D. L9 X; R" y
        N_R=0;                                                //南  红灯亮
) a, V6 D+ u- R- i. S        N_Y=1;
  t3 Y5 H8 u  G+ q9 }5 [; X$ g( _0 e, p4 M

: d0 T! k* D/ K        X_R=1;
6 n8 M* F; N0 C& ]2 E: H8 k8 `+ W        D_R=1;
0 M1 h( z$ \# P& z        X_Y=1;
! h; J$ i1 C9 Q  M; a+ C. n4 _# n& W( O        X_G=0;                                                //西  绿灯亮1 @" J! n' w4 c9 ?6 O1 w# t0 c
        D_Y=1;, R' H' R* r  q4 e/ H: c0 G
        D_G=0;                                                //东  绿灯亮
; i; @1 J0 ?# D8 w' W}* s- c3 P: s* a8 C

; [: j! F, N# B6 D1 V- e' W- A
7 e8 a3 d) ~# m0 j1 v1 o
void B_N_tong()                                        //北南 通行
8 H7 ?$ C: r7 q2 t6 J{
! N* i; D2 y" i2 p9 C% A        if(B_N_D_flag==1)                        //当北南通灯行标志位为1# j5 x- s4 l. O$ c. G, n/ v. [- s
        {' p- h* A7 ^6 m, m+ @- _
                B_N_G();                                //北南通(绿灯)  西东(红灯)7 H0 y" w2 E  F6 z0 D" H% C
                B_N_D_flag=0;                        //北南通灯行标志位置0
" M" f  w/ u4 N  {7 _( f6 [: d9 W# |        }
$ ~( a* x: V8 U, j! \: K        while(num==20)                                //当1s时间到
+ m! _: H! J6 x4 f- g0 S4 ]        {
7 i2 g/ Q; g* e! x! _# D                num=0;                                        //num清0
: i' k+ E" |# J4 e                bei--;                                        //北时间 减1- p8 E8 D; C) M) z
                nan--;                                        //南时间 减1( u, i/ w" u& f  Q2 f: k' n
                xi--;                                        //西时间 减11 U! @; ?2 M  l' ^2 @1 r0 n/ B
                dong--;                                        //东时间 减1
( q  i, K0 X" h! |9 q                if(bei<=6&&bei>=0||nan<=6&&nan>=0)                //当北和南时间在0到6秒之间
' ]" C4 |1 Y$ f5 x2 z7 g/ W                {/ O7 {% w$ e- j( t4 M! L
                        if(bei<=6&&bei>3||nan<=6&&nan>3)        //进一步判断北和南时间是否在3到6秒之间
9 @6 h- t7 W' c* E4 D                        {2 A& D2 D! Z& x2 o" t6 q( J; B
                                B_G=~B_G;                                                //北  绿灯取反
% J0 U% j6 Z3 K1 i8 E                                N_G=~N_G;                                                //南  绿灯取反
# S1 e  _/ D& i0 j7 R5 p% D, |# N                        }/ l1 o$ I' \+ L% x% O
                        if(bei<=3&&nan<=3)                                        //进一步判断北和南时间是否在3秒以内9 ?& y" P& v5 G: i( z
                        {
4 y; f+ j0 _: n0 O, o* @                                B_G=1;                                                        //北  绿灯不亮! f  j& U2 T- D  y: |( N
                                N_G=1;                                                        //南  绿灯不亮$ _) i9 g6 D# @0 g, q6 a9 J
                                B_Y=0;                                                        //北  黄灯亮
: ~1 V4 W/ m% c" Y                                N_Y=0;                                                        //南  黄灯亮, I* T  c# G4 y3 X, N/ }* M* v; p
                        }2 Q% R2 K, t( I8 m* T  Q0 |
                }
3 _' Z* g- z) ?1 j% ]                else                                                                        //否则(即北和南时间不在0到6秒之间)8 z( o! q4 w& k9 c5 t, f; u
                {
* R( P7 E2 C! n                        B_G=0;                                                                //北  绿灯亮
/ W: B# A) m/ b9 B. P                        N_G=0;                                                                //南  绿灯亮  L* [5 [" i6 f' @
                        B_Y=1;                                                                //北  黄灯不亮
! a8 h. W% C, L' [  t- h9 G* |                        N_Y=1;                                                                //南  黄灯不亮! G( L" @6 `& W) K" O: v2 |$ t1 |
                }
5 n8 R5 P( n2 I! f, m0 E6 q! u        }
6 K, \" M/ [7 y' E. B3 S}# Y1 a, Q) X6 T
9 n& u9 A0 O; n7 a7 u1 q
; `8 Q0 I. f' A7 W4 n* }- G: U
void X_D_tong()                                                                        //西东  通行
. O' |1 B7 e# W# ^{1 [5 E+ U* D) z- A) P
        if(X_D_D_flag==1)                                                        //当西东通灯行标志位为1& G/ j' E1 t+ I  C/ L2 O' W  g
        {
( z8 ^! @1 D$ n, Y  Z8 m                X_D_G();                                                                //西东通(绿灯)  北南(红灯)
8 a& r7 ~; E) B8 g- O0 }                X_D_D_flag=0;                                                        //西东通灯行标志位置0
1 R0 ]7 o5 i/ a/ D9 W. I        }# i9 n. v* c9 G2 s! s* G3 _8 {+ q' o2 ]
        while(num==20)                                                                //当1s时间到
& e+ b; p4 p* w& c$ J9 o        {9 B7 t- u: z4 x- m+ o4 Q( Y' J
                num=0;                                                                        //num清01 {* c. g) P: \: J
                bei--;                                                                        //北时间 减18 B1 }5 s6 ~- u: \2 ]
                nan--;                                                                        //南时间 减1               
/ s3 Y/ M0 P- {% y  f                xi--;                                                                        //西时间 减13 j9 N! `; j, k7 c, J' P
                dong--;                                                                        //东时间 减1        2 v/ ~" i; G( _3 S; b- [
                if(xi<=6&&xi>=0||dong<=6&&xi>=0)                //当西和东时间在0到6秒之间
" D) O+ R9 v; f                {
0 H6 m; I2 N$ B* w                        if(xi<=6&&xi>3||dong<=6&&dong>3)        //进一步判断西和东时间是否在3到6秒之间' I& V* X9 u8 ?! q
                        {  W% F- P5 b/ s4 w1 m7 {/ C" \5 Z- E
                                X_G=~X_G;                                                //西  绿灯取反% S3 o9 S  a1 S% f6 f% C6 I
                                D_G=~D_G;                                                //东  绿灯取反  }3 q# i' R0 @, p0 F8 D
                        }* x; u8 v" t0 H% ^1 W" P
                        if(xi<=3&&dong<=3)                                        //进一步判断西和东时间是否在3秒以内% ~4 A, b- H4 E$ T$ Y6 G+ ~
                        {; X% d. ?& S+ B: D( P* \7 @" w
                                X_G=1;                                                        //西  绿灯不亮
5 A( h9 x$ g$ `9 W                                D_G=1;                                                        //东  绿灯不亮1 H! E3 K2 ]1 g1 V4 C
                                X_Y=0;                                                        //西  黄灯亮" R" J* D+ @9 h* a  l6 Q/ b2 D
                                D_Y=0;                                                        //东  黄灯亮
; P% f) i% Y, a, g# y                        }
/ L; ^; b/ ]' }* u3 |/ |/ d                }% F7 J; p  K3 O9 g0 Q/ v3 O( k
                else                                                                        //否则(即西和东时间不在0到6秒之间)7 b' c4 ?5 m' d
                {! s1 [# |7 F* x* q
                        X_G=0;                                                                //西  绿灯亮
/ c1 d6 G& i5 X1 P3 I                        D_G=0;                                                                //东  绿灯亮2 H# `7 [5 J0 b: ^! U8 Y
                        X_Y=1;                                                                //西  黄灯不亮
) L: L: x, J% e1 b! w' {                        D_Y=1;//东  黄灯不亮        
2 `* w- E- g* P8 U$ O) b                }
; N  L( o2 H# _& y" b- l0 f        }                9 A8 J1 Z/ I+ t  F0 L
}
6 A# [3 A2 U" c7 A
& G* I, K' u8 e" L8 Y2 i/ x
) E6 o7 n6 F+ n# Z
void Time0() interrupt 1                                                //定时器0中断服务函数5 u# U$ @% G7 S; C$ X
{
. p2 s2 ~" ?6 ^+ b0 T        TH0=(65536-50000)/256;                                                //重新载装初值,设置50ms中断一次8 p9 W4 h' \# w9 v, e+ e
        TL0=(65536-50000)%256;6 k6 b# |: d. S
        num++;                                                                                //时间基数加1
7 }. D5 A1 p  c; S}
5 s6 C* Q" W1 Y+ U+ R4 _# l/ i* y) w1 h                ( W7 r/ x5 m' N2 ^$ i- n9 j
void main()                                                                                //主函数入口                                                                                       
* t5 W. y! n) _' {% C{
1 a6 c( {4 ]: N3 ~% ]- }        bei=nan=xi=dong=time;                                                //把time值赋给北 南 西 东
+ l7 g4 V$ j. `' f* X% b* u$ z        disp_init();                        //显示初始化  e. W3 o1 K- [3 C+ |2 |0 ?* b
        Time0_init();                //定时器0初始化函数                ( G+ f5 k4 Q) R2 {/ \: Q+ l! r
        while(1)                //无限循环
! [0 b, S; d. d3 C        {  
. y# y( }' n9 R2 S                if(s4==0)                                                                //当P3.0按下(调整时间允许键)
  `) F7 K- R$ N                {
5 x$ Q1 ?, @# Q                        delay(5);                                                        //延时去抖
' O/ l" N) A. T* U4 Z# y) d                        s4=1;                                                //关闭数码管显示
; C. x+ d8 D! b& |! M6 Q$ q* }$ Z                        if(s4==0)                                                    //再次确定按键是否按下
& ]. B8 _' w. [# b% C                        {
/ ~' G/ y! u) q/ O$ k5 W                                time_cl=~time_cl;//时间控制标志位取反(开/关时间控制标志位)        & g+ T0 e3 L; U+ M
                                if(time_cl==0)                                        //如果时间控制标志位为0
( B2 a0 Z* \6 h" K8 {$ V, ~                                {0 T( t' W$ @. q  ?  Y% @
                                        TL0=(65536-50000)%256;
. c( b  {, ]/ f& K1 r6 u1 u; C                                        TH0=(65536-50000)/256;                //12M晶振 定时时间50ms
4 P+ `3 r2 |9 r& j- x, n; h                                        TR0=1;                                                //开启定时器0
, S# R# f% N4 ^1 u$ P4 P6 X$ y                                        num=0;                                                //num初始化为0        
$ ^: r# M/ S+ C0 J                                }        
4 [0 h) }% C' ~* U                        }        
; U+ d1 Z) \  Y) @) j7 X                        while(s4==0);                                                //等待按键松开
, e# n* l$ S, a  C                }
! _1 q3 R  g1 l8 ~+ a0 O2 \& \                & T& y' R# j7 s4 ]6 l
                if(s3==0)                                                                //当P3.7按下(开/关 深夜模式)
* p2 E: J6 K* Y2 j, x                {
! }3 l1 g; \1 f# d+ T1 f                        delay(5);                                                        //延时去抖% z3 c' h: T: d, D  `, ?2 [
                    s3=1;                                                //关闭数码管显示7 u4 r# ~, z& {) n
                        if(s3==0)
* K! _6 S+ c% P9 V2 t' {                        {1 R5 S, b# Y- {5 K! S+ s! V" @- N$ c
                                night_flag=~night_flag;                        //深夜标志位取反(开/关深夜模式),1表示开,0表示关! m) P4 F8 r0 T! s) g" m/ V
                                if(night_flag==1)                                //如果深夜模式开
7 C; E# o! q$ v  C, \6 q; [) A                                {
2 R9 R! W" k* l) H' U) U                                        TR0=0;                                                //关闭定时器06 [2 X( s) ~1 Q% `' ~  Z2 x
                                        num=0;                                                //时间基数清0
9 E* }1 T6 s; O* `                                        TL0=(65536-50000)%256;
: l; m' J! j5 {& P' S1 I2 ?. B                                        TH0=(65536-50000)/256;                //12M晶振 定时时间50ms
  s# c; E- o1 F0 b7 z! ?                                        TR0=1;                                                //开启定时器0
" q( N/ {$ x( X0 ]# x5 r) y                                        SMG_KZ=0xff;                                //关闭数码管显示        ; P) [3 c1 [* a: N5 Y5 J7 a
                                }
+ K+ [3 N2 K2 d3 b$ C" G" g6 @+ r& v' D                                else                                                         //否则night_flag=0表示深夜模式关(红绿灯正常运行)                                       
" f& @0 g( N3 E                                {
" p+ H# u: w8 a& S                                        TR0=0;                                                //关闭定时器0
3 R- z5 o- ~: ~0 S2 Z                                        num=0;                                                //时间基数清0+ V) K# Z9 s1 ]) k  ~
                                        TL0=(65536-50000)%256;
. i7 J* D5 E* y& r! l* w                                        TH0=(65536-50000)/256;                //12M晶振 定时时间50ms
$ V0 v% S0 B! E2 @% t/ s& L1 V                                        TR0=1;                                                //开启定时器07 ]) f+ T. q( w, C# K
                                        B_N_D_flag=1;                                //定义北南通灯行标志位: N! L5 O4 a: G
                                        X_D_D_flag=1;                                //定义西东通灯行标志位        * r1 i, m0 i0 B
                                        if(bei<=3&&nan<=3)                        //判断北和南时间是否在3秒以内
. b( J5 M# b( ~5 U& D% c/ i0 q+ D                                        {
+ F: X6 p4 c% A0 C0 n% m                                                B_Y=1;
+ I  m7 x% R- L9 Y- v% b/ s                                                N_Y=1;# w- c( s: p1 s2 Z% i
                                        }
' l: [% }3 m( u$ K) b+ `- _                                        if(xi<=3&&dong<=3)                        //判断西和东时间是否在3秒以内; {# e* q+ z, v8 J. H3 o/ i5 o) _9 }
                                        {! Z4 O* _) B( [. R
                                                X_Y=1;
5 [  O$ T0 j4 ]' T                                                D_Y=1;  M3 Q* M5 O: D% K# Q- w! P
                                        }                                
8 R3 e7 `! l+ q6 ^                                }" ]/ n. I5 l. j4 y8 z# C$ C
                        }; V" Z+ q0 o, O% n6 _, V3 B4 B. n
                        while(s3==0);                                                                        
0 F' C- K1 N8 a5 R/ Y+ I. k                }9 Y+ |* Y' I1 k1 z# v' c! Y0 B
                if(night_flag==0)                                                //如果深夜标志位为0,表示关闭深夜模式,红绿灯正常运行
( ]- T4 x5 v  {* {6 U! L8 v# y                {  G! i& ]7 }$ g- ^4 O+ Q6 k
                        if(time_cl==0)                                                        //如果time_cl=0(不允许调整时间),即红绿灯正常运行2 W& v, C/ m( q! _. }/ X5 F* i  ]( t
                        {        - v4 C9 f9 f5 G  J, L
                                if(flag==0)                                                        //flag=0表示北南通行允许1 Z( y9 t1 m' ~1 ~, v
                                {& |- {  `& n  Y4 R0 Y
                                        B_N_tong();                                                //北南 通行
+ \: }# v: _" M' r1 P# U                                        if(bei==0)                                                //北南通行时间到/ c- Y# D/ N2 M& R8 y
                                        {
6 o2 F0 }) X% D( S; ~) ?# n+ [                                                flag=~flag;                                        //西东 通行允许
( s% l2 ^2 Y* z$ R! H0 w' V8 g  m                                                B_N_D_flag=1;                                //北南通灯行标志位置15 R# o. k1 q% v. g# N8 L
                                        }( x; B, ^, [1 V! k) |% p
                                }9 o- u8 ]" X2 M' b3 k2 S" v3 r
                                else                                                                //flag=1表示西东通行允许: F3 q- e/ `5 W  O
                                {- s. C. J, k1 m& [: N% x* Z
                                        X_D_tong();                                                //西东 通行 . a  k; k" S' u' B+ T' W
                                        if(xi==0)                                                //西东通行时间到
) b- Y4 {* |8 |  k' J                                        {+ _, B" ?# Q/ X
                                                flag=~flag;                                        //北南 通行允许
; h4 l7 ?* z* Z. O# }, ?                                                X_D_D_flag=1;                                //西东通灯行标志位置1$ M& F% i& k8 U) a
                                        }
, `: Y: Y3 d4 k; n1 W                                }& F7 F9 n$ Y5 w( c) ^5 w$ ^7 x
        
/ N7 i1 ~5 y  Z+ P# b# a# I* {                                disp(bei,nan,xi,dong);                                //显示时间数据9 }; n4 F2 @! L% E4 v+ W
                                if(bei==0&&nan==0&&xi==0&&dong==0)        //如果 北 南 西 东时间到(为0)
0 f+ o  }/ ?, z+ q5 Z/ W                                {
% U9 r/ r, w/ ~5 H0 B9 H( X5 ~                                        TR0=0;                                                        //关闭定时器05 \; C9 b; M1 Q! ?
                                        TL0=(65536-50000)%256;                        ) {" ~4 x7 i3 g" |
                                        TH0=(65536-50000)/256;                        //12M晶振 定时时间50ms/ q4 V3 e2 |2 ^) m
                                        for(j=0;j<3;j++)                                //延时显示闪烁3下
' G+ }$ E- q; N2 D' |                                        {8 B$ h/ v. h0 H: k
                                                for(i=0;i<10;i++)                        //for语句延时
3 ~: L. C1 _; A5 }, m8 S                                                {
1 `% F# Y! `3 B                                                        disp(bei,nan,xi,dong);  //显示函数4 c/ F) `% \; D
                                                1 F/ f: J; s9 f. |# {
                                                }$ E% x) ^; V) q9 h7 _
                                                SMG_KZ=0xff;                                //关闭显示
% u, r. g) O7 V                                                delay(200);                                        //延时一下' E  J2 I+ {' ]  F3 W7 l+ P
                                        }
! K8 X. |8 W1 }5 D5 W5 s                                        bei=time;                                                //time值赋给北
/ R* s8 c/ i; V1 |4 c                                        nan=time;                                                //time值赋给南  i3 ?( n- i  @! }! Y# O/ t
                                        xi=time;                                                //time值赋给西6 c3 ~5 @4 @$ j, D' h
                                        dong=time;                                                //time值赋给东9 R3 f2 i" e& y1 h1 L
                                        TR0=1;                                                        //开启定时器0& v. D* |/ z0 I  I+ f
                                }
9 n3 O+ n( ^& P% [: I$ x3 o  Z6 M* z                                else                                                                //否则7 r1 d+ c- S# U1 S0 v
                                {}                                                                        //空操作  I! ~9 W9 l* G
                        }
. D1 V7 c3 _9 _$ R5 Y% j* U                        else                                                                        //如果time_cl==1(允许时间调整)4 S, X- v, t  g
                        {; d* R- U) H+ S4 U8 G* \" M
                                TR0=0;                                                                //关闭定时器
" E2 l5 R# }. s: ]8 g, Z% x                                TL0=(65536-50000)%256;. k9 q! t* o; i# i9 Y/ @# ]
                                TH0=(65536-50000)/256;                                //12M晶振 定时时间50ms! `) k( r: k& {2 X+ |
                                num=0;                                                                //时间基数清0
$ }. a5 I, l# u8 {9 ^5 @9 F                                bei=nan=xi=dong=time;                                //time值赋给 北 南 西 东
/ v# u5 J6 Q" p/ ~$ L                                disp(bei,nan,xi,dong);                                //显示时间数据7 U; r, L' K) U) D1 e1 t
                                if(s2==0)                                                        //当P3.1按键按下(操作时间加1)
8 ?2 k/ x" ?( \6 }( L                                {0 l. b  {# D( B  g4 P- U
                                        delay(5);                                                //延时去抖
& c% n  {) N) Z7 y. T/ z                                        if(s2==0)                                                //再次确定按键是否按下7 R0 _, K* Y4 y2 o
                                        {
2 p, {. f+ Y6 n- F2 ?. _' \! f) M6 v                                                time++;                                                //时间加1; e7 }. I1 l+ x! m1 E# V. K
                                        }        
2 r0 [6 }. Q, Z" Y+ V  g* @" J                                        while(s2==0);                                        //等待按键松开        
' _: w$ ^1 R3 g                                }
1 w: U- n/ x. N  I: W8 c                                if(bei==100&&nan==100&&xi==100&&dong==100)        //如果北 南 西 东 时间到100
9 o8 Y; m, M+ v, r/ [/ ~" }# @                                {        
' l' `7 a; |! Z- P1 M5 ^8 {                                        time=1;                                                        //time等于17 G1 C0 e: ]" t# Z& [
                                }
3 Q1 |( t/ w* T) h2 f6 E                                if(s1==0)                                                        //当P3.6按键按下(操作时间减1)               
" M) o' _/ F, t% h                                {                                                                                0 x  L1 P2 U! Q, H# L3 U8 F  M0 j
                                        delay(5);                                                //延时去抖9 ~& e/ A- N, |- C8 K( E
                                        if(s1==0)                                                //再次确定按键是否按下
! ~: h+ A# k  s  q6 F' T                                        {
1 M$ U: y0 l2 P, s7 E6 J2 N                                                time--;                                                //time减1& C& \7 V3 X  M* X8 V$ ]) Z
                                        }
* e+ N5 @$ m5 t; G                                        while(s1==0);                                        //等待按键松开
# F0 e% o: s6 M4 Q1 W8 |                                }; E! B8 I0 d* ~4 f) W
                                if(bei==0&&nan==0&&xi==0&&dong==0)        //如果北 南 西 东 时间到01 c6 c# W- X* N+ W7 M
                                {' I# J& H4 V( ^- M
                                        time=99;                                                //time等于99
1 |! C/ X9 V" Z' I6 E/ M                                }        
- f. e. L7 y3 M                        }
6 V; H6 I7 p: X1 _3 j9 i) L                }' |" V7 }/ i+ W6 ~5 H
                else                                                                                //否则深夜标志位为1,表示开启深夜模式
7 k0 `4 [8 D* F9 M8 |  G7 O0 g                {                + m8 o! H& e  s
                        if(num==20)                                                                //当1s时间到9 j  I: `0 r6 m  c, u# }% M
                        {8 K* ]' d" C3 i. @$ G( }
                                num=0;                                                                //50ms时间基数清0
" [0 F6 Z( D) {: X$ [' k$ u                                night_mode();                                                //深夜模式
% ~. L) D1 `# u                        }                                $ I& f8 o8 I3 @& \: q4 f# v3 X) J
                }2 a) F  g0 `1 A, _  K1 }  g5 l
  //  disp(69,69,69,69);                        
3 e6 ^- ?" f/ p* e5 v5 m5 m+ o) X        }8 Q- ?$ `) ?4 K
    % q1 j8 ?" {1 m7 h2 X- t$ u% s
}7 E; `* a, ]/ [9 D+ J" K+ H% @9 D

8 L( i' z& n* j/ H0 f' z+ `/ @* L. y
$ z2 o  S  S7 R+ k( w. Y
0 c) [9 b9 {. r; w
# C9 o6 t! f5 l3 ~! r, p3 i
/ P2 s0 d, X( `& E& m( j. J

% d% |3 F1 ?0 I5 y2 X' d
6 T" B. g* H& g" k% G. ^+ [9 M

+ F  s& J  g( Q: t* x. Q* ~; Q5 k
0 _% s- c6 H2 W+ M6 b

* ^! b. z, X2 d5 N) K; u' F% z
, R) W  z$ Q8 S' P, ?
void disp(bei,nan,xi,dong)                 //显示(北 南 西 东)时间函数! m' S/ N% R' W+ Q6 d/ J
{  Y+ B5 t3 B5 E/ b, Y+ I: b2 D
        SMG_XS=Data[bei/10];                //显示北的十位
/ k/ T# F! I( `9 H# l  D( {        smg1=0;                                //允许北十位显示
- o" L( [* Y7 Y  G" h        delay(t);                                        //小延时一下,使数码管显示更清楚
2 v2 O% s3 z4 @3 C: |0 a    smg1=1;                        //关闭数码管显示(消隐)
( c4 V5 g0 Y0 A1 P& ?        SMG_XS=Data[bei%10];                //显示北的个位
3 q- g) E" q, R* n1 Z# X        smg2=0;                        //允许北个位显示
; G, _, B+ a2 f* i0 S    delay(t);                                        //小延时一下,使数码管显示更清楚. G! w+ ^8 t& K: c
        smg2=1;                        //关闭数码管显示(消隐)        
8 q6 k" l1 g* V+ J        SMG_XS=Data[nan/10];                //显示南的十位        ) M9 d/ x9 M- j, p3 E
//SMG_KZ=0xf7;                                //允许南十位显示$ ^2 q/ }4 Q! \1 x, `5 b
    smg1=0;- D) R  [; w* C' V
          delay(t);                                        //小延时一下,使数码管显示更清楚
) Y; I1 v5 w: A3 M        smg1=1;' J7 Z) t- S! z, a6 d/ e6 n' P: T; T
    //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
* ?; t! Z, a. G. G2 p3 a        SMG_XS=Data[nan%10];                //显示南的个位% S. u7 }! c# ?
        //SMG_KZ=0xfb;                                //允许南个位显示4 |* G: @% q! C6 ?3 A" z8 |
    smg2=0;        
( B" I2 R! |$ {  p    delay(t);                                        //小延时一下,使数码管显示更清楚
  y: r' R" o2 _& O- z3 L7 ^        //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
( K3 {' {* F6 Q3 L: X+ A3 F    smg2=1;
# L3 R5 E: F0 f. f; {9 y" ~- ~        SMG_XS=Data[xi/10];                        //显示西的十位        
/ W- W' E2 @9 \' T$ n" f1 }9 o  //        SMG_KZ=0xdf;                                //允许西十位显示. w3 o7 w: L- m' d- Z' X2 k# Z
        smg1=0;
$ q. D* F" k  |; C3 e% Q    delay(t);                                        //小延时一下,使数码管显示更清楚3 _0 F  ^. t* l9 l" c4 v5 p
        smg1=1;
3 ?& ~  l4 o3 a3 [4 {2 D5 {    //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
* M, D; C  V/ C' ]        SMG_XS=Data[xi%10];                        //显示西的个位
% F$ i' l7 \% }0 P2 i1 b        smg2=0;
7 U, _6 C2 g0 W' a" P/ @    //SMG_KZ=0xef;                                //允许西个位显示
3 t8 l) n2 t* J( t: P        delay(t);                                        //小延时一下,使数码管显示更清楚3 s" O: E. C6 q8 @, S# F# `9 c, ?
        smg2=1;
0 v3 e/ [; r# Q9 `/ T    //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
# k% u# s9 h' @) s
( y- w9 H9 E1 A. z% |: y

" r/ c; ~! P6 `. q8 ^        SMG_XS=Data[dong/10];                //显示东的十位                - L! {# B- s* J& R8 a/ v+ ^
        smg1=0;6 R# G$ O2 C% H2 ?8 O
    //SMG_KZ=0x7f;                                //允许东十位显示$ Y; [' S. G3 G3 j
        delay(t);                                        //小延时一下,使数码管显示更清楚
6 f; V0 {3 i  E! H% f7 C2 U        smg1=1;
1 p1 d* B1 \! s+ A5 x8 I    //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
; O8 }! X& S/ |) S) B        SMG_XS=Data[dong%10];                //显示东的个位
0 I" e+ b9 j$ g7 T. I1 j        smg2=0;//
" W$ [4 L9 f  U' u    //SMG_KZ=0xbf;                                //允许东个位显示- D! _+ \/ \9 y# k2 v/ B/ v6 w: p# ^
        delay(t);                                        //小延时一下,使数码管显示更清楚* r' Y9 `. ]- c3 L9 j/ e) E
        smg2=1;
/ ?, I" G; ]+ H& [# J" u- O    //SMG_KZ=0xff;                                //关闭数码管显示(消隐)
  N- A3 }4 \  H5 w; z}& q4 M  L- p8 Q
void disp_init()                                //显示初始化/ Q" b* i9 C% g& q3 g" F) s# w+ D
{. W8 S8 U: ^% s8 x, C. C
        for(i=0;i<3;i++)
0 n& _% {9 }3 X' `6 b9 i0 }        {
& C  C7 p/ l. S/ Y6 q' F                SMG_XS=Data[10];                //数码管显示"--", `8 {/ @& p9 I; \" ~6 C1 J
        smg1=0;
) S: M3 |, I- v, j        smg2=0;//允许数码管显示# r! Y/ ?* |' X* u8 X" \0 e3 \
        B_R=0;                                //北面  红灯
+ Y; x* [4 _& a        B_Y=0;                                //北面  黄灯
# ~+ g3 v" e# y) D, v9 \% h        B_G=0;                                //北面        绿灯" ~+ W, q- ?% z8 i. U' {- O
        N_R=0;                                //南面        红灯+ A9 a% t( k% r
        N_Y=0;                                //南面        黄灯
( j- o) V. y1 g$ [  l% `7 O            N_G=0;                                //南面        绿灯- q5 O/ {, c4 J; b% v$ j0 A
        X_R=0;//西面        红灯
/ a8 E$ G. K) E9 A6 ~* N        X_Y=0;                                //西面        黄灯
& n* G1 |/ e: a2 _4 R! b* |        X_G=0;                                //西面        绿灯
$ D: f; T( U3 |* p% O1 m& H  R        D_R=0;                                //东面  红灯
( X% G3 \/ t: C. Q% o& c1 g/ z        D_Y=0;                                //东面        黄灯: F. J" z& Z+ G' y1 b
        D_G=0;                                //东面  绿灯
& P: n7 h$ B. k& f                delay(300);                                //延时1 f& c/ r( F& i+ p3 R
        B_R=1;                                //北面  红灯; Z* p  R/ @" |
        B_Y=1;                                //北面  黄灯
% {% @2 V1 [( T: y$ g, {9 Z        B_G=1;                                //北面        绿灯) f' r* H& |. W
        N_R=1;                                //南面        红灯+ |# r' R" R4 {8 k8 N" v
        N_Y=1;                                //南面        黄灯
. T0 L3 G* z* a$ T! W7 M            N_G=1;                                //南面        绿灯2 R* Q& R1 X) y, r" I4 Y
        X_R=1;//西面        红灯" m% z* o4 w6 \) Z. G
        X_Y=1;                                //西面        黄灯
+ x2 \4 R2 P( g* ~1 b        X_G=1;                                //西面        绿灯+ O9 H( I/ W0 ~; o! j4 n
        D_R=1;                                //东面  红灯
% k; F! D8 @% D5 i        D_Y=1;                                //东面        黄灯
+ E0 d3 q% `* B0 ]& J# F& @! t
( l: H; [% j: w% G+ H
1 Z9 i9 Q% f( |7 _/ Q

, B& Y/ U1 G) b/ O: s9 n# n: e+ g9 p6 i$ _

- D2 b4 k8 {  r' v…………限于本文篇幅 余下代码请从论坛下载附件…………) @5 k, y) ?/ [
游客,如果您要查看本帖隐藏内容请回复
- n) a. R- {& p/ ^; g9 b7 o5 T
! v# }* _" C. T5 R8 u

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-29 05:51 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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