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

📄 lcd 4开4关定时开关.asm

📁 详细的中文说明 标准的程序格式 保证调试通过877a读写lcd
💻 ASM
📖 第 1 页 / 共 2 页
字号:

	include <p16f877.inc>
;================================无温度=无背光========4开4关定时开关===
; 定义 LCD数据& 控制I/O口 
LCD_DATA	equ	PORTB
LCD_CNTL1	equ	PORTB
LCD_CNTL2	equ	PORTA

; 定义 LCD控制相应的I/O引脚 
RS		equ	1
E		equ	5

; LCD 模块命令
DISP_ON		EQU	0x00C	; 开显示
DISP_ON_C	EQU	0x00E	; 开显示, 开指针
DISP_ON_B	EQU	0x00F	; 开显示, 开指针,开闪烁
DISP_OFF	EQU	0x008	; 关显示
CLR_DISP	EQU	0x001	; 清显示的操作数
ENTRY_INC	EQU	0x006	; 操作数
ENTRY_INC_S	EQU	0x007	; 操作数
ENTRY_DEC	EQU	0x004	; 操作数
ENTRY_DEC_S	EQU	0x005	; 操作数
DD_RAM_ADDR	EQU	0x080	; 初始化第一行显示的操作数
DD_RAM_UL	EQU	0x0c0	; 初始化第二行显示的操作数

; 设置显示相关寄存器
Byte	EQU	24H
Count	EQU	25H
Count1	EQU	26H
Count2	EQU	27H
LCD_DATA1	EQU	28H
INTSIG	EQU	29H
RTCCSIG1	EQU	2AH
RTCCSIG	EQU	2BH
ALRSIG	EQU	2CH
Hour	EQU	2DH
HourH	EQU	2EH
HourL	EQU	2FH
HourL1	EQU	30H
HourH1	EQU	31H
Mins	EQU	32H
Mins1	EQU	33H
MinsH	EQU	34H
MinsL	EQU	35H
MinsH1	EQU	36H
MinsL1	EQU	37H
Secs	EQU	38H
SecsH	EQU	39H
SecsL	EQU	3AH
_WREG	EQU	41H
_STATUS	EQU	42H
Hour1	EQU	43H
;--------------------
ALRH1	EQU	44H
ALRM1	EQU	45H
ALRH2	EQU	46H
ALRM2	EQU	47H
ALRH3	EQU	48H
ALRM3	EQU	49H
ALRH4	EQU	4aH
ALRM4	EQU	4bH
ALRH5	EQU	4cH
ALRM5	EQU	4dH
ALRH6	EQU	4eH
ALRM6	EQU	4fH
ALRH7	EQU	50H
ALRM7	EQU	51H
ALRH8	EQU	52H
ALRM8	EQU	53H
;======================

	org	0
	nop
	goto	start
	org	4
	goto	ISR
	org	10
;======================================
start   
	bsf	STATUS,RP0
	clrf	TRISD
	bcf	STATUS,RP0	
	clrf	PORTD 
;----------------------
	call	InitLCD  
	clrf	RTCCSIG
	clrf	RTCCSIG1
	clrf	INTSIG
	clrf	Hour
	clrf	Hour1
	clrf	Mins
	clrf	Mins1
	clrf	Secs
	clrf	ALRSIG
	movlw	0ffh
	movwf	TMR0
	movlw	00
	movwf	TMR1L
	movlw	80h
	movwf	TMR1H
	movlw	b'00001111'
	movwf	T1CON
	bsf	STATUS,RP0
	bsf	PIE1,TMR1IE
	bcf	STATUS,RP0
	movlw	b'10111111'
	OPTION		
	movlw	b'11110000'
	movwf	INTCON  
;=============================  
main	
	movlw	80h
	call	SendCmd
	call	DisplayTime	;显示时间
	movlw	0c0h
	call	SendCmd
	movlw	'H'
	call	putcLCD
	movlw	'e'
	call	putcLCD
	movlw	'l'
	call	putcLCD
	movlw	'l'
	call	putcLCD
	movlw	'o'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	'!'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	':'
	call	putcLCD
	movlw	')'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
	btfsc	ALRSIG,1
	call	ALR1	
	btfsc	ALRSIG,2
	call	ALR2
	btfsc	ALRSIG,3
	call	ALR3
	btfsc	ALRSIG,4
	call	ALR4	
	btfsc	ALRSIG,5
	call	ALR5
	btfsc	ALRSIG,6
	call	ALR6
	btfsc	ALRSIG,7
	call	ALR7
	btfsc	ALRSIG,0
	call	ALR8
	bcf	STATUS,RP0
	bcf	PCLATH,0
	bcf	PCLATH,1
	movf	RTCCSIG,W
	addwf	PCL,1
	goto	main
	goto	RtccS1
	goto	RtccS2
	goto	Rtccs3
	goto	Rtccs4
	goto	Rtccs5
	goto	Rtccs6
	goto	Rtccs7
	goto	Rtccs8
	goto	Rtccs9
	clrf	RTCCSIG
	clrf	RTCCSIG1	
	goto	main

