📄 s2.asm
字号:
GOTO L824
RETURN
XG_HOUR NOP
L82 BTFSC PORTA,4
GOTO L81
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L81
L416 BTFSS PORTA,4;RA4有没释放
GOTO L416
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L416
INCF HOUR,F
CALL SJXS
MOVLW .24
SUBWF HOUR,W
BTFSS STATUS,C
GOTO L81
CLRF HOUR
CALL SJXS
L81 BTFSC PORTB,0
GOTO L82
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L82
BTFSC PORTB,0
GOTO L82
; MOVF HOUR,W
; MOVWF HOUR1
RETURN
XG_MINUTE NOP ;修改分
L92 BTFSC PORTA,4
GOTO L91
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L91
L417 BTFSS PORTA,4;RA4有没释放
GOTO L417
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L417
INCF MINUTE,F
CALL SJXS
MOVLW .60
SUBWF MINUTE,W
BTFSS STATUS,C
GOTO L91
CLRF MINUTE
CALL SJXS
L91 BTFSC PORTB,0
GOTO L92
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L92
BTFSC PORTB,0
GOTO L92
; MOVF MINUTE,W
; MOVWF MINUTE1
RETURN
XG_SECOND NOP ;修改秒
L921 BTFSC PORTA,4
GOTO L911
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L911
L419 BTFSS PORTA,4;RA4有没释放
GOTO L419
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L419
CLRF SECOND
CALL SJXS
L911 BTFSC PORTB,0
GOTO L921
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L921
MOVLW B'00000001'
CALL LCD_W8BIT
MOVLW .2
CALL DELAY_WMS
; MOVF SECOND,W
; MOVWF SECOND1
RETURN
;*************************************************
;时间显示子程序
;*************************************************
SJXS
MOVF HOUR,W
CALL BCD
NOP
MOVLW B'10000001';写位置命令
CALL LCD_W8BIT
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW ":" ; :的 码
CALL LCD_W8BITD
MOVF MINUTE,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW ":"
CALL LCD_W8BITD
MOVF SECOND,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
RETURN
SJXS2 MOVF HOUR,W
CALL BCD
NOP
MOVLW B'10000001';写位置命令
CALL LCD_W8BIT
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW " " ; :的 码
CALL LCD_W8BITD
MOVF MINUTE,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW " "
CALL LCD_W8BITD
MOVF SECOND,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
RETURN
;*************************************************
;日期显示子程序
;*************************************************
RQXS
MOVLW B'11000101' ; xian shi ri qi
CALL LCD_W8BIT
MOVLW .20
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVF YEAR_L,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW "/"
CALL LCD_W8BITD
MOVF MONTH,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW "/"
CALL LCD_W8BITD
MOVF DAY,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
CALL DELAY_2S
MOVLW B'00000001'
CALL LCD_W8BIT
MOVLW .2
CALL DELAY_WMS
CALL DELAY_2S
RETURN
;*************************************************
;日期显示子程序2用于修改时间屏幕刷新
;*************************************************
RQXS2
MOVLW B'11000101' ; xian shi ri qi
CALL LCD_W8BIT
MOVLW .20
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVF YEAR_L,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW "/"
CALL LCD_W8BITD
MOVF MONTH,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW "/"
CALL LCD_W8BITD
MOVF DAY,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
RETURN
;*************************************************
;闹钟时间设置子程序
;*************************************************
NZSZ
CALL DELAY_WMS
; MOVF HOUR,W
; MOVWF N_HOUR
;
; MOVLW .1
; ADDWF MINUTE,F
; MOVF MINUTE,W
; MOVWF N_MINUTE
CALL NZXS2
L52 BTFSC PORTA,4
GOTO L51L
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L51L
L4110 BTFSS PORTA,4;RA4有没释放
GOTO L4110
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L4110
INCF N_HOUR
CALL NZXS2
MOVLW .24
SUBWF N_HOUR,W
BTFSS STATUS,C
GOTO L51L
CLRF N_HOUR
CALL NZXS2
L51L BTFSC PORTB,0
GOTO L52
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L52
BB1 BTFSS PORTB,0
GOTO BB1
CALL DELAY_10MS
BTFSS PORTB,0
GOTO BB1
L54 BTFSC PORTA,4
GOTO L53
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L53
L4111 BTFSS PORTA,4;RA4有没释放
GOTO L4111
CALL DELAY_10MS
BTFSS PORTA,4
GOTO L4111
INCF N_MINUTE
CALL NZXS2
MOVLW .60
SUBWF N_MINUTE,W
BTFSS STATUS,C
GOTO L54
CLRF N_MINUTE
CALL NZXS2
L53 BTFSC PORTB,0
GOTO L54
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L54
BB0 BTFSS PORTB,0
GOTO BB0
CALL DELAY_10MS
BTFSS PORTB,0
GOTO BB0
MOVLW B'00000001'
CALL LCD_W8BIT
MOVLW .2
CALL DELAY_WMS
RETURN
;*************************************************
;闹钟时间显示子程序
;*************************************************
NZXS NOP
MOVLW B'10001010'
CALL LCD_W8BIT
MOVLW "R"
CALL LCD_W8BITD
MOVF N_HOUR,W ;闹钟时计数器
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW ":"
CALL LCD_W8BITD
MOVF N_MINUTE,W ;闹钟分计数器
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
CALL DELAY_2S
MOVLW B'00000001'
CALL LCD_W8BIT
MOVLW .2
CALL DELAY_WMS
CALL DELAY_2S
RETURN
;*************************************************
;闹钟时间显示子程序2
;*************************************************
NZXS2 NOP
MOVLW B'10001010'
CALL LCD_W8BIT
MOVLW "R"
CALL LCD_W8BITD
MOVF N_HOUR,W ;闹钟时计数器
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW ":"
CALL LCD_W8BITD
MOVF N_MINUTE,W ;闹钟分计数器
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
RETURN
;*************************************************
;计时器计数子程序
;*************************************************
;*********************************计数器功能
JSQ
MOVLW B'11000001'
CALL LCD_W8BIT
MOVLW "0"
CALL LCD_W8BITD ;进入记时期后时的十位显示零
MOVLW "0"
CALL LCD_W8BITD
MOVLW ":"
CALL LCD_W8BITD
MOVLW "0"
CALL LCD_W8BITD
MOVLW "0"
CALL LCD_W8BITD
MOVLW ":"
CALL LCD_W8BITD
MOVLW "0"
CALL LCD_W8BITD
MOVLW "0"
CALL LCD_W8BITD
;************************88记时期键盘扫描程序
L210 BTFSC PORTB,0
GOTO L210
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L210
CB0 BTFSS PORTB,0
GOTO CB0
CALL DELAY_10MS
BTFSS PORTB,0
GOTO CB0
;**********************************8开始即使了
CALL PWM
KSJS MOVLW 00H ;记时期寄存器清零,在此基础上累加技术
MOVWF HOUR_J
MOVWF MINUTE_J
MOVWF SECOND_J
MOVWF MS_J
L211
; MOVLW B'00000001'
; CALL LCD_W8BIT
; MOVLW .2
; CALL DELAY_WMS
MOVLW B'11000001' ;时时刷新屏幕
CALL LCD_W8BIT
;MOVLW .20
; CALL DELAY_WMS
MOVF HOUR_J,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW ":"
CALL LCD_W8BITD
MOVF MINUTE_J,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW ":"
CALL LCD_W8BITD
MOVF SECOND_J,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
MOVLW ":"
CALL LCD_W8BITD
MOVF MS_J,W
CALL BCD
MOVF BCD_H,W
CALL LCD_W8BITD
MOVF BCD_L,W
CALL LCD_W8BITD
CALL LCD_W8BITD
MOVLW " "
CALL LCD_W8BITD
MOVLW " "
CALL LCD_W8BITD
MOVLW .80
CALL DELAY_WMS
BTFSC PORTA,4 ;RA4按;下则停止刷新屏幕,技术停止
GOTO L211
CALL DELAY_10MS
BTFSC PORTA,4
GOTO L211
CALL PWM
RR1 BTFSS PORTA,4
GOTO RR1
CALL DELAY_10MS
BTFSS PORTA,4
GOTO RR1
L212 BTFSC PORTB,0 ;退出即使器
GOTO L212
CALL DELAY_10MS
BTFSC PORTB,0
GOTO L212
MX1 BTFSS PORTB,0
GOTO MX1
BTFSS PORTB,0
GOTO MX1
MOVLW B'00000001'
CALL LCD_W8BIT
RETURN ;退出记时器
;*************************************************
;LCD 显示相关程序
;*************************************************
;====================================
LCD_CSH
MOVLW .15 ;上电后延时15ms
CALL DELAY_WMS
;1
MOVLW B'0011'
MOVWF R0
CALL LCD_W4BIT ;LCD,写四位控制命令
MOVLW .5 ;延时5ms
CALL DELAY_WMS
;2
MOVLW B'0011'
MOVWF R0
CALL LCD_W4BIT ;LCD,写四位控制命令
MOVLW .100
CALL DELAY_WUS;延时100us
;3
MOVLW B'0011'
MOVWF R0
CALL LCD_W4BIT ;LCD,写四位控制命令
MOVLW .100
CALL DELAY_WUS;延时100us
;4
MOVLW B'0010'
MOVWF R0
CALL LCD_W4BIT ;LCD,写四位数据格式命令
;5
MOVLW B'00101000' ;写功能设置命令,8位::4位数据格式
MOVWF R0
CALL LCD_W8BIT ;LCD,写八位
;6
MOVLW B'00001100' ;发送显示控制命令
MOVWF R0
CALL LCD_W8BIT ;LCD,写八位
;7
MOVLW B'00000001' ;写清除命令
MOVWF R0
CALL LCD_W8BIT
MOVLW .2 ;延时5ms
CALL DELAY_WMS
;8
MOVLW B'00000110' ;写输入模式命令
MOVWF R0
CALL LCD_W8BIT ;LCD,写八位
RETURN
CSH
BSF STATUS,RP0 ;BANK_1
MOVLW B'11110000'
MOVWF TRISA
CLRF TRISD ;D口0/1/2/3输出
MOVLW B'00000110';A口设为数字量通道
MOVWF ADCON1
BCF STATUS,RP0 ;BANK_0
RETURN
;********************************
LCD_W4BIT ;LCD,写四位命令
MOVWF R0
BSF LCD_E
NOP
BCF LCD_RW
NOP
BCF LCD_RS
MOVLW 0F0H
ANDWF PORTD,F ;低四位清0
MOVF R0,W
MOVWF PORTD
NOP
BCF LCD_E ;数据有效
RETURN
;*****************************
LCD_W8BIT ;LCD,写八位命令
MOVWF R0
BSF LCD_E
NOP
BCF LCD_RW
NOP
BCF LCD_RS
MOVLW 0F0H
ANDWF PORTD,F ;低四位清0
SWAPF R0,W ;高低四位交换
MOVWF PORTD
NOP
BCF LCD_E ;数据有效
NOP
MOVLW 0F0H
ANDWF PORTD,F ;低四位清0
MOVLW 0FH
ANDWF R0,W ;R0高四位清0
MOVWF PORTD
BSF LCD_E
NOP
BCF LCD_E ;数据有效
RETURN
;====================================
LCD_W8BITD ;LCD,写八位数据
MOVWF R0
BSF LCD_E
NOP
BCF LCD_RW
NOP
BSF LCD_RS
MOVLW 0F0H
ANDWF PORTD,F ;低四位清0
SWAPF R0,W ;高低四位交换
MOVWF PORTD
NOP
BCF LCD_E ;数据有效
NOP
MOVLW 0F0H
ANDWF PORTD,F ;低四位清0
MOVLW 0FH
ANDWF R0,W ;R0高四位清0
MOVWF PORTD
BSF LCD_E
NOP
BCF LCD_E ;数据有效
RETURN
;*************************************************
;TMR1初始化子程序
;*************************************************
TMR1_CSH
BSF STATUS,RP0 ;TIMR1初始化程序段
BSF TRISC,0
BSF PIE1,TMR1IE
BCF STATUS,RP0
MOVLW B'00001010'
MOVWF T1CON
MOVLW B'11000000'
MOVWF INTCON
MOVLW .0 ;TMRI低8位
MOVWF TMR1L
MOVLW .230 ;
MOVWF TMR1H
BSF T1CON,TMR1ON ;开TMR1
RETURN
;*************************************************
;PWM 闹钟铃声子程序
;*************************************************
PWM BSF STATUS,RP0
MOVLW 00H
MOVWF TRISC
MOVLW 0F3H
MOVWF PR2
BCF STATUS,RP0
BSF BZ0,0
MOVLW .48
MOVWF CCPR1L
MOVLW 3CH
MOVWF CCP1CON
CLRF T2CON
;BTFSC PORTB,0
BSF T2CON,TMR2ON
MOVLW .20
CALL DELAY_WMS
BCF T2CON,TMR2ON
;
; NOR10
; GOTO L38
;CALL DELAY_10MS
; BTFSC PORTB,0
JR10 RETURN
;*************************************************
;延时子程序
;*************************************************
;延时Wms子程序
DELAY_WMS
; RETURN
;
MOVWF R1 ;外循环
MSS MOVLW .249
MOVWF R2 ;内循环
NOP
DECFSZ R2,F
GOTO $-2
DECFSZ R1,F
GOTO MSS
RETURN
;*************
;延时Wus子程序
DELAY_WUS
; RETURN
MOVWF R1
DECFSZ R1
GOTO $-1
RETURN
;*****************
;延时10MS
DELAY_10MS ;*********10MS延迟
; RETURN
MOVLW .10
MOVWF R1 ;外循环
MSS1 MOVLW .249
MOVWF R2 ;内循环
NOP
DECFSZ R2,F
GOTO $-2
DECFSZ R1,F
GOTO MSS1
RETURN
;******************
;1秒延迟
DELAY_1S
; RETURN
MOVLW 06H
MOVWF W1
LOOP1 MOVLW 0EBH
MOVWF W2
LOOP2
MOVLW 0ECH
MOVWF W3
LOOP3
DECFSZ W3
GOTO LOOP3
DECFSZ W2
GOTO LOOP2
DECFSZ W1
GOTO LOOP1
RETURN
;*****************
;延时2S
DELAY_2S
; RETURN
MOVLW 01H
MOVWF W10
LOOP10 MOVLW 06H
MOVWF W11
LOOP11 MOVLW 0EBH
MOVWF W21
LOOP12
MOVLW 0ECH
MOVWF W31
LOOP13
DECFSZ W31
GOTO LOOP13
DECFSZ W2
GOTO LOOP12
DECFSZ W11
GOTO LOOP11
DECFSZ W10
GOTO LOOP10
RETURN
;*******************
;延是5S
DELAY_5S
; RETURN
MOVLW 04H
MOVWF W10
LOOP101 MOVLW 06H
MOVWF W11
LOOP111 MOVLW 0EBH
MOVWF W21
LOOP121
MOVLW 0ECH
MOVWF W31
LOOP131
DECFSZ W31
GOTO LOOP131
DECFSZ W2
GOTO LOOP121
DECFSZ W11
GOTO LOOP111
DECFSZ W10
GOTO LOOP101
RETURN
;*************************************************
;BCD转换程序
;*************************************************
BCD CLRF BW
CLRF SW
CLRF GW
MOVWF BCD_R0
L10 MOVLW .100
SUBWF BCD_R0,F
BTFSC STATUS,C
GOTO B1
GOTO B2
B1 INCF BW,F
GOTO L10
B2 NOP
MOVLW .100
ADDWF BCD_R0
L2 MOVLW .10
SUBWF BCD_R0,F
BTFSC STATUS,C
GOTO M11
GOTO M12
M11 INCF SW,F
GOTO L2
M12 NOP
MOVLW .10
ADDWF BCD_R0,F
MOVF BCD_R0,W
MOVWF GW
MOVLW .48
ADDWF BW
ADDWF SW
ADDWF GW
MOVF SW,W
MOVWF BCD_H
MOVF GW,W
MOVWF BCD_L
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -