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