;===============================
RtccS1
	movlw	80h
	call	SendCmd
	call	DisplayTime
	call	LongDelay
	movlw	0c0h
	call	SendCmd		;line2, 00
	movlw	'S'
	call	putcLCD
	movlw	'e'
	call 	putcLCD
	movlw	't'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	'T'
	call	putcLCD
	movlw	'i'
	call	putcLCD
	movlw	'm'
	call	putcLCD
	movlw	'e'
	call	putcLCD		;show "Set Time"
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
	bcf	PCLATH,1
	bcf	PCLATH,0
	movf	RTCCSIG1,W
	addwf	PCL,1
	goto	SetHour
	goto	SetMins
	clrf	INTSIG
	incf	RTCCSIG
	clrf	RTCCSIG1
	goto	main
;-----------
SetHour
	movlw	80h
	call	Selshow
	movlw	d'24'
	subwf	INTSIG,W
	btfsc	STATUS,C
	goto	$+4
	movf	INTSIG,w
	movwf	Hour
	goto	RtccS1
	clrf	INTSIG
	movwf	Hour
	goto	RtccS1
;-----------
SetMins
	movlw	83h
	call	Selshow
	movlw	d'60'
	subwf	INTSIG,W
	btfsc	STATUS,C
	goto	$+4
	movf	INTSIG,w
	movwf	Mins
	goto	RtccS1
	clrf	INTSIG
	movwf	Mins
	goto	RtccS1
;====================================
RtccS2
	bcf	STATUS,RP0
	movlw	0c0h
	call	SendCmd
	movlw	'T'
	call	putcLCD
	movlw	'0'
	call 	putcLCD
	movlw	':'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	'o'
	call	putcLCD
	movlw	'n'
	call	putcLCD
	movlw	' '
	call	putcLCD		;show "t0:  on1    "
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
S2	movlw	80h
	call	SendCmd
	call	DisplayTime
	call	DispTime
	call	LongDelay
	bcf	PCLATH,1
	bcf	PCLATH,0	;///pclath
	movf	RTCCSIG1,W
	addwf	PCL,1
	goto	SetAlH2
	goto	SetAlM2
	movf	Hour1,w
	movwf	ALRH1
	movf	Mins1,w
	movwf	ALRM1
	clrf	INTSIG
	clrf	RTCCSIG1
	incf	RTCCSIG
	goto	main
;---
SetAlH2	
	movlw	0c9h		;///c7h数增,显示往后移
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,1
	movf	INTSIG,W
	movwf	Hour1
	movlw	d'24'
	subwf	Hour1,W
	btfss	STATUS,C
	goto	S2
	clrf	INTSIG
	clrf	Hour1
	goto	S2	
SetAlM2
	movlw	0cch		;///cah数增,显示往后移
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,1
	movf	INTSIG,W
	movwf	Mins1
	movlw	d'60'
	subwf	Mins1,W
	btfss	STATUS,C
	goto	S2
	clrf	INTSIG
	clrf	Mins1
	goto	S2	

;=========================
Selshow	
	call	SendCmd
	movlw	' '
	call	putcLCD	
	movlw	' '
	call	putcLCD	
	call	LongDelay
	return
;========================================
Rtccs3
	bcf	STATUS,RP0
	movlw	0c0h
	call	SendCmd
	movlw	'T'
	call	putcLCD
	movlw	'0'
	call 	putcLCD
	movlw	':'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	'o'
	call	putcLCD
	movlw	'f'
	call	putcLCD
	movlw	'f'
	call	putcLCD		;show "t0:  off1  "
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
S3	movlw	80h
	call	SendCmd
	call	DisplayTime
	call	DispTime
	call	LongDelay
	bcf	PCLATH,1
	bsf	PCLATH,0		;///
	movf	RTCCSIG1,w
	addwf	PCL,1
	goto	SetAlH3
	goto	SetAlM3
	movf	Hour1,w
	movwf	ALRH2
	movf	Mins1,w
	movwf	ALRM2
	clrf	INTSIG
	clrf	RTCCSIG1
	incf	RTCCSIG
	goto	main
;---
SetAlH3	
	movlw	0c9h		
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,2
	movf	INTSIG,W
	movwf	Hour1
	movlw	d'24'
	subwf	Hour1,W
	btfss	STATUS,C
	goto	S3
	clrf	INTSIG
	clrf	Hour1
	goto	S3	
SetAlM3
	movlw	0cch		;///cah数增,显示往后移
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,2
	movf	INTSIG,W
	movwf	Mins1
	movlw	d'60'
	subwf	Mins1,W
	btfss	STATUS,C
	goto	S3
	clrf	INTSIG
	clrf	Mins1
	goto	S3

;====================================
Rtccs4
	bcf	STATUS,RP0
	movlw	0c0h
	call	SendCmd
	movlw	'T'
	call	putcLCD
	movlw	'1'
	call 	putcLCD
	movlw	':'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	'o'
	call	putcLCD
	movlw	'n'
	call	putcLCD
	movlw	' '
	call	putcLCD		;show "t0:  on2    "
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
S4	movlw	80h
	call	SendCmd
	call	DisplayTime
	call	DispTime
	call	LongDelay
	bcf	PCLATH,1
	bsf	PCLATH,0	;///pclath
	movf	RTCCSIG1,W
	addwf	PCL,1
	goto	SetAlH4
	goto	SetAlM4
	movf	Hour1,w
	movwf	ALRH3
	movf	Mins1,w
	movwf	ALRM3
	clrf	INTSIG
	clrf	RTCCSIG1
	incf	RTCCSIG
	goto	main
