📄 twp.asm
字号:
COUNT1 EQU 22H
COUNT2 EQU 23H
COUNT3 EQU 24H
YJ1 EQU 25H
YJ2 EQU 26H
DAT EQU 27H
RLD1 EQU 28H
muteM EQU 10h ;静音键 闹铃开/关
timerT EQU 0Ch ;菜单键 进入/退出设置状态
leftL EQU 46h ;左移键
rightR EQU 47h ;右移键
upU EQU 19h ;增加键
downD EQU 1dh ;减少键
d_off EQU 16H ;显示键 LED数码管显示/关闭
recall EQU 44H ;日历键 DS1302初始化操作
;HT1380
BitCnt EQU 48H ;数据位计数器
ByteCnt EQU 49H ;数据字节计数器
Command EQU 4AH ;命令字节地址
RcvDat EQU 4BH ;接收数据缓冲区
XmtDat EQU 53H ;发送数据缓冲区
k_ON EQU P1.4
ALE EQU P1.1
RST BIT P1.2
DAT2 BIT P1.5 ;阳极数据
DAT1 BIT P1.6 ;阴极数据
STBOE BIT P1.7
CLK1 BIT P3.3 ;阴极数据CK
CLK2 BIT P3.5 ;阳极数据CK
WR1 EQU P3.6
RD1 EQU P3.7
A139 EQU P2.7
B139 EQU P2.6
ORG 0000H
AJMP START
ORG 0003H
LJMP INT ;转中断服务子程序
ORG 000BH ;定时器T0的入口
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 0030H
START: MOV TMOD,#20H ;T1方式2,T0方式1
MOV PSW,#00H
MOV SP,#60H
SETB EA ;开CPU中断
SETB IT0 ;设定INT0触发方式
SETB EX0 ;INT0请求中断
ACALL Write_Enable
ACALL HT1380
MOV COUNT1,#00H
MOV COUNT2,#80H
MOV COUNT3,#00H
MOV RLD1,#00H
LCALL ZH128
MAIN: LCALL DISP
LCALL DELAY
INC RLD1
MOV A,RLD1
CJNE A,#05,MAIN1
MOV RLD1,#00H
MOV A,COUNT3
CJNE A,#47H,RRS1
LCALL RR00
RRS1: MOV A,COUNT3
CJNE A,#46H,MAIN1
LCALL RL00
MAIN1: SJMP MAIN
;存到62128子程序
ZH128: MOV DPTR,#TAB
MOV R0,#100
MOV R1,#06
ZH1280: MOV A,#00H
MOVC A,@A+DPTR
MOV DAT,A
LCALL ST128WR
INC DPTR
DJNZ R0,ZH1280
DJNZ R1,ZH1280
RET
HT1380: PUSH ACC
;秒
MOV A,4BH
ANL 4BH,#0FH
MOV 33H,4BH
SWAP A
ANL A,#0FH
MOV 32H,A
;分
MOV A,4CH
ANL 4CH,#0FH
MOV 41H,4CH
SWAP A
ANL A,#0FH
MOV 40H,A
;时
MOV A,4DH
ANL 4DH,#0FH
MOV 25H,4DH
SWAP A
ANL A,#0FH
CJNE A,#00H,SI11
MOV A,#0AH
SI11: MOV 24H,A
;日
MOV A,4EH
ANL 4EH,#0FH
;MOV 32H,4EH
SWAP A
ANL A,#0FH
CJNE A,#00H,RI11
MOV A,#0AH
RI11: MOV 35H,A
;月
MOV A,4FH
ANL 4FH,#0FH
MOV 38H,4FH
SWAP A
ANL A,#0FH
CJNE A,#00H,YE11
MOV A,#0AH
YE11: MOV 3BH,A
;年
NIAN: MOV A,51H
ANL 51H,#0FH
MOV 3EH,51H
SWAP A
ANL A,#0FH
MOV 41H,A
POP ACC
RET
;628128读子程序
ST128RD:MOV P0,DPL ;低六位地址信号
SETB ALE
NOP
CLR ALE
MOV P2,DPH
MOV A,DPH
RR A
RR A
ANL A,#3FH ;屏蔽最高两位
SETB A139
MOV P0,A ;高2位地址
SETB B139
CLR A139
SETB WR1
CLR RD1 ;读信号
SETB CLK1
SETB CLK1
CLR P3.0 ;开628128
MOV DAT,P0 ;数据信号
SETB DAT1
SETB P3.0
RET
;628128写子程序
ST128WR:PUSH ACC
MOV P0,DPL ;低六位地址信号
SETB ALE
NOP
CLR ALE
MOV P2,DPH
MOV A,DPH
RR A
RR A
ANL A,#3FH ;屏蔽最高两位
SETB A139
MOV P0,A ;高2位地址
SETB B139
CLR A139
CLR WR1
SETB RD1 ;读信号
CLR P3.0 ;开628128
MOV P0,DAT ;数据信号
SETB DAT1
SETB P3.0
POP ACC
RET
DISP: MOV PSW,#00H
MOV R2,#08H ;半字
MOV R3,#02H ;一字
MOV R4,#16 ;字数
MOV R5,#16 ;一屏
MOV COUNT1,#00H
MOV COUNT2,#00H
DISP1: LCALL ZJZH1
LOOP: LCALL ST128RD
MOV A,DAT
LOOP1: RLC A
JC LOOP2
CLR DAT1
AJMP LOOP3
LOOP2: SETB DAT1
LOOP3: CLR CLK1
NOP
SETB CLK1
DJNZ R2,LOOP1
MOV R2,#08H
INC DPTR
DJNZ R3,LOOP
MOV R3,#02H
LCALL ZJZH
DJNZ R4,LOOP
MOV R4,#16 ;字数
INC COUNT1
SETB STBOE
ACALL YJ00
CLR STBOE
SETB STBOE
ACALL DELAY
CLR STBOE
DJNZ R5,DISP1
RET
YJ00: PUSH DPH
PUSH DPL
MOV R0,#08H
MOV R1,#02H
YJ01: MOV DPTR,#TAB1
MOV A,COUNT2
MOVC A,@A+DPTR
YJ02: RLC A
JC YJ03
CLR DAT2
AJMP YJ04
YJ03: SETB DAT2
YJ04: CLR CLK2
NOP
SETB CLK2
DJNZ R0,YJ02
MOV R0,#08H
INC COUNT2
DJNZ R1,YJ01
SETB STBOE
POP DPL
POP DPH
RET
DIS_OFF:SJMP $
;遥控器
INT: CLR EA
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
CLR RS0
SETB RS1
MOV R6,#10D ;
SB: ACALL YS1
JB P3.2,EXIT
DJNZ R6, SB
JNB P3.2, $ ;
ACALL YS2
JB P3.2,EXIT
MOV R1,#1AH ;
MOV R2,#4D
PP: MOV R3,#8D
JJJJ: JNB P3.2,$
ACALL YS1
MOV C,P3.2
JNC UUU
JB P3.2,$
UUU: MOV A,@R1
RRC A
MOV @R1,A
DJNZ R3,JJJJ
INC R1
DJNZ R2,PP
;-------------------------------------
MOV A,1AH ;
XRL A,#40h ;判断1AH的值是否等于遥控器低8位地址(40h)
JNZ EXIT ;
MOV A,1bH
XRL A,#0bfh ;再判断高8位地址是否正确(0bfh)
JNZ EXIT
MOV A,1CH
CPL A
XRL A,1DH ;将1CH的值取反后和1DH比较 不同则无效丢弃(核对数据是否准确)
JNZ EXIT
LCALL DO ;相应按键的处理
EXIT: SETB EA
POP DPL
POP DPH
POP PSW
POP ACC
RETI
DO: MOV A,1CH
MOV COUNT3,A
CJNE A,#TIMERT,REDO ;代码不是设置/退出键
RET
REDO: CJNE A,#MUTEM,REDO1 ;不是设置键的处理REDO1,2,3,4...
LJMP MUTE ;MUTE?
REDO1: CJNE A,#D_OFF,DO_SET2
LJMP DIS_OFF ;关闭显示
DO_SET2:JB 0CH,SET2 ;时间设置的处理
RET
SET2: CJNE A,#UPU,SET2A
LJMP INC1 ;+加(^)
SET2A: CJNE A,#DOWND,SET2B
LJMP DEC2 ;- 减
SET2B: CJNE A,#RIGHTR,SET2C
LJMP RIGHT ;RIGHT右移(>)
SET2C: CJNE A,#LEFTL,SET2D
LJMP LEFT ;LEFT左移(<)
SET2D: CJNE A,#RECALL,SET2EXT ;DS1302初始化
LJMP SET1302
SET2EXT:RET
;--------------------delay-----------------------
YS1: MOV 70H,#16D ;延时1
D1: MOV 71H,#46D
DJNZ 71H,$
DJNZ 70H,D1
RET
YS2: MOV 70H,#50 ;延时2
D2: MOV 71H,#80
DJNZ 71H,$
DJNZ 70H,D2
RET
;------------------------------MUTE--------------
MUTE: setb k_ON
;CPL 06H ;静音
;CLR 08H
RET
INC1:
DEC2:
RIGHT:
LEFT:
SET1302: RET
ZJZH: CLR C
MOV A,DPL ;换字转换
ADD A,#30
MOV DPL,A
MOV A,#00H
ADDC A,DPH
MOV DPH,A
RET
ZJZH1: CLR C
MOV DPTR,#TAB ;换行转换
MOV A,COUNT1
MOV B,#2
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,#00H
ADDC A,DPH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -