Proteus VSM Studio汇编 +交通信号灯模拟

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Proteus VSM Studio汇编 +交通信号灯模拟相关的知识,希望对你有一定的参考价值。

Proteus VSM Studio汇编 +交通信号灯模拟


  • Proteus VSM演示导入和仿真全过程

基于Proteus VSM Studio汇编代码(.asm)

SECOND1	EQU		30H					;东西路口计时寄存器
SECOND2	EQU		31H					;南北路口计时寄存器 
DBUF	EQU		40H					;显示码缓冲区1
TEMP	EQU		44H					;显示码缓冲区2
LED_G1	BIT		P2.1				;东西路口绿灯
LED_Y1	BIT		P2.2				;东西路口黄灯
LED_R1	BIT		P2.3				;东西路口红灯
LED_G2	BIT		P2.4				;南北路口绿灯
LED_Y2	BIT		P2.5				;南北路口黄灯
LED_R2	BIT		P2.6				;南北路口红灯
		ORG		0000H
		LJMP	START
		ORG		0100H
START:	MOV		TMOD,#01H			;置T0为工作方式1
		MOV		TH0,#3CH			;置T0定时初值50ms
		MOV		TL0,#0B0H				
		CLR		TF0
		SETB	TR0					;启动T0
		CLR		A
		MOV		P1,A				;关闭不相关的LED
;***************************************************
LOOP:	MOV		R2,#20				;1s计数初值,50ms*20=1s
		MOV		R3,#20				;红灯亮20s
		MOV		SECOND1,#25			;东西路口计时显示初值25s
		MOV		SECOND2,#25			;南北路口计时显示初值25s
		LCALL	DISPLAY
		LCALL	STATE1				;调用状态1
WAIT1:	JNB		TF0,WAIT1			;查询50ms到否
		CLR		TF0			
		MOV		TH0,#3CH			;恢复T0定时初值50ms
		MOV		TL0,#0B0H
		DJNZ	R2,WAIT1			;判断1s到否?未到继续状态1
		MOV		R2,#20				;50ms计数初值 
		DEC		SECOND1				;东西路口显示时间减1s
		DEC		SECOND2				;南北路口显示时间减1s
		LCALL	DISPLAY
		DJNZ	R3,WAIT1			;状态1维持20s
;*******************************************
		MOV		R2,#5				;50ms计数初值	5*4=20
		MOV		R3,#3				;绿灯闪3s
		MOV		R4,#4				;闪烁间隔200ms
		MOV		SECOND1,#5			;东西路口计时显示初值5s
		MOV		SECOND2,#5			;南北路口计时显示初值5s
		LCALL	DISPLAY
WAIT2:	LCALL	STATE2				;调用状态2
		JNB		TF0,WAIT2			;查询50ms到否
		CLR		TF0
		MOV		TH0,#3CH			;恢复T0定时初值50ms
		MOV		TL0,#0B0H
		DJNZ	R4,WAIT2			;判断200ms到否?未到继续状态2
		CPL		LED_G1				;东西绿灯闪
		MOV		R4,#4				;闪烁间隔200ms
		DJNZ	R2,WAIT2			;1s到否?未到继续状态2
		MOV		R2,#5				;50ms计数初值
		DEC		SECOND1				;东西路口显示时间减1s
		DEC		SECOND2				;南北路口显示时间减1s
		LCALL	DISPLAY
		DJNZ	R3,WAIT2			;状态2维持3s
;****************************************
		MOV		R2,#20				;50ms计数初值
		MOV		R3,#2				;黄灯闪2s
		MOV		SECOND1,#2			;东西路口计时显示初值2s
		MOV		SECOND2,#2			;南北路口计时显示初值2s
		LCALL	DISPLAY
WAIT3:	LCALL	STATE3				;调用状态3
		JNB		TF0,WAIT3			;查询100ms到否
		CLR		TF0
		MOV		TH0,#3CH			;恢复T0定时初值100ms
		MOV		TL0,#0B0H
		DJNZ	R2,WAIT3			;判断1s到否?未到继续状态3
		MOV		R2,#20				;100ms计数初值
		DEC		SECOND1				;东西路口显示时间减1s
		DEC		SECOND2				;南北路口显示时间减1s
		LCALL	DISPLAY
		DJNZ	R3,WAIT3			;状态3维持2s
;*******************************************
		MOV		R2,#20				;50ms计数初值
		MOV		R3,#20				;红灯闪20s
		MOV		SECOND1,#25			;东西路口计时显示初值25s
		MOV		SECOND2,#25			;南北路口计时显示初值25s
		LCALL	DISPLAY
WAIT4:	LCALL	STATE4				;调用状态4
		JNB		TF0,WAIT4			;查询100ms到否
		CLR		TF0
		MOV		TH0,#3CH			;恢复T0定时初值100ms
		MOV		TL0,#0B0H
		DJNZ	R2,WAIT4			;判断1s到否?未到继续状态4
		MOV		R2,#20				;100ms计数初值
		DEC		SECOND1				;东西路口显示时间减1s
		DEC		SECOND2				;南北路口显示时间减1s
		LCALL	DISPLAY
		DJNZ	R3,WAIT4			;状态4维持20s
;*******************************************
		MOV		R2,#5				;50ms计数初值
		MOV		R4,#4				;红灯闪20ms
		MOV		R3,#3				;绿灯闪3s
		MOV		SECOND1,#5			;东西路口计时显示初值5s
		MOV		SECOND2,#5			;南北路口计时显示初值5s
		LCALL	DISPLAY