;---
SetAlH4	
	movlw	0c9h		;///c7h数增,显示往后移
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,3
	movf	INTSIG,W
	movwf	Hour1
	movlw	d'24'
	subwf	Hour1,W
	btfss	STATUS,C
	goto	S4
	clrf	INTSIG
	clrf	Hour1
	goto	S4	
SetAlM4
	movlw	0cch		;///cah数增,显示往后移
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,3
	movf	INTSIG,W
	movwf	Mins1
	movlw	d'60'
	subwf	Mins1,W
	btfss	STATUS,C
	goto	S4
	clrf	INTSIG
	clrf	Mins1
	goto	S4	

;====================================
Rtccs5
	bcf	STATUS,RP0
	movlw	0c0h
	call	SendCmd
	movlw	'T'
	call	putcLCD
	movlw	'1'
	call 	putcLCD
	movlw	':'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	'o'
	call	putcLCD
	movlw	'f'
	call	putcLCD
	movlw	'f'
	call	putcLCD		;show "t0:  off2    "
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
S5	movlw	80h
	call	SendCmd
	call	DisplayTime
	call	DispTime
	call	LongDelay
	bcf	PCLATH,1
	bsf	PCLATH,0	;///pclath
	movf	RTCCSIG1,W
	addwf	PCL,1
	goto	SetAlH5
	goto	SetAlM5
	movf	Hour1,w
	movwf	ALRH4
	movf	Mins1,w
	movwf	ALRM4
	clrf	INTSIG
	clrf	RTCCSIG1
	incf	RTCCSIG
	goto	main
;---
SetAlH5	
	movlw	0c9h		;///c7h数增,显示往后移
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,4
	movf	INTSIG,W
	movwf	Hour1
	movlw	d'24'
	subwf	Hour1,W
	btfss	STATUS,C
	goto	S5
	clrf	INTSIG
	clrf	Hour1
	goto	S5	
SetAlM5
	movlw	0cch		;///cah数增,显示往后移
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,4
	movf	INTSIG,W
	movwf	Mins1
	movlw	d'60'
	subwf	Mins1,W
	btfss	STATUS,C
	goto	S5
	clrf	INTSIG
	clrf	Mins1
	goto	S5	
;====================================
Rtccs6
	bcf	STATUS,RP0
	movlw	0c0h
	call	SendCmd
	movlw	'T'
	call	putcLCD
	movlw	'2'
	call 	putcLCD
	movlw	':'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	'o'
	call	putcLCD
	movlw	'n'
	call	putcLCD
	movlw	' '
	call	putcLCD		;show "t0:  on3    "
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
S6	movlw	80h
	call	SendCmd
	call	DisplayTime
	call	DispTime
	call	LongDelay
	bcf	PCLATH,1
	bsf	PCLATH,0	;///pclath
	movf	RTCCSIG1,W
	addwf	PCL,1
	goto	SetAlH6
	goto	SetAlM6
	movf	Hour1,w
	movwf	ALRH5
	movf	Mins1,w
	movwf	ALRM5
	clrf	INTSIG
	clrf	RTCCSIG1
	incf	RTCCSIG
	goto	main
;---
SetAlH6	
	movlw	0c9h		;///c7h数增,显示往后移
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,5
	movf	INTSIG,W
	movwf	Hour1
	movlw	d'24'
	subwf	Hour1,W
	btfss	STATUS,C
	goto	S6
	clrf	INTSIG
	clrf	Hour1
	goto	S6	
SetAlM6
	movlw	0cch		;///cah数增,显示往后移
	call	Selshow
	movf	INTSIG,W
	btfss	STATUS,Z
	bsf	ALRSIG,5
	movf	INTSIG,W
	movwf	Mins1
	movlw	d'60'
	subwf	Mins1,W
	btfss	STATUS,C
	goto	S6
	clrf	INTSIG
	clrf	Mins1
	goto	S6	
;====================================
Rtccs7
	bcf	STATUS,RP0
	movlw	0c0h
	call	SendCmd
	movlw	'T'
	call	putcLCD
	movlw	'2'
	call 	putcLCD
	movlw	':'
	call	putcLCD
	movlw	' '
	call	putcLCD
	movlw	'o'
	call	putcLCD
	movlw	'f'
	call	putcLCD
	movlw	'f'
	call	putcLCD		;show "t0:  off3    "
	movlw	' '
	call	putcLCD
	movlw	' '
	call	putcLCD
S7	movlw	80h
	call	SendCmd
	call	DisplayTime
	call	DispTime
	call	LongDelay
	bcf	PCLATH,0
	bsf	PCLATH,1	;///pclath
	movf	RTCCSIG1,W
	addwf	PCL,1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -