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