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

📄 shuzinaozhong.asm

📁 具有按键控制,时间可调,可设定闹钟时间,LED显示
💻 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 + -