📄 pic-lcd.asm
字号:
MOVLW 0FH
SUBWF DAYR,W
MOVLW 09H
BTFSC 3,2
MOVWF DAYR
GOTO TRET
KEY0_MON:
DECF MONR,1
MOVLW 00H
SUBWF MONR,W
MOVLW 12H
BTFSC 3,2
MOVWF MONR
MOVLW 0FH
SUBWF MONR,W
MOVLW 09H
BTFSC 3,2
MOVWF MONR
GOTO TRET
KEY0_MIN:
DECF MINR,1
MOVLW 0FFH
SUBWF MINR,W
MOVLW 59H
BTFSC 3,2
MOVWF MINR
MOVLW 4FH
SUBWF MINR,W
MOVLW 49H
BTFSC 3,2
MOVWF MINR
MOVLW 03FH
SUBWF MINR,W
MOVLW 39H
BTFSC 3,2
MOVWF MINR
MOVLW 2FH
SUBWF MINR,W
MOVLW 29H
BTFSC 3,2
MOVWF MINR
MOVLW 1FH
SUBWF MINR,W
MOVLW 19H
BTFSC 3,2
MOVWF MINR
MOVLW 0FH
SUBWF MINR,W
MOVLW 09H
BTFSC 3,2
MOVWF MINR
GOTO TRET
KEY0_HOUR:
DECF HOUR,1
MOVLW 0FFH
SUBWF HOUR,W
MOVLW 23H
BTFSC 3,2
MOVWF HOUR
MOVLW 1FH
SUBWF HOUR,W
MOVLW 19H
BTFSC 3,2
MOVWF HOUR
MOVLW 0FH
SUBWF HOUR,W
MOVLW 09H
BTFSC 3,2
MOVWF HOUR
GOTO TRET
KEY0_VOL:;VOL-- ;VOL--单个按键电平掉转时间最大60ms。;连续(长)按键Vw变化保持时间慢速模式100,250,375ms,;1s后进入快速模式25,50,75ms
BCF FLAG,7;取消长按无效标志
BTFSS FLAG,LONG
GOTO KEY0_VOL0
DECFSZ TIM1
GOTO TRET;8M,时间周期1MS/循环
MOVLW 8H
MOVWF TIM1
BSF DSFLAG,7;按键长按时间大于90MS标志。
GOTO $+2;KEY_VOL_UP_D
KEY0_VOL0:
BSF FLAG,LONG
BSF DSFLAG,6;VOL--单次按键
KEY_VOL_UP_D:
movf KEEP,1
BTFSC 3,2
GOTO KEY_VOLDOWN
KEY_VOLUP:
INCF VOL_TEMP,1
MOVLW 11H
SUBWF VOL_TEMP,W
BTFSS 3,0
GOTO TRET
MOVLW 10H
MOVWF VOL_TEMP
GOTO TRET
KEY_VOLDOWN:
DECF VOL_TEMP,1
MOVLW 06H
SUBWF VOL_TEMP,W
BTFSC 3,0
GOTO TRET
MOVLW 06H
MOVWF VOL_TEMP
GOTO TRET
;*********************************************
;*********************************************
DS1302:
BTFSS DSFLAG,0
GOTO DS_SETUP
BTFSC KEYF,0;VOL声音调节有效,只能读1302
GOTO RD1302
WR1302:;130条指令
BTFSC KEYF,1
GOTO WR1302_YEAR
BTFSC KEYF,2
GOTO WR1302_MON
BTFSC KEYF,3
GOTO WR1302_DAY
BTFSC KEYF,4
GOTO WR1302_HOUR
GOTO WR1302_MIN
WR1302_YEAR:
BSF PE,RST
MOVLW B'10001100';YEAR ADD WR
CALL DS_WR
MOVF YEAR,W
CALL DS_WR
BCF PE,RST
GOTO WR_TRET
WR1302_MON:
BSF PE,RST
MOVLW B'10001000';MON ADD WR
CALL DS_WR
MOVF MONR,W
CALL DS_WR
BCF PE,RST
GOTO WR_TRET
WR1302_DAY:
BSF PE,RST
MOVLW B'10000110';DAY ADD WR
CALL DS_WR
MOVF DAYR,W
CALL DS_WR
BCF PE,RST
GOTO WR_TRET
WR1302_HOUR:
BSF PE,RST
MOVLW B'10000100';HOUR ADD WR
CALL DS_WR
MOVF HOUR,W
CALL DS_WR
BCF PE,RST
GOTO WR_TRET
WR1302_MIN:
BSF PE,RST
MOVLW B'10000010';MIN ADD WR
CALL DS_WR
MOVF MINR,W
CALL DS_WR
BCF PE,RST
WR_TRET:
GOTO TRET
;***********************
RD1302:;最多410条指令
BTFSS FLAG,STA
GOTO TRET
BTFSS DSFLAG,1;/0=>读时间/1=>读日期
GOTO RD1302_TIME
RD1302_DATA:
BSF PE,RST
MOVLW B'10001001';MON ADD WR
CALL DS_WR
CALL DS_RD
MOVF TEMP,W
BCF PE,RST
MOVWF MONR
MOVLW B'10000111';DAY ADD RD
BSF PE,RST
CALL DS_WR
CALL DS_RD
MOVF TEMP,W
BCF PE,RST
MOVWF DAYR
MOVLW B'00001101';YEAR ADD WR
BSF PE,RST
CALL DS_WR
CALL DS_RD
MOVF TEMP,W
MOVWF YEAR
BCF DSFLAG,1
BCF PE,RST
BCF PE,CLK
GOTO TRET
RD1302_TIME:
BSF PE,RST
MOVLW B'10000011';MIN ADD RD
CALL DS_WR
CALL DS_RD
MOVF TEMP,W
BCF PE,RST
MOVWF MINR
MOVLW B'10000101';HOUR ADD RD
BSF PE,RST
CALL DS_WR
CALL DS_RD
MOVF TEMP,W
MOVWF HOUR
BCF PE,RST
BSF DSFLAG,1
BCF PE,CLK
GOTO TRET
;***********************
DS_SETUP:;最多250条指令
BTFSC DSFLAG,2;/
GOTO DS_SETUP1
DS_SETUP0:
BSF PE,RST
MOVLW B'10001110';控制位地址,写
CALL DS_WR
MOVLW 00H ;WP0000000
CALL DS_WR ;WP=0,允许写
BCF PE,RST
MOVLW B'10000000';MIAO位地址,写
BSF PE,RST
CALL DS_WR
MOVLW 00H ;CH0000000
CALL DS_WR ;CH=0,DS1302 WORK
BCF PE,RST
BSF DSFLAG,2
BSF PE,RST
MOVLW B'10001001';MON ADD WR
CALL DS_WR
CALL DS_RD
MOVF TEMP,W
BCF PE,RST
MOVWF MONR
DS_SETUP1:
BSF DSFLAG,0;DS1302设置完成
GOTO TRET
;******************************
;******************************
DELAY:
BTFSS WORK,KUANG
GOTO TRET
BTFSS FLAG,PPC
GOTO $+4
NOP
BTFSS PIR1,TXIF
GOTO DELAY
BTFSS WORK,NO_SIGN
GOTO DELAY0
BTFSS KEYF,0
GOTO DELAY0
BTFSC WORK,TST
GOTO DELAY0
MOVLW 03H
SUBWF KEEP,W
BTFSC 3,2
GOTO DELAY0
DECFSZ XDELAY,1
GOTO TRET
DECFSZ YDELAY,1
GOTO TRET
;---------------------------
BSF PC,RT
MOVLW 0A9H ;B'10101001'
BCF PC,CS
CALL W_INS;设置省电模式
NOP
BCF PD,BUZ ;自动关机
GOTO TRET
;---------------------------
DELAY0:
CLRF XDELAY
CLRF YDELAY
GOTO TRET
;*********************************
;*********************************
DISP:
BSF PC,RT ;=>/RST芯片复位口,低电平复位。
BTFSS FLAG,SETUP
GOTO DISP_SETUP
BTFSS FLAG,CLRLCD
GOTO DISP1 ;CLR_LCD
BTFSS FLAG,STA
GOTO DISP11;;显示开机画面
btfsS TIMTZ,0
GOTO DISP_WK
BSF PCLATH,4
GOTO TIM_TZ;;进入时间调节界面
DISP_SETUP:;;240
;----------------------------------------- 11-7 V 测试
MOVLW 48H
CALL W_INS ;Display Duty=1/96
MOVLW 68H ;11-7 60H数据越小,背景越黑
CALL W_INS
MOVLW 0A1H ;ADC=1;
CALL W_INS
MOVLW 0C0H ;SHL=0;
CALL W_INS
MOVLW 44H ;COM0=16
CALL W_INS
MOVLW 10H
CALL W_INS
MOVLW 40H ;Initial display line=0
CALL W_INS
MOVLW 00H
CALL W_INS
MOVLW 0ABH ;Oscillator on start
CALL W_INS
MOVLW 66H ;DC-DC step-up register=5
CALL W_INS
MOVLW 27H ;regulator resistor=7
CALL W_INS
MOVLW 81H ;electronic volume regigister=32
CALL W_INS
MOVLW 20H
CALL W_INS
MOVLW 54H ;LCD bias=1/9
CALL W_INS
MOVLW 93H ;FRC=4,PWM=15
CALL W_INS
MOVLW 88H
CALL W_INS
MOVLW 00H
CALL W_INS
MOVLW 89H
CALL W_INS
MOVLW 00H
CALL W_INS
MOVLW 8AH
CALL W_INS
MOVLW 88H
CALL W_INS
MOVLW 8BH
CALL W_INS
MOVLW 88H
CALL W_INS
MOVLW 8CH
CALL W_INS
MOVLW 0BBH
CALL W_INS
MOVLW 8DH
CALL W_INS
MOVLW 0BBH
CALL W_INS
MOVLW 8EH
CALL W_INS
MOVLW 0EEH
CALL W_INS
MOVLW 8FH
CALL W_INS
MOVLW 0EEH
CALL W_INS
;wait for 1ms
MOVLW .6 ;200*0.25us=50us
MOVWF CNT_H
XFBB1:
MOVLW .200
MOVWF CNT_L
XFBB11:
DECFSZ CNT_L,1
GOTO XFBB11
DECFSZ CNT_H,1
GOTO XFBB1
MOVLW 2EH ;VC=1,VR=1,VF=0
CALL W_INS
;wait for 1ms
MOVLW .6 ;200*0.25us=50us
MOVWF CNT_H
XFBB2:
MOVLW .200
MOVWF CNT_L
XFBB21:
DECFSZ CNT_L,1
GOTO XFBB21
DECFSZ CNT_H,1
GOTO XFBB2
MOVLW 2FH ;VC=1,VR=1,VF=1
CALL W_INS
;wait for 1ms
MOVLW .6 ;200*0.25us=50us
MOVWF CNT_H
XFBB3:
MOVLW .200
MOVWF CNT_L
XFBB31:
DECFSZ CNT_L,1
GOTO XFBB31
DECFSZ CNT_H,1
GOTO XFBB3
MOVLW 0AFH ;Display on, DON=1
CALL W_INS
;-----------------------------------------
DECFSZ WEEK,1;电源控制
GOTO TRET
MOVLW 02H
MOVWF WEEK
BTFSC SECR,0
GOTO DISP_SETUP_OK
MOVF SECR,W;MOVLW 02CH ;B'0010-1-VC-VR-VF'
CALL W_INS;电源控制
BTFSC SECR,1
BSF SECR,0
BSF SECR,1
BTFSS SECR,2
GOTO $
GOTO TRET
DISP_SETUP_OK:
BSF FLAG,SETUP
MOVLW 040H ;B'010000XX'
CALL W_INS;设置显示起始行
;NOP
MOVLW 00H ;B'X-S6-S5-S4-S3-S2-S1-S0'
CALL W_INS
;NOP
MOVLW 10H ;B'00010-Y7-Y6-Y5'
CALL W_INS;设置列地址高位
;NOP
MOVLW 00H ;B'0000-Y4-Y3-Y2-Y1'
CALL W_INS;设置列地址低位
;NOP
MOVF SECR,W;MOVLW 02CH ;B'0010-1-VC-VR-VF'
CALL W_INS;电源控制
GOTO TRET
;*******************
DISP1:
DISP_CLR_LCD:
BCF PC,CS
MOVLW 0AFH ;DISP ON
CALL W_INS
MOVLW 0B0H ;B'1011-P3-P2-P1-P0'9页
XORWF PCOM,W;设置页地址
CALL W_INS
CLR_LCD:
MOVLW 00H
CALL W_DATA
;NOP
CALL W_DATA
INCF TIM,1
MOVLW 080H
SUBWF TIM,W
BTFSS 3,2
GOTO TRET
CLRF TIM
INCF PCOM,1
MOVLW 0CH
SUBWF PCOM,W
BTFSS 3,2
GOTO TRET
BSF FLAG,CLRLCD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BTFSC FLAG,STA
;BSF FLAG,STA;;为贴牌修改
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GOTO NEXT
MOVLW 09H;为开机画面准备
MOVWF PCOM
MOVLW 04H
MOVWF YCOM_L
MOVLW 01H
MOVWF YCOM_H
GOTO NEXT1
NEXT:
MOVLW .11;;;WEI 框架准备
MOVWF PCOM
CLRF YCOM_L
CLRF YCOM_H
BTFSS TIMTZ,0;;WEI进入时间调整准备
GOTO NEXT1
MOVLW 08H
MOVWF YCOM_L
MOVLW 01H
MOVWF YCOM_H
MOVLW 09H
MOVWF PCOM
GOTO TRET
NEXT1:
MOVLW 10H ;B'00010-Y7-Y6-Y5'
XORWF YCOM_H,W
CALL W_INS;设置列地址高位
;NOP
MOVLW 00H ;B'0000-Y4-Y3-Y2-Y1'
XORWF YCOM_L,W
CALL W_INS;设置列地址低位
GOTO TRET
;***********************
DISP11:;显示开机画面
DISP_ON:
MOVLW 0B0H ;B'1011-P3-P2-P1-P0'9页
XORWF PCOM,W;设置页地址
CALL W_INS
BTFSS DISP_FG,2
GOTO DISP23
BTFSS DISP_FG,3
GOTO DISP45
BTFSS DISP_FG,4
GOTO DISP67
BTFSS DISP_FG,5
GOTO DISP89
GOTO $
;******************
DISP23:
INCF TCOUNT,1
MOVLW 1AH
MOVWF PCLATH
MOVF TCOUNT,W
CALL PAGE23
CLRF PCLATH
CALL W_DATA
;NOP
CALL W_DATA
MOVLW 69H;;;??
SUBWF TCOUNT,W
BTFSC 3,2
GOTO DISP230
MOVLW 0E0H;;;??
SUBWF TCOUNT,W
BTFSS 3,2
GOTO TRET
DISP230
DECF PCOM,1
MOVLW 08H
SUBWF PCOM,W
MOVLW 08H ;PAGE8
BTFSS 3,2
MOVLW 02H ;PAGE7
MOVWF YCOM_L
CLRF YCOM_H
MOVLW 10H ;B'00010-Y7-Y6-Y5'
XORWF YCOM_H,W
CALL W_INS;设置列地址高位
MOVLW 00H ;B'0000-Y4-Y3-Y2-Y1'
XORWF YCOM_L,W
CALL W_INS;设置列地址低位
MOVLW 02H
SUBWF YCOM_L,W
BTFSS 3,2
GOTO TRET
MOVLW 0FFH
MOVWF TCOUNT
BSF DISP_FG,2
GOTO TRET
;*************************
DISP45:
INCF TCOUNT,1
MOVF TCOUNT,W
BSF PCLATH,3
CALL PAGE45
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -