📄 lcd 4开4关定时开关.asm
字号:
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 + -