?? lcd 4開4關定時開關.asm
字號:
goto SetAlH7
goto SetAlM7
movf Hour1,w
movwf ALRH6
movf Mins1,w
movwf ALRM6
clrf INTSIG
clrf RTCCSIG1
incf RTCCSIG
goto main
;---
SetAlH7
movlw 0c9h ;///c7h數(shù)增,顯示往后移
call Selshow
movf INTSIG,W
btfss STATUS,Z
bsf ALRSIG,6 ;/
movf INTSIG,W
movwf Hour1
movlw d'24'
subwf Hour1,W
btfss STATUS,C
goto S7
clrf INTSIG
clrf Hour1
goto S7
SetAlM7
movlw 0cch ;///cah數(shù)增,顯示往后移
call Selshow
movf INTSIG,W
btfss STATUS,Z
bsf ALRSIG,6 ;/
movf INTSIG,W
movwf Mins1
movlw d'60'
subwf Mins1,W
btfss STATUS,C
goto S7
clrf INTSIG
clrf Mins1
goto S7
;====================================
Rtccs8
bcf STATUS,RP0
movlw 0c0h
call SendCmd
movlw 'T'
call putcLCD
movlw '3'
call putcLCD
movlw ':'
call putcLCD
movlw ' '
call putcLCD
movlw 'o'
call putcLCD
movlw 'n'
call putcLCD
movlw ' '
call putcLCD ;show "t0: on4 "
movlw ' '
call putcLCD
movlw ' '
call putcLCD
S8 movlw 80h
call SendCmd
call DisplayTime
call DispTime
call LongDelay
bsf PCLATH,1
bcf PCLATH,0 ;///pclath
movf RTCCSIG1,W
addwf PCL,1
goto SetAlH8
goto SetAlM8
movf Hour1,w
movwf ALRH7
movf Mins1,w
movwf ALRM7
clrf INTSIG
clrf RTCCSIG1
incf RTCCSIG
goto main
;---
SetAlH8
movlw 0c9h ;///c7h數(shù)增,顯示往后移
call Selshow
movf INTSIG,W
btfss STATUS,Z
bsf ALRSIG,7 ;/
movf INTSIG,W
movwf Hour1
movlw d'24'
subwf Hour1,W
btfss STATUS,C
goto S8
clrf INTSIG
clrf Hour1
goto S8
SetAlM8
movlw 0cch ;///cah數(shù)增,顯示往后移
call Selshow
movf INTSIG,W
btfss STATUS,Z
bsf ALRSIG,7
movf INTSIG,W
movwf Mins1
movlw d'60'
subwf Mins1,W
btfss STATUS,C
goto S8
clrf INTSIG
clrf Mins1
goto S8
;====================================
Rtccs9
bcf STATUS,RP0
movlw 0c0h
call SendCmd
movlw 'T'
call putcLCD
movlw '3'
call putcLCD
movlw ':'
call putcLCD
movlw ' '
call putcLCD
movlw 'o'
call putcLCD
movlw 'f'
call putcLCD
movlw 'f'
call putcLCD ;show "t0: off4 "
movlw ' '
call putcLCD
movlw ' '
call putcLCD
S9 movlw 80h
call SendCmd
call DisplayTime
call DispTime
call LongDelay
bsf PCLATH,1
bcf PCLATH,0 ;///pclath
movf RTCCSIG1,W
addwf PCL,1
goto SetAlH9
goto SetAlM9
movf Hour1,w
movwf ALRH8
movf Mins1,w
movwf ALRM8
clrf INTSIG
clrf RTCCSIG1
incf RTCCSIG
goto main
;---
SetAlH9
movlw 0c9h ;///c7h數(shù)增,顯示往后移
call Selshow
movf INTSIG,W
btfss STATUS,Z
bsf ALRSIG,0
movf INTSIG,W
movwf Hour1
movlw d'24'
subwf Hour1,W
btfss STATUS,C
goto S9
clrf INTSIG
clrf Hour1
goto S9
SetAlM9
movlw 0cch ;///cah數(shù)增,顯示往后移
call Selshow
movf INTSIG,W
btfss STATUS,Z
bsf ALRSIG,0
movf INTSIG,W
movwf Mins1
movlw d'60'
subwf Mins1,W
btfss STATUS,C
goto S9
clrf INTSIG
clrf Mins1
goto S9
;============現(xiàn)場保護===============
ISR
Push
movwf _WREG
swapf STATUS,W
movwf _STATUS
bcf STATUS,RP0
btfsc PIR1,TMR1IF
call TimeAdj
btfsc INTCON,INTF
call IntDeal
btfsc INTCON,T0IF
call RtccDeal
Pop
swapf _STATUS,W
movwf STATUS
swapf _WREG,F
swapf _WREG,W
retfie
;============TMR1中斷====================
TimeAdj
bcf STATUS,RP0
bcf PIR1,TMR1IF
movlw 00h
movwf TMR1L
movlw 80h
movwf TMR1H
incf Secs,1
movlw d'60'
xorwf Secs,W
btfss STATUS,Z
goto TE
clrf Secs
incf Mins,1
movlw d'60'
xorwf Mins,W
btfss STATUS,Z
goto TE
clrf Mins
incf Hour
movlw d'24'
xorwf Hour,W
btfss STATUS,Z
goto TE
clrf Hour
TE
return
;========RB0中斷==========================
IntDeal
bcf INTCON,INTF
bsf PORTB,0
btfsc PORTB,0
goto $+5
call Delay
bsf PORTB,0 ; 按鍵去抖動
btfsc PORTB,0
goto $+2
incf INTSIG
return
;============RTCC(RA4)按鍵中斷=============================
RtccDeal
bcf STATUS,RP0
movlw 0ffh
movwf TMR0
bcf INTCON,T0IF
bsf PORTA,4
btfsc PORTA,4
goto RtcWr
call Delay
bsf PORTA,4 ; 按鍵去抖動
btfsc PORTA,4
goto RtcWr
movf RTCCSIG,W
sublw 0bh ;/////鬧鈴數(shù)/////
btfss STATUS,C
goto WRONG
movf RTCCSIG1,W
sublw 03h
btfss STATUS,C
goto WRONG
movf RTCCSIG,W
addwf RTCCSIG1,W
btfsc STATUS,Z
goto $+3
incf RTCCSIG1
goto RtcWr
incf RTCCSIG
goto RtcWr
WRONG
clrf RTCCSIG
clrf RTCCSIG1
RtcWr return
; ============DisplayTime - 將顯示指針移至第一行,調用Bin2BCD
; 子程序將Secs 和 Mins寄存器內的數(shù)據(jù)轉換為相應的
; ASCII 碼, 然后送 LCD顯示======================
DisplayTime
bcf STATUS,RP0
call Bin2BCD ; 調用二進制與bcd碼轉換子程序
movf HourH,W ; 顯示小時高位
call putcLCD ;
movf HourL,W ; 顯示小時低位
call putcLCD ;
movlw ':'
call putcLCD ; 顯示 ':'
movf MinsH,W ; 顯示分鐘高位
call putcLCD ;
movf MinsL,W ; 顯示分鐘低位
call putcLCD ;
movlw ':' ; 顯示 ':'
call putcLCD
movf SecsH,W ;
call putcLCD ;
movf SecsL,W ; 00:00:00
call putcLCD ;
movlw ' '
call putcLCD
movlw ' '
call putcLCD
movlw ' '
call putcLCD
movlw ' '
call putcLCD ;show "Set Time"
movlw ' '
call putcLCD
movlw ' '
call putcLCD
movlw ' '
call putcLCD
movlw ' '
call putcLCD
return
; ========將 Secs & Mins 寄存器內的二進制數(shù)轉
; 換為相應的 ASCII 碼并存為 SecsH:SecsL 及
; MinsH:MinsL,HourH:HourL的形式==============================
Bin2BCD
bcf STATUS,RP0
clrf HourH ; 初始化變量
movf Hour,W ; 轉換“時”
movwf HourL
Hourth ; Loop to subtract 10
movlw .10 ; from low byte and
subwf HourL,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Next
movwf HourL
incf HourH,F
goto Hourth
Next
clrf MinsH ; 初始化變量
movf Mins,W ; 轉換“分”
movwf MinsL
Mtenth ; Loop to subtract 10
movlw .10 ; from low byte and
subwf MinsL,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Next1
movwf MinsL
incf MinsH,F
goto Mtenth
Next1
clrf SecsH ; 初始化變量
movf Secs,W ; 轉換“秒”
movwf SecsL
Stenth ; Loop to subtract 10
movlw .10 ; from low byte and
subwf SecsL,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Over
movwf SecsL
incf SecsH,F
goto Stenth
Over
movlw 0x30 ;
addwf HourH,F ;
addwf HourL,F ; Add 0x30 ('0') to all
addwf MinsH,F ; variables to convert
addwf MinsL,F ; a number 0 - 9 to an
addwf SecsH,F ; ASCII equivalent
addwf SecsL,F ; '0' to '9'
return
;*====
DispTime
bcf STATUS,RP0
movlw 0c9h ;/c7h數(shù)增2,顯示往后移2
call SendCmd
call Bin2BCa ; 調用二進制與bcd碼轉換子程序
movf HourH1,W ; 顯示小時高位
call putcLCD ;
movf HourL1,W ; 顯示小時低位
call putcLCD ;
movlw ':' ; 顯示 ':'
call putcLCD
movf MinsH1,W ;
call putcLCD ;
movf MinsL1,W ; 00:00
call putcLCD ;
return
;*----
Bin2BCa
bcf STATUS,RP0
clrf HourH1 ; 初始化變量
movf Hour1,W ; 轉換“時”
movwf HourL1
Hourth1 ; Loop to subtract 10
movlw .10 ; from low byte and
subwf HourL1,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Nexta
movwf HourL1
incf HourH1,F
goto Hourth1
Nexta
clrf MinsH1 ; 初始化變量
movf Mins1,W ; 轉換“分”
movwf MinsL1
Mtenth1 ; Loop to subtract 10
movlw .10 ; from low byte and
subwf MinsL1,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Over1
movwf MinsL1
incf MinsH1,F
goto Mtenth1
Over1
movlw 0x30 ;
addwf HourH1,F ;
addwf HourL1,F ; Add 0x30 ('0') to all
addwf MinsH1,F ; variables to convert
addwf MinsL1,F ; a number 0 - 9 to an
return ; ASCII equivalent
;=============初始化LCD模塊===========================
InitLCD
bcf STATUS,RP0 ; Bank 0
bcf STATUS,RP1
clrf LCD_DATA ; 清 LCD 數(shù)據(jù) & 控制位
bsf STATUS,RP0 ; Bank 1
movlw 0xc1 ; 設置RB1~RB5為輸出
movwf LCD_DATA
bcf TRISA,5
bcf STATUS,RP0 ;
movlw 0x00 ;
movwf LCD_DATA
bsf LCD_CNTL2, E
bcf LCD_CNTL2, E
movlw 0x08 ;
movwf LCD_DATA
bsf LCD_CNTL2, E
bcf LCD_CNTL2, E
call LongDelay
call LongDelay
movlw b'00101000'
call SendCmd
movlw DISP_ON ; 開顯示
call SendCmd
movlw ENTRY_INC ; 設置指針移動方式
call SendCmd
movlw DD_RAM_ADDR ; 設置起始地址
call SendCmd
InitLCDEnd
bcf STATUS,RP0
movlw CLR_DISP
call SendCmd
return
;============ 將字符數(shù)據(jù)送入 LCD =============
putcLCD
bcf STATUS,RP0
movwf Byte ; 存 WREG 到 Byte 寄存器
swapf Byte,W ; 寫入高半字節(jié)
movwf LCD_DATA1
rlf LCD_DATA1,1
rlf LCD_DATA1,1
movlw 0x3c
andwf LCD_DATA1,1
movf LCD_DATA1,w
movwf LCD_DATA
bsf LCD_CNTL1, RS ; 設置為送數(shù)據(jù)模式
bsf LCD_CNTL2, E ; 發(fā)送數(shù)據(jù)信號
bcf LCD_CNTL2, E
movf Byte,W ; 接著送低半字節(jié)
movwf LCD_DATA1
rlf LCD_DATA1,1
rlf LCD_DATA1,1
movlw 0x3c
andwf LCD_DATA1,1
movf LCD_DATA1,w
movwf LCD_DATA
bsf LCD_CNTL1, RS ; 設置為送數(shù)據(jù)模式
bsf LCD_CNTL2, E ; 發(fā)送數(shù)據(jù)信號
bcf LCD_CNTL2, E
call Delay
return
;========== 送命令到 LCD ================
SendCmd
bcf STATUS,RP0
movwf Byte ; 存 WREG 到 Byte 寄存器
swapf Byte,W ; 送入命令的高字節(jié)
movwf LCD_DATA1
rlf LCD_DATA1,1
rlf LCD_DATA1,1
movlw 0x3c
andwf LCD_DATA1,1
movf LCD_DATA1,w
movwf LCD_DATA
bcf LCD_CNTL1,RS ; 設置為送命令模式
bsf LCD_CNTL2,E ; 發(fā)送數(shù)據(jù)信號
bcf LCD_CNTL2,E
movf Byte,W ; 接著送命令的低字節(jié)
movwf LCD_DATA1
rlf LCD_DATA1,1
rlf LCD_DATA1,1
movlw 0x3c
andwf LCD_DATA1,1
movf LCD_DATA1,w
movwf LCD_DATA
bcf LCD_CNTL1,RS ; 設置為送命令模式
bsf LCD_CNTL2,E ; 發(fā)送數(shù)據(jù)信號
bcf LCD_CNTL2,E
call Delay
return
;===========鬧鈴==================
ALR1 bcf STATUS,RP0
movf Hour,W
xorwf ALRH1,W
btfss STATUS,Z
goto ALREND
movf Mins,W
xorwf ALRM1,W
btfss STATUS,Z
goto ALREND
bsf STATUS,RP0
clrf TRISD
bcf STATUS,RP0
nop
bsf PORTD,6
return
;=================================
ALR2 bcf STATUS,RP0
movf Hour,W
xorwf ALRH2,W
btfss STATUS,Z
goto ALREND
movf Mins,W
xorwf ALRM2,W
btfss STATUS,Z
goto ALREND
bsf STATUS,RP0
clrf TRISD
bcf STATUS,RP0
nop
bcf PORTD,6
return
;==================================
ALR3 bcf STATUS,RP0
movf Hour,W
xorwf ALRH3,W
btfss STATUS,Z
goto ALREND
movf Mins,W
xorwf ALRM3,W
btfss STATUS,Z
goto ALREND
bsf PORTD,7
return
;=================================
ALR4 bcf STATUS,RP0
movf Hour,W
xorwf ALRH4,W
btfss STATUS,Z
goto ALREND
movf Mins,W
xorwf ALRM4,W
btfss STATUS,Z
goto ALREND
bcf PORTD,7
return
;=================================
ALR5 bcf STATUS,RP0
movf Hour,W
xorwf ALRH5,W
btfss STATUS,Z
goto ALREND
movf Mins,W
xorwf ALRM5,W
btfss STATUS,Z
goto ALREND
bsf PORTD,5
return
;=================================
ALR6 bcf STATUS,RP0
movf Hour,W
xorwf ALRH6,W
btfss STATUS,Z
goto ALREND
movf Mins,W
xorwf ALRM6,W
btfss STATUS,Z
goto ALREND
bcf PORTD,5
return
;=================================
ALR7 bcf STATUS,RP0
movf Hour,W
xorwf ALRH7,W
btfss STATUS,Z
goto ALREND
movf Mins,W
xorwf ALRM7,W
btfss STATUS,Z
goto ALREND
bsf STATUS,RP0
clrf TRISD
bcf STATUS,RP0
nop
bsf PORTD,4
return
;=================================
ALR8 bcf STATUS,RP0
movf Hour,W
xorwf ALRH8,W
btfss STATUS,Z
goto ALREND
movf Mins,W
xorwf ALRM8,W
btfss STATUS,Z
goto ALREND
bsf STATUS,RP0
clrf TRISD
bcf STATUS,RP0
nop
bcf PORTD,4
return
;-------------
ALREND
return
;==========去抖==============
Delay
bcf STATUS,RP0
clrf Count
Dloop
decfsz Count,f
goto Dloop
return
;-------------------------
LongDelay
bcf STATUS,RP0
clrf Count
clrf Count1
movlw 0x03
movwf Count2
LDloop
decfsz Count,f
goto LDloop
decfsz Count1,f
goto LDloop
decfsz Count2,f
goto LDloop
return
;*------
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -