本设计以AT89C51单片机为主控模块,主要由按钮开关,数码管,发光二极管组成,利用汇编语言编写程序来模拟对十字路口的交通管理,南北方向亮绿灯10s,然后黄灯亮5次,这个过程东西方向红灯亮15s,之后东西方向亮绿灯10s,然后亮黄灯5s,这个过程南北方向亮红灯15s。各路灯用LED模拟显示,同时用七段数码管显示两路的倒计时时间。利用键盘可修改灯亮时间PC机设置灯亮时间,利用PC与单片机串口通信实现。为防止出现紧急情况(如119,110通过时),该系统还设置了中断,将东西南北方向全是红灯。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- ORG 0000H
- LJMP MAIN
- ORG 0003H
- LJMP ZHD1
- ORG 000BH
- LJMP ZHD2
- ORG 0013H
- LJMP ZHD3
- ORG 1000H;主程序
- MAIN:
- MOV TMOD,#01H;设工作方式
- MOV TL0,#0F0H;设初值,单片机晶振12M,定时10ms
- MOV TH0,#0D8H
- SETB EA;开放总中断
- SETB ET0;开放T0中断
- SETB TR0;启动T0定时
- SETB EX0;开放外中断0
- SETB EX1;开放外中断1
- SETB IT0;设外中断0为边沿触发
- CLR IT1;设外中断1为低电平有效
- SETB PT0
- CYCLE:
- MOV R3,#30;
- MOV R0,#10;AB方向绿灯显示时间
- MOV R1,#30;CD方向红灯显示时间
- MOV R4,#15;
- MOV R2,#25;为延时1秒而用;CD红灯AB绿灯
- LOOP1:
- SETB P3.4
- MOV P1,#01H
- SETB P1.5;点亮绿灯
- SETB P1.2;点亮红灯
- LCALL DISPLAY;调用显示程序
- DJNZ R2,LOOP1
- MOV R2,#25
- DEC R4
- DEC R1
- DEC R3
- DJNZ R0,LOOP1
- AJMP LOOP2
- LOOP2:
- SETB P3.4
- MOV P1,#01H
- SETB P1.6;点亮黄灯
- SETB P1.2;点亮红灯
- LCALL DISPLAY;调用显示程序
- DJNZ R2,LOOP2
- MOV R2,#25
- DEC R1
- DEC R3
- DJNZ R4,LOOP2
- AJMP CYCLE1
- CYCLE1:
- MOV R0,#10;
- MOV R4,#15;
- LOOP3:
- SETB P3.4
- MOV P1,#01H
- SETB P1.7;点亮红灯
- SETB P1.4;点亮绿灯
- LCALL DISPLAY;调用显示程序
- DJNZ R2,LOOP3
- MOV R2,#25
- DEC R4
- DEC R1
- DEC R3
- DJNZ R0,LOOP3
- LOOP4:
- MOV P1,#01H
- SETB P1.7;点亮红灯
- ;SETB P1.3;点亮黄灯
- LLJ1: LCALL DISPLAY;调用显示程序
- DJNZ R2,LLJ1
- SETB P2.7;点亮红灯
- MOV R2,#25
- DEC R0
- DEC R4
- DEC R3
- DJNZ R1,LOOP4
- LJMP CYCLE;键盘中断程序
- ZHD1: LCALL DISPLAY
- JB P3.6,Q2
- INC R1
- INC R0
- CJNE R1,#99,TIAO2
- MOV R1,#00H
- TIAO2 :CJNE R0,#99,TIAO3
- MOV R0,#00H
- TIAO3:
- LCALL DISPLAY
- LCALL DISPLAY
- LCALL DISPLAY
- LCALL DISPLAY
- LCALL DISPLAY
- LCALL DISPLAY
- JNB P1.0,Z2
- Q2 :JB P3.7,WAIT1
- DEC R1
- DEC R0
- CJNE R1,#00H,TIAO
- MOV R1,#99
- TIAO :CJNE R0,#00H,TIAO1
- MOV R0,#99
- TIAO1:
- LCALL DISPLAY
- LCALL DISPLAY
- LCALL DISPLAY
- LCALL DISPLAY
- LCALL DISPLAY
- LCALL DISPLAY
- WAIT1 :JNB P1.0,Z2
- WAIT :LJMP ZHD1
- Z2: RETI;时间中断程序
- ZHD2: MOV TL0,#0F0H;重先赋值
- MOV TH0,#0D8H
- CLR P3.4
- RETI;应急通道中断程序
- ZHD3:MOV P1,#85H
- MOV P0,#30H
- MOV P2,#30H
- JNB P3.3,ZHD3
- RETI;数显显示
- DISPLAY:
- MOV A,R3;AB方向时间的显示
- MOV B,#10
- DIV AB;把要显示的数的十位存放在A中,个位存放在B中
- ADD A,#10H;位选通十位
- MOV P0,A;
- TI0: JNB P3.4,TT
- SJMP TI0
- TT: SETB P3.4
- MOV A,B
- ADD A,#20H;位选通个位
- MOV P0,A;显示个位数字
- TI1: JNB P3.4,TT1
- SJMP TI1
- TT1: SETB P3.4;CD方向的显示
- MOV A,R1;CD方向时间的显示
- MOV B,#10
- DIV AB
- ADD A,#10H;位选通十位
- MOV P2,A;显示十位数字
- TI2: JNB P3.4,TT2
- SJMP TI2
- TT2: SETB P3.4
- MOV A,B
- ADD A,#20H;位选通个位
- MOV P2,A;显示个位数字
- TI3: JNB P3.4,TT3
- SJMP TI3
- TT3: SETB P3.4
- RET
- END
复制代码
所有资料51hei附件下载:
工程及仿真.7z
(71.31 KB, 下载次数: 120)
|