📄 shuzinaozhong.asm
字号:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~液晶引脚定义~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RS BIT P1.0
R_W BIT P1.1
E BIT P1.3
DB0_DB7 EQU P0
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DS1302引脚定义~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DS1302RESET BIT P2.3
DS1302IO BIT P2.2
DS1302CLK BIT P2.1
SEC EQU 30H
MIN EQU 31H
HOUR EQU 32H
DATE EQU 33H
MONTH EQU 34H
DAY EQU 35H
YEAR EQU 36H
PTR EQU 20H
;*************************************************程序开始**************************************************
ORG 0000H
LJMP MAIN
;**************************************************主程序***************************************************
ORG 0030H
MAIN: MOV SP,#60H
LCALL INIT_1302 ;初始化DS1302
LCALL INITIAL ;初始化液晶
LCALL INIX5045
LCALL CLS ;清屏
MAINLOOP:
LCALL DS1302
LCALL LCD
LCALL COMPARE
LCALL KEYS
LCALL X5045
JMP MAINLOOP
;---------------------------------------------------MOVE----------------------------------------------------
MOVE: MOV A,#00011000B
LCALL WRITE_COM
RET
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<液晶子程序<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
LCD: MOV A,#10000000B ;显示地址设置指令:第一行(00H开始)
LCALL WRITE_COM
MOV A,HOUR ;显示
ANL A,#0F0H
SWAP A
ORL A,#00110000B ;形成ASCII码
LCALL WRITE_DATA
MOV A,MIN
ANL A,#0FH
SWAP A
ORL A,#00110000B ;形成ASCII码
LCALL WRITE_DATA
MOV A,SEC
ANL A,#0FH
SWAP A
ORL A,#00110000B ;形成ASCII码
LCALL WRITE_DATA
RET
TAB1: DB " WELCOME! ",00H
TAB2: DB "DATE:20",00H
TAB3: DB " TIME:",00H
TAB4: DB " TEMP:",00H
TAB5: DB 0DFH,"haha",00H
DISP: PUSH ACC
DISP_LOOP:
CLR A
MOVC A,@A+DPTR
JZ END_DISP
LCALL WRITE_DATA
INC DPTR
SJMP DISP_LOOP
END_DISP:
POP ACC
RET
;------------------------------------------启动LCM子程序--------------------------------------------
INITIAL:MOV A,#00111000B ;系统方式设置指令:8BIT总线,两行显示,5X7点阵显示
LCALL WRITE_COM
MOV A, #00001110B ;显示开关指令:开显示,开光标显示,不闪烁.
LCALL WRITE_COM
MOV A, #00000110B ;内部方式设置指令:AC自动加一,显示不移动
LCALL WRITE_COM
RET
;----------------------------------------查询忙碌标志信号子程序---------------------------------------
CHECK_BUSY:
PUSH ACC
BUSY_LOOP:
CLR E
SETB R_W
CLR RS
SETB E
MOV A, DB0_DB7
CLR E
JB ACC.7,BUSY_LOOP
POP ACC
LCALL DEL
RET
;-------------------------------------------写指令到LCM子程序------------------------------------------
WRITE_COM:
LCALL CHECK_BUSY
CLR E
CLR RS
CLR R_W
SETB E
MOV DB0_DB7,A
CLR E
RET
;--------------------------------------------写数据到LCM子程序--------------------------------------
WRITE_DATA:
LCALL CHECK_BUSY
CLR E
SETB RS
CLR R_W
SETB E
MOV DB0_DB7,A
CLR E
RET
;-----------------------------------------------清除LCM子程序------------------------------------------
CLS: MOV A,#00000001B ;清屏指令
LCALL WRITE_COM
RET
;-----------------------------------------------延时子程序1---------------------------------------------
DEL: MOV R6,#5
L1: MOV R7,#248
DJNZ R7,$
DJNZ R6,L1
RET
;---------------------------------------------
DELAY: MOV R7,#255
DD1: MOV R6,#255
DD2: MOV R5,#5
DD3: DJNZ R5,DD3
DJNZ R6,DD2
DJNZ R7,DD1
RET
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<液晶子程序结束<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>按键调整程序>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KEYS:
JNB P3.0,CUR0
JNB P3.1,INC0
JNB P3.2
CUR0: JMP CUR1
INC0: JMP INC1
CUR1: CALL DELAY
JNB P3.0,$
CALL DELAY
INC PTR
MOV A,PTR
CJNE A,#06H,CUR10
MOV PTR,#00H
CUR10:
MOV #CUR
MOVC A,@A+DPTR
MOV RAM,A
CALL LCD
RET
INC1:
CALL DELAY
JNB P3.1,$
CALL DELAY
MOV DPTR,#RTC+0BH
MOV A,#80H
MOV @DPTR,A
MOV DPTR,#TIM
MOV A,PTR
MOVC A,@A+DPTR
MOV RAM,A
MOV DPTR,#MAX
MOV A,PTR
MOVC A,@A+DPTR
MOV RAM+2,A
MOV DPTR,#RTC
MOV DPL,RAM
MOVX A,@DPTR
CJNE A,RAM+1,INC10
MOV A,RAM+2
JMP INC11
INC10:
ADD A, #01H
DA A
INC11: MOVX @DPTR,A
MOV B,#10H
DIV AB
ADD A,#'0'
MOV RAM,A
CALL LCD
MOV DPTR,#CUR
MOV A,PTR
MOVC A,@A+DPTR
MOV RAM,A
CALL LCD
MOV DPTR,#RTC+0BH
MOV A,#12H
MOVX @DPTR,A
RET
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<DS1302<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
DS1302: MOV R0,#SEC
MOV R1,#07H
MOV B,#10000001B ;READ SEC-REGISTER
MOV A,B
LOOP3: LCALL WRITE1302
LCALL READ1302
CLR DS1302CLK
CLR DS1302RESET
MOV @R0,A
INC R0
MOV A,B
ADD A,#00000010B
MOV B,A
DJNZ R1,LOOP3
CLR DS1302CLK
CLR DS1302RESET
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~WRITE_1302~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WRITE1302:
MOV R2,#08H
CLR DS1302CLK
SETB DS1302RESET
LOOP1: CLR DS1302CLK
RRC A
MOV DS1302IO,C
SETB DS1302CLK
DJNZ R2,LOOP1
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~READ_1302~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
READ1302:
MOV R2,#08H
LOOP2: SETB DS1302CLK
CLR DS1302CLK
MOV C,DS1302IO
RRC A
DJNZ R2,LOOP2
RET
INIT_1302:
CLR DS1302RESET
MOV A,#10001110B ;WRITE CONTROL
LCALL WRITE1302
MOV A,#00000000B ;OPEN WRITE PROTECTION
LCALL WRITE1302
CLR DS1302RESET
MOV A,#10010000B ;WRITE TRICKER CHARGER
LCALL WRITE1302
MOV A,#10100101B ;SELECT R1=2K,ONE DIODE
LCALL WRITE1302
CLR DS1302RESET
MOV A,#10000000B ;WRITE SEC-REGISTER
LCALL WRITE1302
MOV A,#00000000B ;START REAL TIME CLOCK
LCALL WRITE1302
CLR DS1302CLK
CLR DS1302RESET
RET
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<DS1302子程序结束<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;************************************************COMPARE*********************************************
COMPARE:
MOV RO,#30H
MOV A,@30H
AGIAN:
CJNE A,HOUR_2,BACK
INC R0
MOV A,@R0
CJNE A,MIN_2,BACK
CLR P2.0
BACK: RET
;时间比较程序结束
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -