📄 kd618.asm
字号:
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 + -