|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
交通灯设计 AD格式的原理图和PCB与单片机源代码9 P/ [) `/ ]2 s' d
) y [" |9 [' m% a
( l4 e7 Q$ @2 M
一个用51单片机做的交通灯的设计制作,而且带ad画的原理图和pcb,有c语言和汇编语言两种格式的源代码.
; H, `8 D* r6 Z1 v# `& l- O" s4 ~9 W2 \* h% m" F& x0 q$ T
ad格式的原理图:, X7 [9 t _5 l2 Z. y- _& w1 a, m
9 [) }% Q3 h; H3 c' ?) @" a
3 M, q6 w. K. a, l( k
/ ]3 d4 A, R) s, fpcb图:
- F" p- {) z$ q) i: _ 4 b; K* g* F; E* X! v$ G( e! Z# `" V
单片机c语言源代码:
* ?. ~" ^' j0 S& i O/* 程序效果:单片机模拟控制交通灯程序,规则如下:当南北通车时,此时南北的绿灯亮,; { {2 Q6 [# s0 J8 F2 \) @9 ^4 m5 A. q* O
东西的红灯亮,之后南北的绿灯闪烁3次,过后黄灯亮,延时片刻,转东西绿灯亮同时南北红灯亮,5 L; c+ e9 `! Q8 q
之后东西的绿灯闪烁3次,过后黄灯亮,延时片刻;数码管显示的值都同步,结束。*/
" O% o. \! A) r1 p9 S+ [/ ~#include //头文件
& F/ l2 _' T8 o. }& O* a) a% u#define uchar unsigned char//宏定义; G# S# E- s g6 ]
#define uint unsigned int8 A5 O, k% I B. u" c' B" c
/* 旧IO定义*/
2 e% t* o6 a% L0 ]sbit FMQ= P1^0; //蜂鸣器
* P/ N6 C# x2 M, @7 Msbit QR = P1^3; //北红灯( d5 U Q9 q' ~" Z
sbit QY = P1^1 ; //北黄灯
, s" f" Y0 V# ], _1 }8 W0 z7 E% isbit QG = P1^2 ; //北绿灯- i0 E% W$ V$ O T1 C& \; |
sbit HR = P2^2 ; //南红灯
0 s) R; {4 `5 Ksbit HY = P2^0; //南黄灯
) [9 l: a6 S5 ~# gsbit HG = P2^1; //南绿灯 3 [/ S7 X7 w$ ~+ V0 F9 w1 o' b
sbit ZR = P1^4 ; //东红灯
/ Q' J2 k4 O# a! Y3 ]" T2 d* Ssbit ZY = P1^5 ; //东黄灯
. \; P' ~: s y# m% asbit ZG = P1^6 ; //东绿灯
+ u1 z8 }5 T$ @" T0 [0 X l) M) s8 v: }sbit YR = P2^5 ; //西红灯, U& }' a$ P9 X1 z7 G. N
sbit YY = P2^4 ; //西黄灯/ e8 u1 P9 Q6 w6 ?5 z/ a* X
sbit YG = P2^3 ; //西绿灯
/ I3 R" h* n# ^sbit SWITCH1 = P2^7; //时间显示的十位控制
& s6 j4 U% a" B: [; R' `6 |sbit SWITCH2 = P2^6; //时间显示的个位控制" w' K% _% W5 C- A+ l5 X6 Y/ @+ i
/* //新IO定义
. T0 `; t* q$ B" j+ x& V) Y6 W" s esbit FMQ= P1^0; //蜂鸣器5 a4 W& V6 ]# E# M# @
sbit QR = P1^1; //北红灯
( K4 H' b! J1 E; ksbit QY = P1^2 ; //北黄灯/ p) m# W1 ?, p8 s0 Z$ T+ [
sbit QG = P1^3 ; //北绿灯/ g5 t: e' n* ]. X; G% o1 k
sbit HR = P1^4 ; //南红灯" j8 }. p+ j7 j* s. Y
sbit HY = P1^5; //南黄灯: u! t4 l! Y# r- l* Q" R( \4 P
sbit HG = P1^6; //南绿灯
4 F0 O% T5 L" ` Usbit ZR = P2^7 ; //东红灯* J7 i$ I @5 c- L
sbit ZY = P2^6 ; //东黄灯& W. M+ H) n! n% L) ^
sbit ZG = P2^5 ; //东绿灯
1 y" }0 ~" W! u8 C- A/ a% {sbit YR = P2^2 ; //西红灯) c( B W: G$ j0 q( J
sbit YY = P2^3 ; //西黄灯) T0 ^; S+ ]4 C
sbit YG = P2^4 ; //西绿灯 * e/ e T" n6 R( e# I" R* w
sbit SWITCH1 = P2^1; //时间显示的十位控制
" W7 _; l$ N; _sbit SWITCH2 = P2^0; //时间显示的个位控制* ?- M; i1 E r" G2 Z( v
*/( C1 ]# l* w+ [. ^! l1 l
//sbit P3_2=P3^2;1 @% S$ [, x" g5 a9 p( B3 b
//sbit P3_3=P3^3;
$ T. C/ y' X, P( b: W/ @" wuchar DAT;//显示时间变量) F2 F, @8 \7 u8 f3 B2 l* ?
uchar DISP[2]={0,0};//显示缓冲区
% q2 V( P, x" L& Fuchar code table[]={0xC0,0xF9,0xA4,0xB0, ////共阳数码管段码表0 1 2 39 u2 H2 F6 ^3 i2 r& R: \2 E7 `
0x99,0x92,0x82,0xF8,0x80,0x90,0xFF //4 5 6 7 8 9 灭
+ F" g4 l% d3 [5 \6 V6 f8 Y/ e};. v% {5 _0 c4 g! T# o
void DISPCLK(uchar i);//显示函数
) f9 Q; f0 h8 U6 @0 O: J# ~$ z
" O. F" l" A" Q* F, M5 D% _0 Q x. pvoid DEL1MS(uint z) //延时子函数7 n& o1 j/ g6 ~, z9 I
{: j' I: N6 W! e/ U& n0 m
uint x,y;# e' B8 ^# j8 T9 G3 c6 X
for(x=0;x<z;x++)
% E. ], ?+ s6 O' ~ Y1 J; efor(y=0;y<110;y++);4 b, Z; s" c: K: t, b# r
}/ I! \" U! ^4 d! x. J
void main() //主函数
- C5 Q; H' t6 g6 L6 {{ // uchar i,j,k,m,n;//定义局部变量
" u- Y0 i. x; E1 y( ^ uchar i,j;3 N- n1 ? E" p' a3 h
TCON=0x5; //外部中断为下降沿触发
# [) Q( l' E0 Z |( m- d PX1=1;//南北方向高优先级
! w8 W0 {! P1 \' n EX0=1; //+ c. ~; ]/ n& ]+ _. n2 U$ S+ N8 _
EX1=1; //开外部中断3 U5 S2 r( v6 S9 [2 Y
EA=1; //开总中断1 Y* ?5 ~! e! R: F8 ?
//IO口初始化
& c: z6 M! O- z5 h( t P0=0xFF;
* X3 L5 J* c7 p9 L P1=0xFF;1 F- K3 l3 E# e8 k5 @
P2=0xFF;
3 u; a& q s1 ]3 n P3=0xFF;
( e4 M2 O7 [+ L% q! R. n( t //DAT=25; //汇编0x259 ?/ P& U* n+ t" S. v& W( G
while(1)
; y0 u/ t6 o$ ~3 u {4 r) d( U! W/ V& I! y
P1=0xFF;//灯灭$ X9 l8 Y) g. x/ P/ [" o
P2=0xFF;//
3 O4 s* W/ Y* K9 x- q# U3 }* D- ` DAT=30;//写入每一通路的通行时间; W3 R. |, ^7 g; f
QG=0;//南北向绿灯亮2 O' r4 X; L( h& J$ Z3 [+ g
HG=0;
5 p$ V8 z* n+ e a! q) k ZR=0;//东西向红灯亮+ k, {9 [1 c8 h5 A- I
YR=0;8 U) o6 ?, J: o' I( D, t
/*9 Q! k9 X: r N+ q% {
QR =1; //北红灯# L% w7 c) b; q" E" A0 o
QY =1 ; //北黄灯
% [9 {3 g0 q+ }% O: [* s QG =0 ; //北绿灯 QG=0;//南北向绿灯亮
* {3 X. E# f I: G/ w) S HR =1 ; //南红灯8 s- j4 l0 T2 j) _- `
HY =1 ; //南黄灯( V8 Q' S! L6 O
HG =0 ; //南绿灯 9 F$ m2 B% W& r8 n6 F) Y# m$ n2 d
ZR =0 ; //东红灯
$ ]; k5 r- |- B5 |9 ]# ^: C ZY =1 ; //东黄灯* ~' O' \' w+ e4 }" E$ Q; P
ZG =1 ; //东绿灯
, I/ Y' K5 }, v6 O2 s0 k! ^4 M YR =0 ; //西红灯
2 s( l. X4 y1 J& }6 z" y7 ^ YY =1 ; //西黄灯
) m6 a7 L/ x# @1 N% x YG =1 ; //西绿灯, u; r* e2 J6 H* t
*/
8 _( R% ?& c$ i6 b //ACC=DAT;9 p/ e# F. E w; z9 H
* }3 E1 D, [; y0 h& \7 P
4 m+ P; Z: q' G# z- e' ~1 Q+ P for(i=0;i<25;i++)* I+ r: T3 C/ @& p3 G) \
{
N' @" A' S# z: ?7 i for(j=0;j<220;j++)
/ r# v2 P) Z6 M, G3 [. }" _+ ~6 Y {4 ]4 A' X) G% V6 k- O4 i
// BCD();//BCD码调整, ^* r1 A6 j3 E7 [0 ]" A
DISPCLK(DAT);//显示
1 H& A8 D$ {% w DEL1MS(3);//延时3毫秒
* b2 e! y& Z4 n0 f
, y+ i" o$ _* s! M8 T
M2 u$ x, j7 t- D }# H( a1 T2 J P, e+ h1 `1 P( o& }
FMQ=1;//蜂鸣器响
# |" v4 d& t2 G+ Q Y/ i //ACC=DAT;: S$ }( S( \! l, R" ~* e5 {$ ?
// ACC=ACC+0x99; //完成数字的减1操作* p6 s% b/ n/ q9 m0 H" T
0 M! \: y+ D. W5 C
/ ^$ V% `+ U* _ [9 n* F
// DA A;//???
$ O3 w. z* d. S/ |$ P DAT=DAT-1; //调整好的数字送显存 ( B4 {8 _5 T. Z1 ]6 v, z
}/ k4 \: B7 @" ~) k6 w8 l
0 D, A& U$ H7 F! y# K5 U( @
Z5 W* E9 B' t i //最后5秒黄灯闪
E+ u9 z+ G8 k1 G: T+ h P1=0xff;# x; I0 p- H$ [/ E' V# J: @& ^5 m
P2=0xff;//关所有的灯
2 W, d) N5 r. g ZY=0;//黄灯亮4 J7 z& t" `: ]5 L; c' ?9 t! f
YY=0;
3 m1 j9 [, Y5 p) W# l2 Z" d% t3 y QY=0;
- E8 m6 ]/ U4 H2 P( d1 G8 | HY=0; . Q! f) C( M3 w1 r9 v
for(i=0;i<5;i++)2 P" \7 E, E; `% P4 ^ J
{ ( ?0 Z J2 d7 C8 \* h) ^3 ~8 x
for(j=0;j<220;j++)9 }6 e0 u5 o7 E5 W% ^4 o" c \/ U
{5 L" F& T7 h& b
//BCD();//BCD码调整2 W L" [# ^! h# G; b* R
DISPCLK(DAT);//显示
; g* g+ a8 f1 x) P D DEL1MS(3);//延时3毫秒
4 b. }; v: h/ X7 F( j
' ]. _' y, C( Z }7 K" P& j5 w( {" ?7 [
QY=~QY;// 南北向黄灯亮
& Y) B( p/ H* r HY=~HY;
$ R2 U0 z7 w# A1 f( t; S( }( i+ h ZY=~ZY;//东西方向黄灯亮, [, L) G, E9 X% v
YY=~YY; * H3 d2 Q3 p+ S
FMQ=~FMQ;//黄灯时蜂鸣器叫一声
* S0 J/ ] Y* c+ v' S1 s' ~; ^. b2 n' Z
4 a# J$ |1 g/ E$ j* r# O2 D1 T ?
DAT=DAT-1; ////完成数字的减1操作,调整好的数字送显存
* l2 q- c) Q- _' c + e0 J3 f) M; k, t
}
' a1 j. E5 w$ E4 _7 F! R7 x
: ?+ {6 D2 s4 p5 l& I5 o6 b7 L/ F/ n5 r, V
P1=0xff;
( v0 i& d4 Y# y. C) R# ^# v: S% T: q P2=0xff;
5 k# }# _) F& T6 ]7 e DAT=20; //汇编0x20
% A: v' H7 A& R- U( J, d ZG=0;//东西方向绿灯亮
' r Y- V+ t: K# ` YG=0;
0 D( U- w/ ^( f5 b. N! s QR=0;//南北方向红灯亮
7 G4 G7 b' @3 h. H HR=0;
( w8 j+ L8 L- }$ S ACC=DAT;; E/ E" [" H* X+ |/ A
for(i=0;i<15;i++)//执行15秒
0 S& y) p9 w; J" J) x+ h { * J6 h% M$ r: A" H" N% w
for(j=0;j<220;j++)
! T3 v2 I* E* k7 H {7 e ?8 z0 u; _; O* Q
//BCD();//BCD码调整 f) j$ y4 V/ X) v. c
DISPCLK(DAT);//显示
. r+ r1 t+ Z k& c% _% Y DEL1MS(3);//延时3毫秒
7 H. B! E& L! h# X3 X- m+ E }
+ k" Y& ^6 ?' C FMQ=1;//蜂鸣器响6 [! C$ z; R6 E) i f" [, z* d
DAT=DAT-1;////完成数字的减1操作,调整好的数字送显存
5 ]( B+ N: G. |
0 T8 P' J. {# ]2 O }
" ]2 V0 T, a9 V. H$ _- x( W //最后5秒黄灯闪
8 A, g7 P5 k6 r P1=0xff;
. c( C) K2 n1 K) e+ x& W P2=0xff;//关所有的灯
! P' T6 ]# j; |- R' `1 L; c% H* o5 y ZY=0;//黄灯亮+ k; c( ]! s, O. X& g. h$ f
YY=0;! @+ g7 @3 H; ]) `3 l& ~/ K3 P) i* p
QY=0;2 p) \1 U$ z" I9 V6 ^
HY=0;
* z/ m. m, z U4 U/ B) M for(i=0;i<5;i++): F5 ~1 ^9 N7 x! Q
{
# P3 O! n+ C4 ?9 Y+ G9 t V for(j=0;j<220;j++)
1 N( {- A+ ^2 g; S/ C/ L {
% S6 P C# v, q1 a3 C; ` //BCD();//BCD码调整 P1 x- H( J/ q# N
DISPCLK(DAT);//显示
+ W, F4 T, A$ ?3 L DEL1MS(3);//延时3毫秒 " V/ ^ ^* n% [, u- d' S
}* z9 `. C! V+ [
QY=~QY;// 南北向黄灯亮1 y+ s+ X% |8 v Y- u4 s
HY=~HY;
- W. g% G2 D/ Q m ZY=~ZY;//东西方向黄灯亮
3 `! i3 R: Q' z YY=~YY; # ~2 e4 n5 O* C7 g& w- z3 y |
FMQ=~FMQ;//黄灯时蜂鸣器叫一声
( b/ A. g& Z8 M A* r% `" Y: `7 G3 f: t9 j2 U
3 L' S) ~; R' T q- P5 v$ K DAT=DAT-1; //完成数字的减1操作 ,调整好的数字送显存 , l, a, I+ q; K: r
0 Y/ x5 M! f& @. Q2 b9 l3 [
}
" l2 w' z! M) G* ]. i" ?/ C2 \- T } , y$ r" Y) |+ I; P4 }' A) M+ M
q, b# \7 M0 U7 v6 h4 q}3 N9 a2 Q4 K4 F- B5 d4 ]
$ n& E0 r1 w9 c$ D4 C
; a( m g! \. { D2 l
void D_X() interrupt 0 using 0 //东西(横向)方向道路紧急通行50秒中断程序% M$ r1 H& Z5 X" g; `; Q0 ? P
{
# A+ Q% v7 l2 c5 v" R2 R8 U uchar i,j,temp1,temp2,temp3; //定义局部变量
6 u9 i: {2 V" u& ` EA=0;//关总中断: w! n/ l6 Y0 b1 J
P3_2=1;
9 }! ^; E- e1 W, { while(!P3_2) ;//等待按键释放
8 Q! }/ m1 Y6 b9 W+ S9 |! J temp1=DAT;//保存显示数据: _, V; [4 V; w& p$ Z8 R% S
temp2=P1;
0 I5 K) E$ w9 @0 ` temp3=P2;
9 b- m/ c( [' D* @8 d8 y2 F/ I9 c. q% X9 G0 D" V$ y% L2 ?# d
; t2 R$ j$ j; Q+ M1 K+ A+ c
DAT=50;' P8 ]" Z/ I+ T8 @+ ~
P1=0xff;
5 O3 X: z6 R4 S6 v$ h# K& o6 o P2=0xff;# @- W3 t5 Z; @' V- S' R
ZG=0;//东西方向绿灯亮
- B1 B. \* G. k# H4 l) A3 Q YG=0;8 P, w- c# ]3 V; _, H( K
QR=0; //南北向红灯亮0 O# k3 P! X5 I+ Y
HR=0;
! p1 [7 d* g0 U% r3 {. F
4 Q5 ~; r, H- c* w* R 0 @" v8 Z0 p6 D6 H1 b5 a3 a2 x! i: h, E
for(i=0;i<50;i++)//执行50秒
5 P) h$ _/ [/ J% S% |; E9 ^! }# f { 9 `( b3 p9 L4 z8 U6 b- k
for(j=0;j<220;j++)
4 U, j' i5 K/ w {4 }, m! c/ T x& z, K
//BCD(DAT);//BCD码调整
# s2 M+ m4 q7 \5 x! `# g- ^6 J: \ DISPCLK(DAT);//显示
+ Y# S& Z' A$ a u8 u' f ? DEL1MS(3);//延时3毫秒
9 G }" W7 {1 |( m9 ]# \ }
9 H! j" j" J* \# E0 L1 [* d# S DAT=DAT-1;////完成数字的减1操作,调整好的数字送显存 & \; \& D9 E f/ v. ^; L
}
: c* ?. u& ~9 B( F DAT=temp1;//回复显示数据- M2 C% E. P1 {! M9 f4 e% g
P1=temp2;7 X- s* y8 N; `5 k6 r, x; o
P2=temp3;
/ ]5 ~- d- ?8 q8 x, T- i l5 N. t" S; Z; C7 p
; f! h, Q2 k0 B5 g
EA=1;//开总中断 ; j* t$ |. H9 J: Q& x
}: d$ F: X9 z7 y, _; o u3 W7 ~! O
' t/ B8 a6 H) L5 I+ X
2 s7 ^ P; ]" v8 u
void N_B() interrupt 2 using 0 //南北(纵向)方向道路紧急中断程序; V) X: {' E* k/ N, O% Z
{ 5 Q" [/ Y" ?2 w* F, Q# v1 p$ _
uchar i,j,temp1,temp2,temp3; //定义局部变量3 g' P5 Z8 o' G$ \
EA=0;//关总中断* K9 u# O0 n/ E0 e3 O
P3_3=1;; p" ~/ B. N% }7 s ^
while(!P3_3) ;//等待按键释放
7 }) V) o! e& {. a' x temp1=DAT;//保存显示数据% Q( y( Z6 x* R P; w w( ~6 q
temp2=P1;
: Q$ i! g& i3 p; g temp3=P2;) y/ e- s; Q/ q) ]6 R- t. |
# [" U0 Z4 Q: D3 I6 M
; S, g6 h. \- B* A, K9 d) y DAT=50;+ M' V: y5 K- @& s) k
P1=0xff;+ b; b4 r9 r9 P8 @/ E2 K
P2=0xff;
- b9 X) q4 b( ~- C ZR=0;//东西方向红灯亮
% T& n$ R2 R; W5 ` YR=0;
; _8 D( n: R1 B7 y+ E QG=0; //南北向绿灯亮' K8 O1 `3 u& _! K/ I, X
HG=0; - u3 i% c! V$ u6 O* R1 z$ d
for(i=0;i<50;i++)//执行50秒& }9 W) b6 \' X. B1 z/ G6 `# w6 C
{ & Q9 B! Z& @/ z: I9 W5 E4 A; U
for(j=0;j<220;j++)
% ?2 I" m9 }$ |, h' n2 x: h {2 L( x. g0 w0 N2 d5 n
//BCD(DAT);//BCD码调整
+ _8 t* d4 d8 a! ~. I DISPCLK(DAT);//显示" P. M) b7 x! Y% a7 N! C2 a* E
DEL1MS(3);//延时3毫秒
2 w7 q$ u o/ o7 g0 P# l }$ y: j0 G o- W- a6 ^. r
DAT=DAT-1;////完成数字的减1操作,调整好的数字送显存 & D% K. e+ y& D6 S' P
}
$ p$ {( F( ?0 [/ `6 M1 _3 l4 F DAT=temp1;//回复显示数据3 u" ]8 Q0 u& `; r% z8 ?- w5 e, n
P1=temp2;
/ }% H' ]' Q# f' N) B 7 c: z3 `9 R( c8 r; D) B* f
( X! s% r q1 P2 k) b$ E1 J
4 x( P$ w- n3 L# c% r
…………限于本文篇幅 余下代码请下载附件…………
# }; K2 A' r3 {
8 g1 q" ?/ P& k# G1 G* j& l1 e' K/ H' k [/ E9 J' V3 v
/ b8 l# J* o) D5 @* q
* r: M* H! h) I2 f( D4 \- U: v汇编语言单片机源码:4 Y, U3 ?' I. [& `. w9 s8 l* Y
8 y; {, f5 i! K3 E8 i
;智能交通灯控制器程序
" R9 q5 V8 l3 L. l ;以下程序完成各脚的预定义 a. I4 k( `7 u7 y( L' k
FMQ EQU P1.0 ;蜂鸣器 E3 t [ ~$ G- ^
QR EQU P1.1 ;北红灯
1 e: X- L& I- V4 T' \4 ]4 V% W# ` QY EQU P1.2 ;北黄灯# W0 b, L9 J5 S) t/ o9 S4 t
QG EQU P1.3 ;北绿灯
6 F4 `- y+ P y m, s' l HR EQU P1.4 ;南红灯
/ r4 w8 W& R( `% e' q HY EQU P1.5 ;南黄灯
6 j/ H# e8 P; ?4 J" Z2 \ HG EQU P1.6 ;南绿灯
1 }( F1 H. c. k6 x ZR EQU P2.7 ;东红灯
* l% P6 d3 h' t5 }/ r. s ZY EQU P2.6 ;东黄灯
* c$ H- c; T- s9 V ZG EQU P2.5 ;东绿灯 " a, ^% ]' K1 D6 F1 ]
YR EQU P2.2 ;西红灯
5 c/ W+ g& p% `0 A }/ R YY EQU P2.3 ;西黄灯
4 T# ]8 m& v b9 g! {. r YG EQU P2.4 ;西绿灯
8 b c" B2 q- k T1 N r6 t" H SWITCH1 EQU P2.1 ;时间显示的十位控制
8 M* n, z' w9 [7 U& E SWITCH2 EQU P2.0 ;时间显示的个位控制# ?4 \% R2 n e x6 ~) C* j
' [) n. P p2 w; g5 [! p) K
DAT EQU 60H ;显存) b3 [2 B' b3 P8 J! ?8 {
* q, `/ ?- o! T ORG 0000H
6 J( }: V% v! v6 }# v LJMP START; r8 i; q; ?4 ~* S
ORG 0003H+ w$ ^0 R% ]/ @9 t" n1 h
LJMP D_X ;外部中断0,东西向紧急按键+ u# l% O* ~; J; i
ORG 000BH
1 x6 f1 q% ?6 u- |, O3 Y7 y RETI ;# R6 M9 c8 Y3 }& ^" Q+ g
ORG 0013H% a" Z7 `5 }& H5 D, g# k
LJMP N_B ;外部中断1,南北向紧急按键' L3 x/ U) E& p
ORG 001BH4 F9 l) S6 l' C; J
RETI, ~4 q6 H7 y* v9 D H* ^3 f
ORG 0023H' g P) C9 m1 P8 \
RETI
; y# ]2 Q+ `% |+ n$ D! R
- S+ U; P( n2 v' x+ Q6 n1 O ORG 0040H ;定位
9 y. T/ A1 @" w START:4 m2 O% D( |, k1 q6 I; \7 P
- E/ A1 F/ f: H/ B: Z+ O
MOV TCON, #5H ;外部中断为下降沿触发
* q9 }' d, Q* E! Z SETB EX0 ;
1 a1 q0 g5 D$ B' S4 i/ a2 N SETB EX1 ;开外部中断( V, `8 O8 V! e. u' a
SETB EA ;开总中断
! Q. L; V' R5 u/ p* ?6 ]& P ;IO口初始化
" A% {8 n1 T: d4 ]! w+ e* [ MOV P0,#0FFH
9 v7 q# A" X; `& M& y- T2 s: k MOV P1,#0FFH ;9 r$ q4 K) R& M& o3 R
MOV P2,#0FFH ;. N& ` H' Z2 g- B' d/ q
MOV P3,#0FFH ;
" N0 F+ K" f" W% F MOV DAT, #25H ;
3 |- l K- i7 T, j; {5 O3 h @: M1 J: n/ K2 f" f
% V' s" h1 s0 Y9 mAUTCLK:
; B* }) l& g" t" |& ]1 j( \# m MOV P1, #0FFH ; v( ~" f& { H2 }& R0 H
MOV P2, #0FFH ; + v5 y' v2 w5 w$ ^
MOV DAT, #30H ;写入每一通路的通行时间3 v" h" Y- t# i
CLR QG ;南北向绿灯亮
7 `3 s6 f- H0 C) C CLR HG ;
9 y" a& j7 B) ~ CLR ZR ;东西向红灯亮
& l2 Z$ f9 g4 U4 {6 p: v CLR YR ;% \; r8 B1 P/ I7 y4 U/ p$ [& a
4 h2 `( C8 ~# r
MOV A, DAT ;* o% `- `- [1 ~/ H
MOV R2, #25 ;写入时间值2 l9 }* F5 l/ J
A1:& r" E, e0 ~( f: B! y8 V4 c0 f" d1 f
MOV R1, #220 ;
4 F1 G4 Z) k! { TA2:- o- h6 W! M0 {% P
ACALL BCD ;BCD调整/ i0 \! R; X1 D6 P
ACALL DISPCLK ;显示8 D6 {8 |/ Q/ ?
ACALL DEL1MS ;延时3 {6 l6 R" d9 o) @) S) ~, ~
ACALL DEL1MS ;# l+ D) P$ F9 H# Q* R
ACALL DEL1MS ;
* r. r% L! k8 y. D DJNZ R1, A2 ;$ ^3 b4 K q- @5 A2 d r: [$ w
SETB FMQ ; - `- T# C, q+ d1 z3 A
MOV A, DAT ;完成数字的减1操作) k1 K" @+ r7 }3 Z5 B4 t. P
ADD A, #99H ;
: }8 h# M8 [& N! o DA A ;
6 r6 q1 ]5 p$ A MOV DAT, A ;调整好的数字送显存
' c: F4 O [5 O$ Q0 m. u4 M DJNZ R2, A1 ;
9 @5 V Y$ I! N# ?( v ;最后5秒黄灯闪
1 I! Q+ c, z2 O/ F) \ MOV P1, #0FFH ;, G- [9 s+ M9 |- @ U% p/ ]8 J
MOV P2, #0FFH ;关所有灯 & m, t" d+ S1 T8 D
CLR ZY ;黄灯亮. ]" ]. u" E) ^8 F2 `/ J, `6 \
CLR YY ;0 G$ v2 H: D W' j" |1 M% q
CLR QY ;+ ^+ P7 h2 }! d
CLR HY ;
: c0 _1 I6 g% s. F/ N! \
2 m6 l* S/ B; G* i MOV R2, #5 ;3 {4 _8 x/ w4 Z% ^3 s; q1 B% {9 D
A3:
* u: v+ z2 u6 F; a/ D. C8 u MOV R1, #220 ;
/ D% N7 t. k! y: WA4:
# @* E* F2 r5 B( f" d, j ACALL BCD ;
7 D% _. r( r7 g4 _ ACALL DISPCLK ;
4 e: [) L, Z: F) ^" z: ~ ACALL DEL1MS ;$ I7 }8 L' Z8 I+ Y; y2 v
ACALL DEL1MS ;3 \% l7 U9 P! Y, ], i J
ACALL DEL1MS ;7 ?/ }( ?0 [$ c: e3 T
DJNZ R1, A4 ;
1 G& A6 G! A1 R; h7 { CPL QY ;南北向绿灯亮4 _0 b6 C, i& f7 n
CPL HY ;
2 ]0 \/ @$ w) X7 T: r5 e CPL ZY ;东西向红灯亮
7 M; }0 \8 d$ i8 G CPL YY ; 3 Y. y+ m3 a! ^5 K. I
CPL FMQ ;黄灯时蜂鸣器叫一声
/ j5 F/ K5 a) s3 R$ G8 c' j MOV A, DAT ;$ n$ F! p+ V0 K" n
ADD A, #99H ;
, J, _) M+ }/ f9 [4 K DA A ;8 I q4 a- w n
MOV DAT, A ;
( g7 W3 T1 ?) B, r) y8 \* W5 L# Z: ^ DJNZ R2, A3 ;
- T! I/ n# @/ _: S# \
; S7 B5 N6 {& F" o. W F5 d* L. A2 A# f
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
6 i; `- `& P. Y# q0 O" p+ ~3 [ MOV P1, #0FFH ;" }1 I/ ?7 R5 J3 d& A
MOV P2, #0FFH ;. D, I. s; l9 ~
MOV DAT, #20H ;
$ P! |! g' J9 I$ P% s CLR ZG ;东西向绿灯亮' J \. z( K8 G$ Z, T
CLR YG ;$ v$ {0 A( W( ?
CLR QR ;南北向红灯亮( J) [9 B" A3 [9 o9 ]
CLR HR ;1 d4 K3 a O. i% n( P6 z+ G$ n, Z
MOV A, DAT ;+ u# |; s" {) N: G4 S- c
MOV R2, #15 ;执行15秒
9 ]# d! }" K0 @7 NA5:7 t1 h' Y% _* K5 c; E
MOV R1, #220 ;
6 c" D+ q4 `: ^9 [A6:
* v4 d4 e( m. {. r- T# r ACALL BCD ;BCD调整
! Q% A2 O. N& K0 \2 H ACALL DISPCLK ;显示6 \, U* d$ L" g$ S. d* K9 M
ACALL DEL1MS ;
+ i/ c' c2 B4 y; b ACALL DEL1MS ;4 v" ?8 P, b9 U' Z/ L0 k5 ~
ACALL DEL1MS ;* ?* v$ q' N: @& O ^! |7 ]* I
DJNZ R1, A6 ;
) D# w# y& V; {" j. w3 z5 {: \ SETB FMQ ; 9 g# H7 A e) V. c5 B2 j# Z1 x
MOV A, DAT ;
& o" t7 l5 Z" Q5 V' {- C/ s, z' n; K7 | ADD A, #99H ;减1操作! D- d6 y/ r8 u% _! n j- u5 }2 e
DA A ;
6 Z. |6 B& v0 U/ g MOV DAT, A ;
0 Q4 b) ]; @& M( i$ X3 h5 e# n DJNZ R2, A5 ;
2 J' W8 c" c9 Q( ? ;最后5秒黄灯闪
5 }6 W) {6 m, k. u- w MOV P1, #0FFH ;
1 J& q) o2 J0 I& l2 C MOV P2, #0FFH ;关所有灯
8 o! I& E5 W( ^0 ?7 @6 T4 D6 x CLR ZY ;黄灯亮2 g' o, S) d+ X8 q8 ]
CLR YY ;
7 d1 _: F2 m+ W6 V* |+ }# X CLR QY ;
9 x! M. c) @. n2 v. D1 V CLR HY ;/ j- h( H9 Q. ^; c# R9 J" n4 D
1 W; `+ f1 b! ?) F
MOV R2, #5 ; $ ?4 | _$ F4 g: o) O' g3 \! x$ F
A7:* {5 W6 c0 z) v3 E
MOV R1, #220 ;
+ E( c5 J9 I$ }A8:6 L3 t/ v# W" V. A9 }" w/ ^4 L
ACALL BCD ;# \5 C' Q4 z) j5 R5 C
ACALL DISPCLK ;+ N: e a, Q! P/ C2 B) q) I
ACALL DEL1MS ;
2 B7 ^# N4 o8 j6 v# x- p* c: A ACALL DEL1MS ;
! s7 J i; |% V; ^2 N5 X4 Y; X ACALL DEL1MS ;. v- F7 K+ }: t# C
DJNZ R1, A8 ;
" D- j, c0 I% \% B+ W# C& _ CPL QY ;南北向黄灯亮& }6 w7 H1 d8 Z
CPL HY ;
4 b1 U: Y8 x% z+ A5 g CPL ZY ;东西向黄灯亮
$ d6 {/ e+ W* P* e# H CPL YY ;
% n8 c* k4 Q" _ CPL FMQ ;黄灯时蜂鸣器叫一声
# ^( c. \6 q- O1 K" M ^! s MOV A, DAT ;: D% ?: Y/ O$ Z
ADD A, #99H ;# G1 `% k8 }. X
DA A ;
, L# ?/ M+ H5 K; X" m MOV DAT, A ;3 X" W1 f. z7 G+ H. Y
DJNZ R2, A7 ;
1 }2 C4 i# @: C& I AJMP AUTCLK ;
! p, d1 O$ R0 }. l NOP ;
& a ^ I- N6 p- e) ~. c NOP ;/ t% k4 m( Z0 H! k" y! C9 f" s5 X/ T
NOP ;$ S0 k0 { F$ j4 N+ v7 Q+ @
LJMP START
! O/ Z/ a: g8 ^" [) Y;;*********************************
5 _, x; V: F' j( D) `; o;;显示子程序/ z7 T: x, ?$ ~: b u0 J1 i7 [) Z
;;********************************** ' j3 u; ^- |9 R+ `+ \
DISPCLK:
6 o8 U9 }9 U$ [; b# f MOV DPTR, #TAB ;定入表头
3 ]* P4 ?0 Z3 h t- i: }; x ;显示个位
8 }' Z" s* l) y MOV A, 50H ;! H) f) q2 F& S9 B4 N
MOVC A, @A+DPTR ;
+ ?, _! m; d& d5 Z3 i6 c6 ~9 l* B MOV P0, A ;3 b) C0 G, j0 X4 ^/ t
CLR SWITCH2 ; 个位显示
. ]$ X8 p4 v2 f+ @3 B9 [, Q LCALL DEL1MS ;- S3 H, u3 Z/ [( E6 c, v1 J3 d
SETB SWITCH2 ;个位灭6 ?( q; o' }, R; R* S9 M& @! _
;显示十位% b8 V/ g9 h0 `; X
MOV A, 51H ;! `, f$ {" y6 J; t6 ~
MOVC A, @A+DPTR ;
) z0 R2 J+ q/ K1 U: A4 z MOV P0, A ;8 `/ `' [: @2 ]" L s- L* v9 r, z
CLR SWITCH1 ; 十位显示
3 y" }8 b! u( W$ p& k+ N" \ LCALL DEL1MS ;
8 `9 f/ z) w, c0 {0 q: V SETB SWITCH1 ; 十位灭! c- ` y" ]3 M" A) W$ p
RET ;. I" U8 b: R X5 j0 G
NOP ;
$ F0 `* L" v* [& J NOP ;. A. l" ]( ~1 e( F: h
NOP ;- [* ] \' B, h8 p. V
LJMP START# H; g5 V6 t: J& i
;************************************************************
( Q, m8 h) J# r, D2 w+ B;横向道路紧急中断程序7 r7 J, q" G" F r: o1 J. w
;************************************************************- u( E' o' W0 e7 }! e2 S! J
D_X:
5 \* u! C, p; j( J% x CLR EA ;关总中断
7 i% w# d) k# V% N4 [ JNB P3.2, [ DISCUZ_CODE_19 ]nbsp; ;
7 j9 O# |! i1 X6 j! G& D6 T MOV A, DAT ;保存显示数据
+ e" M8 [" K$ z/ O9 c MOV 20H, A ;' a* `% F1 p9 Q: |3 o3 }0 Z
MOV DAT, #50H ;- p# `$ z5 c5 q( ?$ n
MOV 21H, P1 ;* R9 v$ v% H5 u1 _
MOV 22H, P2 ;% q0 E* j6 j) N+ V
MOV P1, #0FFH ;) R- Q/ U. z! y. i
MOV P2, #0FFH ;
- Z1 R d. ?) s1 p7 I' `2 v; [ CLR ZG ;东西向绿灯亮2 b( I7 i; N$ Y' V: a+ h
CLR YG ;8 y3 N8 A, Q* m( w* i
CLR QR ;南北向红灯亮
6 T) Z% F5 F3 s
. a9 R4 Q- F* x0 R
# ~$ _! O y0 g& S M! L$ O+ h…………限于本文篇幅 余下代码请下载附件…………# i4 R& T/ J/ F$ U- s
1 M8 p$ O/ c8 O' B. {5 R" H$ ]
) I& k- A3 A5 T8 \
9 @$ _, w4 K$ s3 {8 J+ `8 P n8 O3 t# g% |& ]
5 M# T3 D `( W" K: F
|
|