⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 交通灯(正驱动继电器).asm

📁 TRAFFIC_LAMP.rar包括电路图和源程序
💻 ASM
字号:
RED_SN		BIT	P1.0
YELLOW_SN	BIT	P1.1
GREEN_SN	BIT	P1.2
RED_EW		BIT	P1.3
YELLOW_EW	BIT	P1.4
GREEN_EW	BIT	P1.5
LATCH		BIT	P1.6
SET_KEY		BIT	P3.2
ADD_KEY		BIT	P3.3
SUBB_KEY	BIT	P3.4
DIRECTION_F	BIT	20H;当它为一时,表示东西方向红灯亮
LEAST_F		BIT	21H;最小值
MOST_F		BIT	22H;能显示的最大值
SHOW_F		BIT	23H;显示需要重新载入数据的标志
FLICKER		BIT	24H;绿灯闪烁标志
F_YELLOWY	BIT	25H;黄灯亮的标志

SHOW		EQU	30H;显示缓冲区
DATA_EW		EQU	31H;东西方向红灯显示的数据(最大)
DATA_SN		EQU	32H;南北方向红灯显示的数据(最大)
SECOND_TIME	EQU	33H;显示延时参数
SECOND_FLICKER	EQU	34H;闪烁延时参数
STATUS		EQU	35H;设置状态寄存器

	ORG	0
	JMP	MAIN

	ORG	0BH
	JMP	INT_T0			;计数

	ORG	1BH
	JMP	INT_T1			;闪烁定时
MAIN:
	MOV	SCON,#0
	MOV	TMOD,#11H
	MOV	TH0,#3CH
	MOV	TL0,#0B0H
	MOV	TH1,#3CH
	MOV	TL1,#0B0H
	SETB	EA
	SETB	ET0
	SETB	ET1
	SETB	TR0
	MOV	DPTR,#TAB
	MOV	SECOND_TIME,#20
	MOV	SECOND_FLICKER,#10
	MOV	DATA_EW,#25H;
	MOV	DATA_SN,#25H
	SETB	DIRECTION_F
	CLR	FLICKER
	MOV	STATUS,#0
	CLR	SHOW_F

	SETB	RED_SN			;让灯都灭
	SETB	YELLOW_SN
	SETB	GREEN_SN	
	SETB	RED_EW	
	SETB	YELLOW_EW	
	SETB	GREEN_EW
	
	
SCAN:
	JB	SET_KEY,NO_CHANGE	;判断设置键是否按下:没有则跳转
	CALL	DELAY
	JB	SET_KEY,SCAN
	INC	STATUS
	MOV	A,STATUS
	CJNE	A,#3,EXIT_CHANGE_STATUS
	MOV	STATUS,#0
	MOV	SHOW,DATA_EW
	SETB	DIRECTION_F		;TEXT
	SETB	TR0

EXIT_CHANGE_STATUS:
	JNB	SET_KEY,$
	CALL	DELAY
	JMP	SCAN

NO_CHANGE:
	MOV	A,STATUS
	JNZ	SET_PROGRAMME		;判断是否处在设置状态

	JNB	DIRECTION_F,SHOW_SN;在正常显示下,判断应该显示的方向
	JB	SHOW_F,CHOOSE_STEP	;判断是否应该更新显示内容,当SHOW_F置位时,不更新
	MOV	SHOW,DATA_EW				
	SETB	SHOW_F
CHOOSE_STEP:
	SETB	RED_SN
	CLR	RED_EW
	JNB	FLICKER,GO_ON_NEXT	;判断南北绿灯是否该闪烁
	SETB	TR1			;南北绿灯闪烁
	JMP	SCAN
GO_ON_NEXT:
	CLR	TR1
	JNB	F_YELLOWY,SN_GREEN_NATURE;判断南北黄灯是否该亮
	SETB	GREEN_SN
	CLR	YELLOW_SN
	JMP	SCAN	
SN_GREEN_NATURE:			 ;南北绿灯亮
	CLR	GREEN_SN
	SETB	GREEN_EW
	SETB	YELLOW_EW
	JMP	SCAN

SHOW_SN:
	JB	SHOW_F,STEP_CHOOSE
	MOV	SHOW,DATA_SN
	SETB	SHOW_F
STEP_CHOOSE:
	SETB	RED_EW
	CLR	RED_SN
	JNB	FLICKER,GO_TO_NEXT
	SETB	TR1
	JMP	SCAN
GO_TO_NEXT:
	CLR	TR1
	JNB	F_YELLOWY,EW_GREEN_NATURE
	SETB	GREEN_EW
	CLR	YELLOW_EW
	JMP	SCAN	
EW_GREEN_NATURE:
	CLR	GREEN_EW
	SETB	GREEN_SN
	SETB	YELLOW_SN
	JMP	SCAN

SET_PROGRAMME:
	CLR	TR0
	CLR	FLICKER
	CLR	SHOW_F
	SETB	DIRECTION_F

	CJNE	A,#1,SET_SN;;在设置状态下,判断哪个方向上地设置
	MOV	P1,#0F7H
	MOV	SHOW,DATA_EW
	CALL	TRAFFIC
