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