WAIT5:	LCALL	STATE5				;调用状态5
		JNB		TF0,WAIT5			;查询100ms到否
		CLR		TF0
		MOV		TH0,#3CH			;恢复T0定时初值100ms
		MOV		TL0,#0B0H				
		DJNZ	R4,WAIT5			;判断200ms到否?未到继续状态5
		CPL		LED_G2				;南北绿灯闪
		MOV		R4,#4				;闪烁200ms
		DJNZ	R2,WAIT5			;判断1s到否?未到继续状态5
		MOV		R2,#5				;100ms计数初值
		DEC		SECOND1				;东西路口显示时间减1s
		DEC		SECOND2				;南北路口显示时间减1s
		LCALL	DISPLAY
		DJNZ	R3,WAIT5			;状态5维持3s
;****************************************
		MOV		R2,#20				;50ms计数初值
		MOV		R3,#2				;红灯闪2s
		MOV		SECOND1,#2			;东西路口计时显示初值2s
		MOV		SECOND2,#2			;南北路口计时显示初值2s
		LCALL	DISPLAY
		WAIT6:	LCALL	STATE6		;调用状态6
		JNB		TF0,WAIT6			;查询100ms到否
		CLR		TF0	
		MOV		TH0,#3CH			;恢复T0定时初值100ms
		MOV		TL0,#0B0H
		DJNZ	R2,WAIT6			;判断1s到否?未到继续状态6
		MOV		R2,#20				;100ms计数初值
		DEC		SECOND1				;东西路口显示时间减1s
		DEC		SECOND2				;南北路口显示时间减1s
		LCALL	DISPLAY
		DJNZ	R3,WAIT6			;状态6维持2s
		LJMP	LOOP				;大循环
;**********************************************
STATE1:								;状态1
		SETB	LED_G1				;东西路口绿灯亮
		CLR		LED_Y1
		CLR		LED_R1
		CLR		LED_G2
		CLR		LED_Y2
		SETB	LED_R2				;南北路口红灯亮
		RET
STATE2:								;状态2
		CLR		LED_Y1
		CLR		LED_R1
		CLR		LED_G2
		CLR		LED_Y2
		SETB	LED_R2				;南北路口红灯亮
		RET
STATE3:								;状态3
		CLR		LED_G1
		CLR		LED_R1
		CLR		LED_G2
		CLR		LED_Y2
		SETB	LED_R2				;南北路口红灯亮
		SETB	LED_Y1				;东西路口绿灯亮
		RET
STATE4:								;状态4
		CLR		LED_G1
		CLR		LED_Y1
		SETB	LED_R1				;东西路口红灯亮
		SETB	LED_G2				;南北路口绿灯亮
		CLR		LED_Y2
		CLR		LED_R2
		RET
STATE5:								;状态5
		CLR		LED_G1
		CLR		LED_Y1
		SETB	LED_R1				;东西路口红灯亮
		CLR		LED_Y2
		CLR		LED_R2
		RET
STATE6:								;状态6
		CLR		LED_G1
		CLR		LED_Y1
		SETB	LED_R1				;东西路口红灯亮
		CLR		LED_G2
		CLR		LED_R2
		SETB	LED_Y2				;南北路口红灯亮
		RET
DISPLAY:							;数码显示
		MOV		A,SECOND1			;东西路口计时寄存器
		MOV		B,#10				;16进制数拆成两个10进制数
		DIV		AB
		MOV		DBUF+3,A
		MOV		A,B
		MOV		DBUF+2,A
		MOV		A,SECOND2			;南北路口计时寄存器
		MOV		B,#10				;16进制数拆成两个10进制数
		DIV		AB
		MOV		DBUF+1,A
		MOV		A,B
		MOV		DBUF,A
		MOV		R0,#DBUF
		MOV		R1,#TEMP
		MOV		R7,#4
DP10:	MOV		DPTR,#LEDMAP
		MOV		A,@R0
		MOVC	A,@A+DPTR
		MOV		@R1,A
		INC		R0
		INC		R1
		DJNZ	R7,DP10
		MOV		R0,#TEMP
		MOV		R1,#4
DP12:	MOV		R7,#8
		MOV		A,@R0
DP13:	RLC		A
		MOV		P3.0,C
		CLR		P3.1
		SETB	P3.1
		DJNZ	R7,DP13
		INC		R0
		DJNZ	R1,DP12
		RET
LEDMAP:
		DB	3FH,06H,5BH,4FH,66H,6DH		;012345
		DB	7DH,07H,7FH,6FH,77H,7CH		;6789,A,B
		DB	58H,5EH,7BH,71H,0,40H		;C,D,E,F, ,-
		END

仿真资源和程序源码

本实验基于Proteus8.9SP2平台,保留Keil 外部编译工程

链接:https://pan.baidu.com/s/1ktHBR_egVAc16gEItVxQnQ 
提取码:wv0y

以上是关于Proteus VSM Studio汇编 +交通信号灯模拟的主要内容,如果未能解决你的问题,请参考以下文章

基于51单片机交通灯控制系统 汇编语言 汇编交通灯

Proteus51单片机交通灯信号模拟仿真示例二

Proteus51单片机交通灯信号模拟仿真示例一

Proteus仿真Arduino UNO LED模拟交通灯

Proteus51单片机交通灯信号模拟仿真示例三

51单片机的交通灯Proteus仿真设计 串口+按键(紧急+夜间+忙闲时+夜间行人模式)