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

📄 lamp04.txt

📁 本设计是在车辆通行繁忙的十字交叉路口设置的灯火控制系统
💻 TXT
字号:
Z8279	EQU	0FF82H	;8279状态/命令口地址
D8279	EQU	0FF80H  ;8279数据口地址
LEDMOD	EQU	00H     ;左边输入八位字符显示
                        ;外部译码键扫描方式,双键互锁
LEDFEQ	EQU	2FH     ;扫描速率
LEDCLS	EQU	0C1H    ;清除显示RAM
LEDWR0	EQU	80H     ;设定的将要写入的显示RAM地址       
READKB  EQU     40H     ;读FIFO RAM地址0的命令字
	ORG 0000H
	MOV DPTR,#8406H ;8255控制口地址  
	MOV A,	#80H    ;命令字传入控制口
	MOVX @DPTR,A
	LJMP START      ;开始程序     
	ORG 0040H
START: MOV 16H,#35      ;设定显示秒数
	MOV SP,#30H     
	LCALL STATUS0   ;调用初始状态全红灯
CIRCLE: LCALL STATUS1   ;南北绿灯东西红灯
	LCALL STATUS2   ;南北绿灯闪转黄灯东西红灯
        LCALL STATUS3   ;南北红灯东西绿灯
        LCALL STATUS4   ;南北红灯东西绿灯闪转黄灯
	LJMP CIRCLE
	

STATUS0:
	MOV DPTR , #8400H 
	MOV A,#0FH
	MOVX @DPTR, A
	MOV R2,#10      ;延时一秒
	LCALL DELAY 
	RET
STATUS1:                ;南北绿灯东西红灯
	MOV DPTR , #8400H
	MOV A,#96H
	MOVX @DPTR, A
	MOV 11H,16H
	LCALL INIT8279  ;初始化清屏     
STA1:   LCALL LC        ;处理并调用显示的数据
	MOV 15H,#07H    ;设定显示位数
	MOV 14H,#06H
	MOV R5,12H
	LCALL DISPLAY   ;调用显示
	MOV R5, 13H
	MOV R2,#10
	LCALL DELAY     ;延时
	LCALL FUWU      ;调用键盘服务程序
	DJNZ 11H,STA1   
	RET
STATUS2:                   ;南北绿灯闪转黄灯东西红灯
	MOV DPTR , #8400H
	MOV R3,#03H        ;闪烁三次
FLASH:
	MOV A,#9FH
	MOVX @DPTR,A
	MOV R2,#03H
	LCALL DELAY
	MOV A,#96H
	MOVX @DPTR,A
	MOV R2,#03H
	LCALL DELAY
	DJNZ R3,FLASH
	MOV A,#06H
	MOVX @DPTR,A
	LCALL INIT8279
	MOV 11H,#5          ;弯道时间
STA2:	LCALL LC
	MOV 14H,#4
	LCALL DISPLAY
	DJNZ 11H,STA2
	RET
STATUS3:                     ;南北红灯东西绿灯
	MOV DPTR , #8400H
	MOV A,#69H
	MOVX @DPTR, A
	MOV 11H,#25          ;设定支道时间
	LCALL INIT8279
STA3:   LCALL LC
	MOV 15H,#03H
	MOV 14H, #02H	
	LCALL DISPLAY
	DJNZ 11H,STA3
	RET
STATUS4:                      ;南北红灯东西绿灯闪转黄灯
	MOV DPTR , #8400H
	MOV R3,#03H
FLASH1:
	MOV A,#6FH
	MOVX @DPTR,A
	MOV R2,#03H
	LCALL DELAY
	MOV A,#69H
	MOVX @DPTR,A
	MOV R2,#03H
	LCALL DELAY
	DJNZ R3,FLASH1
	MOV A,#09H
	MOVX @DPTR,A
	MOV 11H,#05H
	LCALL INIT8279
STA4:	LCALL LC
	MOV 14H,#00H        ;让该位显示0
	LCALL DISPLAY
	DJNZ 11H,STA4 
	RET

INIT8279:                   ;初始化
	MOV	DPTR,#Z8279                       
	MOV	A,#LEDMOD
	MOVX	@DPTR,A
	MOV	A,#LEDFEQ
	MOVX	@DPTR,A
	MOV	A,#LEDCLS
	MOVX	@DPTR,A
	LCALL	DELAY
	RET
DISLED:                      ;显示字符子程序
	PUSH	DPH 
	PUSH	DPL
	PUSH	ACC
	MOV	A,#LEDWR0
	ADD	A,R4
	MOV	DPTR,#Z8279
	MOVX	@DPTR,A
	MOV	DPTR,#LEDSEG
	MOV	A,R5
	MOVC	A,@A+DPTR
	MOV	DPTR,#D8279
	MOVX	@DPTR,A
	POP	ACC
	POP	DPL
	POP	DPH
	RET
DELAY:                      ;延时程序
	PUSH	0	    ;延时100ms
	PUSH	1
       PUSH     2
DELAY1:	MOV	1,#0H
DELAY2:MOV 0,#0B2H
	DJNZ	0,$
	DJNZ	1,DELAY2
        DJNZ    2,DELAY1  
        POP     2
	POP	1
	POP	0
	RET
DISPLAY:                    ;显示字符程序

	MOV R5,12H	;存高位
	MOV R4,15H	;显高位
	LCALL DISLED
	MOV R5,13H
	MOV R4,14H	
	LCALL DISLED
;	MOV R2,#10
;	LCALL DELAY
	;MOV R5,#00H
	;MOV R4,14H
	;LCALL DISLED
	RET
LC:	MOV A, 11H         ;处理将要显示的数据
	MOV B,#0AH
	DIV AB
	MOV 12H,A
	MOV 13H,B
	RET
ERROR:	LCALL STATUS0      ;显示急停子程序
	MOV R5,#10H
	MOV R4,#05H
	LCALL DISLED
	MOV R5,#11H
	MOV R4,#04H
	LCALL DISLED
	MOV R5,#12H
	MOV R4,#03H
	LCALL DISLED
	MOV R5,#13H
	MOV R4,#02H
	LCALL DISLED
	RET









	
FUWU:	                   ;键盘程序
WAIT:	LCALL GETKEY       ;得到键值
	CJNE A,#0FFH,RET0 ;是否有键按下
	MOV A,B
	CJNE A,#0AH, BB    ;判断键值
	LCALL KEYA
	;SJMP RET0
BB:	MOV A,B
	CJNE A,#0BH,CC
	LCALL KEYB
	;SJMP RET0
CC:	MOV A,B
	CJNE A,#0CH,DD
	LCALL  KEYC
	;SJMP RET0
DD:	MOV A,B
	CJNE A,#0DH ,WAIT
	LCALL KEYD
RET0:	RET	
	
GETKEY: PUSH DPH        ;读取键盘子程序,
	PUSH DPL          保护现场
	PUSH PSW
	MOV DPTR,#Z8279 ;读8279状态
	MOVX A,@DPTR
	ANL A,#07H
	JNZ GETVAL      ;判断是否有键输入
	MOV A,#00H      ;置标志(无键输入)
	SJMP NKBHIT     ;
GETVAL:                 ;读FIFO RAM命令
	MOV A,#READKB   ;读键值
	MOVX @DPTR,A
	MOV DPTR,#D8279
	MOVX A,@DPTR
	ANL A,#3FH      ;屏蔽SHIF、CTRL
	MOV B ,A        ;置返回键值
	MOV A,#0FFH     ;置标志(有键输入)
NKBHIT: POP PSW         ;恢复现场  
	POP DPL
	POP DPH
	RET
KEYA:	LCALL INIT8279  ;A键(开始)
	MOV R5,B
	MOV R4,#06H
	LCALL DISLED
 	AJMP START
	RET		
KEYB:	MOV R5,#0BH     ;B键急停
	MOV R4,#06H
	;LCALL DISLED
	LCALL ERROR
	RET
KEYC:	LCALL INIT8279   ;C键改数
	MOV R5,#0CH
	MOV R4,#06H
	LCALL DISLED
WAIT1:	LCALL GETKEY
	CJNE A,#0FFH,WAIT1
	MOV R5,B
	MOV 21H,B
	MOV R4,#01H
	LCALL DISLED
WAIT2:	LCALL GETKEY
	CJNE A,#0FFH,WAIT2
	MOV R5,B
	MOV 20H,B
	MOV R4,#0
        LCALL DISLED
	CLR A
	;MOV A,81H
	;MOV B,#10
	;MUL AB
	;MOV B,80H	
	;ADD A,B
	;MOV 16H,A
	RET	
KEYD:	MOV A,21H        ;D键确认
	MOV B,#10
	MUL AB
	MOV B,20H
	ADD A,B 
	MOV 16H,A
	MOV 11H,16H
	;LCALL CIRCLE
	AJMP CIRCLE
	RET
LEDSEG: DB  3FH,06H,5BH,4FH,66H,6DH,7DH,07H;'0,1,2,3,4,5,6,7,'
        DB  7FH,6FH,77H,7CH,39H,5EH,79H,71H;'8,9,A,B,C,D,E,F,'
	DB  73H,40H,40H,73H;'P,-,-,P,'
	END
			


















































































































































0000












































⌨️ 快捷键说明

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