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