;在设置东西方向时,冉灯都亮来说明确实在设置状态昧
	JNB	ADD_KEY,ADD_EW_DATA
	JB	SUBB_KEY,EXIT_EW_SET
	CALL	DELAY
	JB	SUBB_KEY,EXIT_EW_SET
	MOV	A,DATA_EW
	CJNE	A,#5,EW_SUBB_FUNDUS
	JMP	WAIT_EW_SUBB_UNPRESSED

EW_SUBB_FUNDUS:
	ADD	A,#99H
	DA	A
	MOV	DATA_EW,A
	MOV	SHOW,DATA_EW
	CALL	TRAFFIC

WAIT_EW_SUBB_UNPRESSED:
	JNB	SUBB_KEY,$
	CALL	DELAY

EXIT_EW_SET:
	JMP	SCAN
	
ADD_EW_DATA:
	CALL	DELAY
	JB	ADD_KEY,EXIT_EW_SET
	MOV	A,DATA_EW
	CJNE	A,#99H,EW_ADD_FUNDUS
	JMP	WAIT_EW_ADD_UNPRESSED

EW_ADD_FUNDUS:
	ADD	A,#1
	DA	A
	MOV	DATA_EW,A
	MOV	SHOW,DATA_EW
	CALL	TRAFFIC
WAIT_EW_ADD_UNPRESSED:
	JNB	ADD_KEY,$
	JMP	SCAN

SET_SN:
	MOV	P1,#0FEH
	MOV	SHOW,DATA_SN
	CALL	TRAFFIC
	JNB	ADD_KEY,ADD_SN_DATA
	JB	SUBB_KEY,EXIT_SN_SET
	CALL	DELAY
	JB	SUBB_KEY,EXIT_SN_SET
	MOV	A,DATA_SN
	CJNE	A,#5,SN_SUBB_FUNDUS
	JMP	WAIT_SN_SUBB_UNPRESSED

SN_SUBB_FUNDUS:
	ADD	A,#99H
	DA	A
	SETB	LEAST_F
	MOV	DATA_SN,A
	MOV	SHOW,DATA_SN
	CALL	TRAFFIC

WAIT_SN_SUBB_UNPRESSED:
	JNB	SUBB_KEY,$
	CALL	DELAY
EXIT_SN_SET:
	JMP	SCAN
	
ADD_SN_DATA:
	CALL	DELAY
	JB	ADD_KEY,EXIT_SN_SET
	MOV	A,DATA_SN
	CJNE	A,#99H,SN_ADD_FUNDUS
	JMP	WAIT_SN_ADD_UNPRESSED

SN_ADD_FUNDUS:
	ADD	A,#1
	DA	A
	MOV	DATA_SN,A
	MOV	SHOW,DATA_SN
	CALL	TRAFFIC
WAIT_SN_ADD_UNPRESSED:
	JNB	ADD_KEY,$
	JMP	SCAN

DELAY:
	MOV	R1,#40
LOOP:
	MOV	R2,#0
	DJNZ	R2,$
	DJNZ	R1,LOOP
	RET

INT_T0:
	MOV	TH0,#3CH
	MOV	TL0,#0B0H
	PUSH	ACC
	PUSH	PSW
	DJNZ	SECOND_TIME,EXIT_INT
	MOV	SECOND_TIME,#20
	MOV	A,SHOW
	ADD	A,#99H
	DA	A
	MOV	SHOW,A
	CJNE	A,#4,GO_ON_GO
	SETB	FLICKER
GO_ON_GO:
	CJNE	A,#2,BEARING_CPL
	CLR	FLICKER
	SETB	F_YELLOWY	
BEARING_CPL:
	CJNE	A,#0,EXIT_INT_SECOND
	CLR	F_YELLOWY
	CPL	DIRECTION_F
	CLR	SHOW_F
EXIT_INT_SECOND:
	CALL	TRAFFIC
EXIT_INT:
	POP	PSW
	POP	ACC
	RETI

INT_T1:
	PUSH	PSW
	MOV	TH0,#3CH
	MOV	TL0,#0B0H
	DJNZ	SECOND_FLICKER,END_T1
	MOV	SECOND_FLICKER,#10
	JNB	DIRECTION_F,NEXT
	CPL	GREEN_SN
	JMP	END_T1
NEXT:
	CPL	GREEN_EW
END_T1:
	POP	PSW
	RETI
	
TRAFFIC:	
	MOV	A,SHOW
	ANL	A,#0FH
	MOVC	A,@A+DPTR
;	CPL	A
	MOV	SBUF,A
	JNB	TI,$
	CLR	TI
	MOV	A,SHOW
	ANL	A,#0F0H
	SWAP	A
	MOVC	A,@A+DPTR
;	CPL	A
	MOV	SBUF,A
	JNB	TI,$
	CLR	TI
	CLR	LATCH
	SETB	LATCH
	RET
TAB:
	DB 0fch, 60h,0dah,0f2h, 66h,0b6h,0beh,0e0h,0feh,0f6h

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -