📄 ds1302dis.asm
字号:
;***************************************************************************
;连线图: *LCM---8031* *LCM---8031* *LCM------------8031*
; *DB0---P1.0* *DB4---P1.4* *RS-------------P3.5*
; *DB1---P1.1* *DB5---P1.5* *RW-------------P3.4*
; *DB2---P1.2* *DB6---P1.6* *E--------------P3.6* (参见说明书)
; *DB3---P1.3* *DB7---P1.7* *VLCD接10K可调电阻到GND*
;注:8031的晶振频率为12MHz
;**************************************************************************
RS EQU P3.5
RW EQU P3.4
E EQU P3.6
XPOS EQU 20H ;行方向
YPOS EQU 21H ;列方向
LED3CLK BIT P2.1
LED4IO BIT P2.2
RST BIT P2.3
SECOND EQU 60H
ORG 00H
LJMP START
ORG 30H
START:
MOV SP,#30H
CLR E
MOV DPTR,#TAB
MN_LP2:MOV R5,#0
MOV YPOS,#0
MOV XPOS,#0
LCALL LCDRESET
;LCALL SET1302
MN_LP:MOV A,R5
MOVC A,@A+DPTR
LCALL LCDFILL
INC R5
CJNE R5,#32,MN_LP
MAIN: LCALL R_1302
LCALL EXCHANG
AJMP MAIN
EXCHANG:
MOV A,60H
MOV B,#10H
DIV AB
MOV 71H,A
MOV 70H,B
MOV A,61H
MOV B,#10H
DIV AB
MOV 73H,A
MOV 72H,B
MOV A,62H
MOV B,#10H
DIV AB
MOV 75H,A
MOV 74H,B
LCALL ADD_ASCII
LCALL DISBUF
RET
ADD_ASCII:
MOV A,70H
ADD A,#48
MOV 70H,A
MOV A,71H
ADD A,#48
MOV 71H,A
MOV A,72H
ADD A,#48
MOV 72H,A
MOV A,73H
ADD A,#48
MOV 73H,A
MOV A,74H
ADD A,#48
MOV 74H,A
MOV A,75H
ADD A,#48
MOV 75H,A
RET
DISBUF:
MOV XPOS,#11
MOV YPOS,#1
MOV A,70H
LCALL LCDWRITE
MOV XPOS,#10
MOV YPOS,#1
MOV A,71H
LCALL LCDWRITE
MOV XPOS,#8
MOV YPOS,#1
MOV A,72H
LCALL LCDWRITE
MOV XPOS,#7
MOV YPOS,#1
MOV A,73H
LCALL LCDWRITE
MOV XPOS,#5
MOV YPOS,#1
MOV A,74H
LCALL LCDWRITE
MOV XPOS,#4
MOV YPOS,#1
MOV A,75H
LCALL LCDWRITE
RET
;-------------------------------LCD 写满屏幕地址和字符数据指令--------------------------------
LCDFILL:
LCALL LCDWRITE
INC XPOS
MOV A,XPOS
CJNE A,#16,RETURN
INC YPOS
MOV A,YPOS
CJNE A,#2,RETURN
RETURN: RET
;-----------------------------------LCD 写一个地址和字符数据指令-----------------------------------
LCDWRITE:
LCALL LCDPOS ;lcd 写地址指令
LCALL LCDWD ;LCD 写字符指令
RET
;------------------------------LCD 写地址指令--------------------------------------------------------
LCDPOS:PUSH ACC
ANL XPOS,#0FH
ANL YPOS,#01H
MOV A,YPOS
CJNE A,#00,LPS_LAY
MOV A,XPOS
LJMP LPS_LAX
LPS_LAY:MOV A,XPOS
ADD A,#40H
LPS_LAX:ORL A,#80H
LCALL LCDWC
POP ACC
RET
;------------------------------------LCD RESET--------------------------------------------------------------------
LCDRESET:
LCALL DELAY5MS
LCALL DELAY5MS
LCALL DELAY5MS
MOV A,#38H
LCALL LCDWCN
LCALL DELAY5MS
MOV A,#38H
LCALL LCDWCN
LCALL DELAY5MS
MOV A,#38H
LCALL LCDWCN
MOV A,#38H
LCALL LCDWC
MOV A,#08H
LCALL LCDWC
MOV A,#01H
LCALL LCDWC
MOV A,#06H
LCALL LCDWC
MOV A,#0CH
LCALL LCDWC
RET
LCDWC:LCALL WAITIDLE
;----------------------------------LCD write not check,写指令------------------------
LCDWCN:CLR RS
CLR RW
MOV P1,A
SETB E
NOP
CLR E
RET
;--------------------------LCD busy check,wait till not busy(读状态,判断是否忙)-----------------------------------
WAITIDLE:
PUSH ACC
MOV P1,#0FFH
CLR RS
SETB RW
SETB E
WTD_PA:NOP
JB P1.7,WTD_PA
CLR E
POP ACC
RET
;--------------------------LCD WRITE TATA(写数据)----------------------------------------
LCDWD:LCALL WAITIDLE
MOV P1,A
CLR RW
SETB RS
SETB E
NOP
CLR E
RET
;----------------------------DS1302--------------------------------
;-------------------R_1302----------------------
R_1302: MOV R0,#SECOND ;读取1302时间
MOV R7,#7
MOV R1,#81H
R_1302A: CLR RST
CLR LED3CLK
SETB RST
MOV A,R1
LCALL R_BIT
LCALL W_BIT
MOV @R0,A
INC R0
INC R1
INC R1
SETB LED3CLK
CLR RST
DJNZ R7,R_1302A
RET
;------------------R_BIT------------------
R_BIT: MOV R4,#8
R_BIT1: RRC A
MOV LED4IO,C
SETB LED3CLK
CLR LED3CLK
DJNZ R4,R_BIT1
RET
;-------------------W_BIT-----------------------
W_BIT: MOV R4,#8
W_BIT1: MOV C,LED4IO
RRC A
SETB LED3CLK
CLR LED3CLK
DJNZ R4,W_BIT1
RET
;-------------------SET_1302-------------------------
SET1302: CLR RST ;2006年12月15日20:15:00
CLR LED3CLK
MOV SECOND,#00H
MOV 61H,#15H
MOV 62H,#20H
MOV 63H,#15H
MOV 64H,#12H
MOV 65H,#5H
MOV 66H,#06H
SETB RST
MOV A,#8EH
LCALL R_BIT
MOV A,#00H
LCALL R_BIT
SETB LED3CLK
CLR RST
MOV R0,#SECOND
MOV R7,#7
MOV R1,#80H
SET1302A: CLR RST
CLR LED3CLK
SETB RST
MOV A,R1
LCALL R_BIT
MOV A,@R0
LCALL R_BIT
INC R0
INC R1
INC R1
SETB LED3CLK
CLR RST
DJNZ R7,SET1302A
CLR RST
CLR LED3CLK
SETB LED3CLK
NOP
CLR RST
NOP
CLR led3clk
SETB RST
MOV A,#90H
LCALL R_BIT
MOV A,#10100101B ;充电器设置
LCALL R_BIT
SETB LED3CLK
CLR RST
CLR LED3CLK
SETB RST
MOV A,#8EH
LCALL R_BIT
MOV A,#80H
LCALL R_BIT
SETB LED3CLK
CLR RST
RET
;----------------------------DELAY---------------------------------
DELAY5MS:MOV R5,#5
DL2: MOV R6,#250
DL1: NOP
NOP
DJNZ R6,DL1
DJNZ R5,DL2
RET
DELAY400MS:
MOV R5,#20 ;延时子程序(400MS)
DL4_PA: MOV R6,#100
DL4_PB: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL4_PB
DJNZ R5,DL4_PA
RET
TAB: DB 'S','e','t',' ','t','i','m','e',' ','t','o',' ','r','i','n','g'
DB '*','*','*','*','0','0',':','0','0',':','0','0','*','*','*','*'
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -