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

📄 kd618.asm

📁 交通灯设计(使用89C51
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	ORG 0000H;   2002.10.18 编制,11,03完成
	SJMP MAIN
	ORG 0003H
	AJMP INS0
	ORG 0030H
MAIN:	MOV SP,#60H
	MOV DPTR,#1FFFH
	MOV R2,#06H
CLRL: MOV A,#0FFH
	MOVX @DPTR,A;  清外围锁存器
	MOV A,DPH
	ADD A,#20H
	MOV DPH,A
	DJNZ R2,CLRL
 	MOV R1,#20H
	MOV R2,#40H;    清20H---5FH CPU RAM 单元
CLRR:	MOV @R1,#00H
	INC R1
	DJNZ R2,CLRR
	MOV 42H,#10H; DS12887 RAM 指针在TOP
	MOV 44H,#10H; .....................
	MOV 5AH,#45H; CPU  RAM内工作表指针在TOP
	MOV 5BH,#02H
	CLR 23H.0   ; 黄闪控制
;================================================ 以下初始化及格式化DS12887
	MOV DPTR,#0eF0Ah;----a寄存器地址
	mov a,#20h;---------启动晶体,关闭方波
	movx @DPTR,a
	inc DPTR;--------------------b寄存器地址
	mov a,#12h;---------时间允许更新,中断;停方波,BCD码,24小时制,非夏令时
	movx @DPTR,a
;-----------------------------------------------
	MOV DPTR,#0EF10H;-----指向DS12887中时段表头
	MOV R7,#09H
	MOV R2,#11H
	MOV R3,#1AH
	MOV R4,#1BH
	MOV R5,#1CH
FORM:	MOVX A,@DPTR
	ANL A,#0FH
	XCH A,R2
	ANL A,#0F0H
	ORL A,R2
	MOV R2,A
	MOVX @DPTR,A
	INC DPTR
	INC DPTR
	INC DPTR
	MOV A,R3
	MOVX @DPTR,A
	INC DPTR
	INC DPTR
	INC DPTR
	MOV A,R4
	MOVX @DPTR,A
	INC DPTR
	INC DPTR
	INC DPTR
	MOV A,R5
	MOVX @DPTR,A
	INC DPTR
	INC DPTR
	INC DPTR
	MOV A,R2
	ADD A,#10H
	MOV R2,A
	MOV A,R3
	ADD A,#10H
	MOV R3,A
	MOV A,R4
	ADD A,#10H
	MOV R4,A
	MOV A,R5
	ADD A,#10H
	MOV R5,A
	DJNZ R7,FORM
;----------------------
	MOV DPTR,#0EF7CH;---------指向最后一个时段头
	MOV A,#0E9H
	MOVX @DPTR,A
;=========================================
      setb it0
	setb ex0
STAR:	SETB EA
	ACALL KEY
	CJNE A,#0FFH,HAVE;----有键按下吗?	
	AJMP OUTP
HAVE:	CJNE A,#00H,TIME
	MOV 20H,#01H;-------显示日期
	AJMP OUTP
TIME:	CJNE A,#01H,STAT
	MOV 20H,#00H;-------显示时间
	AJMP OUTP
STAT:	CJNE A,#02H,YELL
	MOV 20H,#02H;----------显示状态
	AJMP OUTP
YELL:	CJNE A,#03H,CASE
	MOV 20H,#03;-------显示黄灯
	AJMP OUTP
CASE:	CJNE A,#09H,PROG
	MOV 20H,#04H;--------显示方案
	AJMP OUTP
PROG:	CJNE A,#0BH,UPK
	MOV R1,#20H
	CJNE @R1,#02H,SETI;-------转编程
	AJMP OUTP
UPK:	CJNE A,#0AH,DOWN;----------是上键?
	MOV R1,#20H
	CJNE @R1,#04H,OUTP;--------是方案状态?
	MOV R0,#42H
	CJNE @R0,#10H,INDU;---------在首行?
	AJMP OUTP
INDU:	DEC 42H;-------------上提指针一单元(三字节)
	DEC 42H
	DEC 42H
	AJMP OUTP
DOWN:	CJNE A,#0EH,SNG;---------是下键?
	MOV R1,#20H
	CJNE @R1,#04H,OUTP;-----------是方案?
	MOV R0,#42H
	CJNE @R0,#7CH,INDD;在末行?
	MOV 42H,#10H;---------------转到头
	AJMP OUTP
INDD:	INC 42H;---------------------下推一单元
	INC 42H
	INC 42H
	AJMP OUTP
SETI:	AJMP SET1
SNG:	CJNE A,#04H,EWG
	MOV 21H,#01H;---------------南北绿
	AJMP OUTP
EWG:	CJNE A,#05H,SFR
	MOV 21H,#02H;---------------东西绿
	AJMP OUTP
SFR:	CJNE A,#06H,STOP
	MOV 21H,#03H;---------------四面红
	AJMP OUTP
STOP:	CJNE A,#07H,RETU
	MOV 21H,#04H;---------------停止
	AJMP OUTP
RETU:	CJNE A,#08H,OUTP
	MOV 21H,#00H;---------------复位
;--------------------------------------------------------------------------------------
OUTP:	MOV A,20H
	CJNE A,#00H,CALD
	MOV R0,#30H; ------------将时钟送显缓
	ACALL SEND
	AJMP SCAN
CALD:	CJNE A,#01H,STA1
	MOV R0,#33H;------------将日期送显缓
	ACALL SEND
	AJMP SCAN
STA1:	CJNE A,#02H,YEL1
	MOV 36H,39H;------------将状态送显缓
	MOV 37H,#0FFH;---------中间灭灯
	MOV DPH,#0EFH
	MOV DPL,44H
	MOVX A,@DPTR
	MOV 38H,A
	MOV R0,#36H
	ACALL SEND
	AJMP SCAN
YEL1:	CJNE A,#03H,CAS1
	MOV DPTR,#0EF7DH;-------将黄灯三小项送显缓
WITH:	MOVX A,@DPTR
	MOV 38H,A
	INC DPTR
	MOVX A,@DPTR
	MOV 37H,A
	INC DPTR
 	MOVX A,@DPTR
	MOV 36H,A
	MOV R0,#36H
	ACALL SEND
	AJMP SCAN
CAS1:	CJNE A,#04H,SCAN
	MOV DPH,#0EFH;----------将方案送入显缓
	MOV DPL,42H
	AJMP WITH
;-------------------------------------------
SCAN:	ACALL DISP;-------------小屏送显
	ACALL DISP
;-------------------------------------------
	MOV A,39H;--------------大屏送显
	ANL A,#0FH
	MOV DPTR,#0F00H
	MOVC A,@A+DPTR
	MOV DPTR,#3FFFH
	MOVX @DPTR,A
	MOV A,39H
	ANL A,#0F0H
	SWAP A
	MOV DPTR,#0F00H
	MOVC A,@A+DPTR
	MOV DPTR,#1FFFH
	MOVX @DPTR,A
;----------------------------------
	MOV A,21H
	CJNE A,#00H,SNG1
	MOV 5CH,40H;---------正常红绿灯
	MOV 5DH,41H
	ACALL LAMP
	AJMP STAR
SNG1:	CJNE A,#01H,EWG1
	MOV 5CH,#8cH
	MOV 5DH,#4cH
	ACALL LAMP
	AJMP STAR
EWG1:	CJNE A,#02H,SR1
	MOV 5CH,#61H
	MOV 5DH,#0a1H
	ACALL LAMP
	AJMP STAR
SR1:	CJNE A,#03H,STO1
	MOV 5CH,#49H
	MOV 5DH,#49H
	ACALL LAMP
	AJMP STAR
STO1:	CJNE A,#04H,ST1
	MOV 5CH,#00H
	MOV 5DH,#00H
	ACALL LAMP
ST1:	AJMP STAR	
;====================================================================
LAMP:	MOV A,5CH;-----------将5CH。5DH的内容点灯
	;cpl a;----------------------------------(临时加,应去掉)
	MOV DPTR,#9FFFH
	MOVX @DPTR,A
	MOV A,5DH
	;cpl a;----------------------------------(临时加,应去掉)
	MOV DPTR,#0BFFFH
	MOVX @DPTR,A
	RET
;-----------------------------------
SEND:	MOV R1,#2AH;---------将R0所指的以下三个单元的内容送显缓
	MOV R2,#03H
LOOP:	MOV A,@R0
	ANL A,#0FH
	MOV @R1,A
	INC R1
	MOV A,@R0
	ANL A,#0F0H
	SWAP A
	MOV @R1,A
	INC R1
	INC R0
	DJNZ R2,LOOP
	RET
;=========================================
SET1:	CLR EA;------------------进入设置,关中断
	MOV A,20H;---------------判是黄灯小三样?
	CLR C
	SUBB A,#04H
	JNC CAS3;----------------进入编程
	SETB 2FH.7;---------------点亮最高位
LIT3:	ACALL KEY
	CJNE A,#0DH,LEFT
LITR: ACALL RIMO
	MOV C,2EH.7
	MOV 2DH.7,C
	MOV C,2FH.7
	MOV 2EH.7,C
	MOV C,24H.0
	MOV 2FH.7,C	
	AJMP LIT3
CAS3:	AJMP CAS2
;--------------------------
RIMO:	MOV C,2AH.7;-------------小数点右移
	MOV 24H.0,C
	MOV C,2BH.7
	MOV 2AH.7,C
	MOV C,2CH.7
	MOV 2BH.7,C
	MOV C,2DH.7
	MOV 2CH.7,C
	RET
;--------------------------
LEFT:	CJNE A,#0CH,NUMB
	MOV C,2FH.7;-------------小数点左移
	MOV 24H.0,C
	MOV C,2EH.7
	MOV 2FH.7,C
	MOV C,2DH.7
	MOV 2EH.7,C
	ACALL LEMO
	AJMP LIT3
;-------------------------
LEMO:	MOV C,2CH.7
	MOV 2DH.7,C
	MOV C,2BH.7
	MOV 2CH.7,C
	MOV C,2AH.7
	MOV 2BH.7,C
	MOV C,24H.0
	MOV 2AH.7,C
	RET
;-------------------------
NUMB:	CJNE A,#09H,AGIN
ISNU:	MOV R0,#2AH;------------是数字
CON1:	MOV B,@R0
	JNB B.7,CONT;-----------无小数点继续
	SETB ACC.7
	MOV @R0,A 	
	AJMP LITR;--------------转小数点右移
CONT:	INC R0
	AJMP CON1
AGIN:	JC ISNU
	CJNE A,#0FH,QUIT;-------判是“确定”?
	MOV R0,#20H
	CJNE @R0,#01H,STIM;---------判是“日期”?
      MOV DPTR,#0EF07H
WIT1:	ACALL PAKT;-------------打包
	MOV R0,#30H;-------------------送入DS12887
	MOV R2,#03H
SDAT:	MOV A,@R0
	MOVX @DPTR,A
	INC R0
	INC DPTR
	DJNZ R2,SDAT
	AJMP STAR
STIM:	CJNE @R0,#00H,YEL3;------判是“时间”?
	ACALL PAKT
	MOV R0,#30H
	MOV DPTR,#0EF00H
	MOV R2,#03H
STI1:	MOV A,@R0
	MOVX @DPTR,A
	INC R0
	INC DPTR
	INC DPTR
	DJNZ R2,STI1
	AJMP STAR
YEL3:	CJNE @R0,#03H,QUIT;------判是“黄小三”?
	ACALL PAKT
	MOV A,32H
	MOV DPTR,#0EF7DH
	MOVX @DPTR,A
	MOV A,31H
	INC DPTR
	MOVX @DPTR,A
	MOV A,30H
	INC DPTR
	MOVX @DPTR,A
	AJMP STAR
QUIT:	CJNE A,#0BH,DIR;-------判是“退出”?
	AJMP STAR
DIR:	ACALL DISP
	AJMP LIT3
;=================================================
ISTO:	MOV 43H,#2EH
	SETB 2EH.7
	AJMP TOP
;-------------------------------------
CAS2:	MOV A,42H
	CLR C
	SUBB A,#10H
	MOV B,#0CH
	DIV AB
	MOV A,B
	JZ ISTO
	SETB 2DH.7
	MOV 43H,#2DH
TOP:	ACALL KEY
	CJNE A,#0DH,LEF3;-----------------是》键?
POIR:	ACALL RIMO
	MOV R0,#43H
	CJNE @R0,#2EH,T2DT;---------是时段头?
	MOV C,2EH.7;---------------四位
	MOV 2DH.7,C
	MOV C,24H.0
	MOV 2EH.7,C
	AJMP TOP
T2DT:	MOV C,24H.0
	MOV 2DH.7,C
	AJMP TOP
;-------------------
LEF3:	CJNE A,#0CH,DIGI;---------------是《键?
	MOV R0,#43H
	CJNE @R0,#2EH,F2DT;---------是时段头?
	MOV C,2EH.7
	MOV 24H.0,C
	MOV C,2DH.7
	MOV 2EH.7,C
WWW:	ACALL LEMO
	AJMP TOP
F2DT:	MOV C,2DH.7
	MOV 24H.0,C
	AJMP WWW
DIGI:	CJNE A,#09H,AGIE
ISNE:	MOV R0,#2AH;------------是数字
CONE:	MOV B,@R0
	JNB B.7,COND;-----------无小数点继续
	SETB ACC.7
	MOV @R0,A 	
	AJMP POIR;--------------转小数点右移
COND:	INC R0
	AJMP CONE
AGIE:	JC ISNE
	CJNE A,#0FH,UPE1;-------判是“确定”?
	ACALL WRIT;--------将显示内容压缩后存入42单元所指的12887RAM中
	AJMP STAR
UPE1:	CJNE A,#0AH,EDNE;--------判是UP键?
	MOV R0,#42H
	CJNE @R0,#10H,RISE;----------42指到顶?
	AJMP CAS2
RISE:	ACALL WRIT
	DEC 42H;-------------上升一屏
	DEC 42H
	DEC 42H
NEWB:	MOV DPH,#0EFH;--------新取一屏送显
	MOV DPL,42H
	MOVX A,@DPTR
	MOV 38H,A
	INC DPTR
	MOVX A,@DPTR
	MOV 37H,A
	INC DPTR
	MOVX A,@DPTR
	MOV 36H,A
	MOV R0,#36H
	ACALL SEND
	AJMP CAS2
EDNE:	CJNE A,#0EH,LOK;--------判是向下键吗?
	ACALL WRIT
	MOV R0,#42H
	CJNE @R0,#7CH,BLOW;在末行?
	MOV 42H,#10H;---------------转到头
	AJMP NEWB
BLOW:	INC 42H;---------------------下推一单元
	INC 42H
	INC 42H
	AJMP NEWB
LOK:	CJNE A,#0BH,BACK	 	
	AJMP STAR
BACK:	ACALL DISP
	AJMP TOP
;------------------
WRIT:	ACALL PAKT
	MOV DPH,#0EFH
	MOV DPL,42H
	MOV A,32H
	MOVX @DPTR,A

⌨️ 快捷键说明

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