PIC12F629
;1.Master Clear Enable 此项为MCLR<4脚>选项
; internal:内部自控 External:外部控制
;2.Oscillator:可设内部,外部震荡<internal,external>
; 如果选NO Clock则3脚作I/O口用,否则3脚作CLKOUT
;***********************************
include
P1 EQU 2CH
P2 EQU 2DH
Y1 EQU 20H ;Y1,Y2为去抖
Y2 EQU 21H ;动延时寄存器
ADDR EQU 23H ;EEPROM地址寄存器
DATE1 EQU 24H ;EEPROM数据寄存器
BIT EQU 25H
BIT1 EQU 26H
TUMP EQU 27H
TUMP1 EQU 28H
CB EQU 29H ;显示输出公用查表量
SHUA EQU 2AH ;刷新用
SHUA1 EQU 2BH ;刷新用
AB EQU .1 ;显示数据
CLK EQU .2 ;显示时钟
AB1 EQU .4 ;输出数据
CLK1 EQU .0 ;输出时钟
#DEFINE IN1 GPIO,3 ;按键加
#DEFINE IN2 GPIO,5 ;按键减
ORG 0000H
NOP
BSF STATUS,RP0
MOVLW B’00101000’ ;设GP5,GP3为输入
MOVWF TRISIO
BCF OPTION_REG,7 ;设GP5弱上拉
BSF WPU,5
MOVLW 0FFH
MOVWF OSCCAL ;设频率最好
BCF STATUS,RP0
MOVLW 00H
MOVWF ADDR ;访问EEPROM的00H
CALL READ ;读EEPROM
MOVWF CB
MOVF CB,W
SUBLW .8
BTFSC STATUS,C
GOTO MAIN
CLRF CB
;********************************************
MAIN
;********************************************
CALL XIANSHI ;初次上电,显示,输出
CALL SHUCHU
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSS IN1 ;两键都松开,
GOTO $-1
BTFSS IN2 ;才能往下跳
GOTO $-4
MAI
;**********************************************
;;;;;;;;;;;刷新程序;;;;;;;;;;;;;
INCF SHUA
MOVF SHUA,W
XORLW 0FFH
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
INCF SHUA1
MOVF SHUA1,W
XORLW 010H
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
CLRF SHUA1
CALL XIANSHI
CALL SHUCHU
PPP
;*********************************************
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSC IN1 ;检测加一键是否按下?
GOTO DEC ;否,转去减一键检测
CALL DELAY ;去抖动
BTFSC IN1
GOTO DEC
MOVF CB,W
XORLW .8
BTFSS STATUS,Z
GOTO
有关PIC12F629
点击次数:276次 更新时间:2017-12-23
PIC12F629
;1.Master Clear Enable 此项为MCLR<4脚>选项
; internal:内部自控 External:外部控制
;2.Oscillator:可设内部,外部震荡<internal,external>
; 如果选NO Clock则3脚作I/O口用,否则3脚作CLKOUT
;***********************************
include
P1 EQU 2CH
P2 EQU 2DH
Y1 EQU 20H ;Y1,Y2为去抖
Y2 EQU 21H ;动延时寄存器
ADDR EQU 23H ;EEPROM地址寄存器
DATE1 EQU 24H ;EEPROM数据寄存器
BIT EQU 25H
BIT1 EQU 26H
TUMP EQU 27H
TUMP1 EQU 28H
CB EQU 29H ;显示输出公用查表量
SHUA EQU 2AH ;刷新用
SHUA1 EQU 2BH ;刷新用
AB EQU .1 ;显示数据
CLK EQU .2 ;显示时钟
AB1 EQU .4 ;输出数据
CLK1 EQU .0 ;输出时钟
#DEFINE IN1 GPIO,3 ;按键加
#DEFINE IN2 GPIO,5 ;按键减
ORG 0000H
NOP
BSF STATUS,RP0
MOVLW B’00101000’ ;设GP5,GP3为输入
MOVWF TRISIO
BCF OPTION_REG,7 ;设GP5弱上拉
BSF WPU,5
MOVLW 0FFH
MOVWF OSCCAL ;设频率最好
BCF STATUS,RP0
MOVLW 00H
MOVWF ADDR ;访问EEPROM的00H
CALL READ ;读EEPROM
MOVWF CB
MOVF CB,W
SUBLW .8
BTFSC STATUS,C
GOTO MAIN
CLRF CB
;********************************************
MAIN
;********************************************
CALL XIANSHI ;初次上电,显示,输出
CALL SHUCHU
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSS IN1 ;两键都松开,
GOTO $-1
BTFSS IN2 ;才能往下跳
GOTO $-4
MAI
;**********************************************
;;;;;;;;;;;刷新程序;;;;;;;;;;;;;
INCF SHUA
MOVF SHUA,W
XORLW 0FFH
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
INCF SHUA1
MOVF SHUA1,W
XORLW 010H
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
CLRF SHUA1
CALL XIANSHI
CALL SHUCHU
PPP
;*********************************************
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSC IN1 ;检测加一键是否按下?
GOTO DEC ;否,转去减一键检测
CALL DELAY ;去抖动
BTFSC IN1
GOTO DEC
MOVF CB,W
XORLW .8
BTFSS STATUS,Z
GOTO
有关PIC12F629
点击次数:276次 更新时间:2017-12-23
PIC12F629
;1.Master Clear Enable 此项为MCLR<4脚>选项
; internal:内部自控 External:外部控制
;2.Oscillator:可设内部,外部震荡<internal,external>
; 如果选NO Clock则3脚作I/O口用,否则3脚作CLKOUT
;***********************************
include
P1 EQU 2CH
P2 EQU 2DH
Y1 EQU 20H ;Y1,Y2为去抖
Y2 EQU 21H ;动延时寄存器
ADDR EQU 23H ;EEPROM地址寄存器
DATE1 EQU 24H ;EEPROM数据寄存器
BIT EQU 25H
BIT1 EQU 26H
TUMP EQU 27H
TUMP1 EQU 28H
CB EQU 29H ;显示输出公用查表量
SHUA EQU 2AH ;刷新用
SHUA1 EQU 2BH ;刷新用
AB EQU .1 ;显示数据
CLK EQU .2 ;显示时钟
AB1 EQU .4 ;输出数据
CLK1 EQU .0 ;输出时钟
#DEFINE IN1 GPIO,3 ;按键加
#DEFINE IN2 GPIO,5 ;按键减
ORG 0000H
NOP
BSF STATUS,RP0
MOVLW B’00101000’ ;设GP5,GP3为输入
MOVWF TRISIO
BCF OPTION_REG,7 ;设GP5弱上拉
BSF WPU,5
MOVLW 0FFH
MOVWF OSCCAL ;设频率最好
BCF STATUS,RP0
MOVLW 00H
MOVWF ADDR ;访问EEPROM的00H
CALL READ ;读EEPROM
MOVWF CB
MOVF CB,W
SUBLW .8
BTFSC STATUS,C
GOTO MAIN
CLRF CB
;********************************************
MAIN
;********************************************
CALL XIANSHI ;初次上电,显示,输出
CALL SHUCHU
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSS IN1 ;两键都松开,
GOTO $-1
BTFSS IN2 ;才能往下跳
GOTO $-4
MAI
;**********************************************
;;;;;;;;;;;刷新程序;;;;;;;;;;;;;
INCF SHUA
MOVF SHUA,W
XORLW 0FFH
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
INCF SHUA1
MOVF SHUA1,W
XORLW 010H
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
CLRF SHUA1
CALL XIANSHI
CALL SHUCHU
PPP
;*********************************************
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSC IN1 ;检测加一键是否按下?
GOTO DEC ;否,转去减一键检测
CALL DELAY ;去抖动
BTFSC IN1
GOTO DEC
MOVF CB,W
XORLW .8
BTFSS STATUS,Z
GOTO {D_L_技术支持_内容浏览}6
CLRF CB
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
INCF CB ;对查表量加一
CALL XIANSHI
CALL SHUCHU
BTFSS IN1
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
DEC MOVF CB,W
XORLW .0
BTFSS STATUS,Z ;是否减到0?
GOTO {D_L_技术支持_内容浏览}2 ;否,转去减一键检测
GOTO MAI ;是,不再减一
BTFSC IN2 ;减一键检测
GOTO MAI
CALL DELAY ;去抖动
BTFSC IN2
GOTO MAI
DECF CB ;对查表量减一
CALL XIANSHI
CALL SHUCHU
BTFSS IN2
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
;***************************************
DELAY;去抖动延时程序
MOVLW 0FFH
MOVWF Y1
M2 MOVLW 06FH
MOVWF Y2
M1 DECFSZ Y2
GOTO M1
DECFSZ Y1
GOTO M2
RETURN
;**************************************
DELAY1 MOVLW 0FFH
MOVWF P1
Q2
MOVLW 0FFH
MOVWF P2
Q1
DECFSZ P2
GOTO Q1
DECFSZ P1
GOTO Q2
RETURN
;**************************************
XIANSHI;数码管显示
MOVF CB,W
CALL SHUMA
MOVWF TUMP
MOVLW .8
MOVWF BIT
LOOP BCF GPIO,CLK
BTFSC TUMP,0
BSF GPIO,AB
BTFSS TUMP,0
BCF GPIO,AB
RRF TUMP,F
BSF GPIO,CLK
DECFSZ BIT
GOTO LOOP
RETURN
;**************************************
SHUCHU;输出处理
MOVF CB,W
CALL CHU
MOVWF TUMP1
MOVLW .8
MOVWF BIT1
LOOP1 BCF GPIO,CLK1
BTFSC TUMP1,0
BSF GPIO,AB1
BTFSS TUMP1,0
BCF GPIO,AB1
RRF TUMP1,F
BSF GPIO,CLK1
DECFSZ BIT1
GOTO LOOP1
RETURN
;**************************************
SHUMA;数码管显示码
ADDWF 2,1
RETLW 001H
RETLW 037H
RETLW 042H
RETLW 012H
RETLW 034H
RETLW 018H
RETLW 008H
RETLW 033H
RETLW 000H
;*************************************
CHU ;输出子程序
ADDWF 2,1
RETLW B’11111111’
RETLW B’11111110’
RETLW B’11111101’
RETLW B’11111011’
RETLW B’11110111’
RETLW B’11101111’
RETLW B’11011111’
RETLW B’10111111’
RETLW B’01111111’
;*************************************
; EEPROM读写程序
;*************************************
READ BSF STATUS,RP0
MOVF ADDR,W
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
RETURN
;*************************************
WRITE
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
MOVF ADDR,W
MOVWF EEADR
MOVF DATE1,W
MOVWF EEDATA
BSF EECON1,WREN
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BCF STATUS,RP0
RETURN
;**************************************
END
6
CLRF CB
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
INCF CB ;对查表量加一
CALL XIANSHI
CALL SHUCHU
BTFSS IN1
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
DEC MOVF CB,W
XORLW .0
BTFSS STATUS,Z ;是否减到0?
GOTO
有关PIC12F629
点击次数:276次 更新时间:2017-12-23
PIC12F629
;1.Master Clear Enable 此项为MCLR<4脚>选项
; internal:内部自控 External:外部控制
;2.Oscillator:可设内部,外部震荡<internal,external>
; 如果选NO Clock则3脚作I/O口用,否则3脚作CLKOUT
;***********************************
include
P1 EQU 2CH
P2 EQU 2DH
Y1 EQU 20H ;Y1,Y2为去抖
Y2 EQU 21H ;动延时寄存器
ADDR EQU 23H ;EEPROM地址寄存器
DATE1 EQU 24H ;EEPROM数据寄存器
BIT EQU 25H
BIT1 EQU 26H
TUMP EQU 27H
TUMP1 EQU 28H
CB EQU 29H ;显示输出公用查表量
SHUA EQU 2AH ;刷新用
SHUA1 EQU 2BH ;刷新用
AB EQU .1 ;显示数据
CLK EQU .2 ;显示时钟
AB1 EQU .4 ;输出数据
CLK1 EQU .0 ;输出时钟
#DEFINE IN1 GPIO,3 ;按键加
#DEFINE IN2 GPIO,5 ;按键减
ORG 0000H
NOP
BSF STATUS,RP0
MOVLW B’00101000’ ;设GP5,GP3为输入
MOVWF TRISIO
BCF OPTION_REG,7 ;设GP5弱上拉
BSF WPU,5
MOVLW 0FFH
MOVWF OSCCAL ;设频率最好
BCF STATUS,RP0
MOVLW 00H
MOVWF ADDR ;访问EEPROM的00H
CALL READ ;读EEPROM
MOVWF CB
MOVF CB,W
SUBLW .8
BTFSC STATUS,C
GOTO MAIN
CLRF CB
;********************************************
MAIN
;********************************************
CALL XIANSHI ;初次上电,显示,输出
CALL SHUCHU
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSS IN1 ;两键都松开,
GOTO $-1
BTFSS IN2 ;才能往下跳
GOTO $-4
MAI
;**********************************************
;;;;;;;;;;;刷新程序;;;;;;;;;;;;;
INCF SHUA
MOVF SHUA,W
XORLW 0FFH
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
INCF SHUA1
MOVF SHUA1,W
XORLW 010H
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
CLRF SHUA1
CALL XIANSHI
CALL SHUCHU
PPP
;*********************************************
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSC IN1 ;检测加一键是否按下?
GOTO DEC ;否,转去减一键检测
CALL DELAY ;去抖动
BTFSC IN1
GOTO DEC
MOVF CB,W
XORLW .8
BTFSS STATUS,Z
GOTO {D_L_技术支持_内容浏览}6
CLRF CB
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
INCF CB ;对查表量加一
CALL XIANSHI
CALL SHUCHU
BTFSS IN1
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
DEC MOVF CB,W
XORLW .0
BTFSS STATUS,Z ;是否减到0?
GOTO {D_L_技术支持_内容浏览}2 ;否,转去减一键检测
GOTO MAI ;是,不再减一
BTFSC IN2 ;减一键检测
GOTO MAI
CALL DELAY ;去抖动
BTFSC IN2
GOTO MAI
DECF CB ;对查表量减一
CALL XIANSHI
CALL SHUCHU
BTFSS IN2
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
;***************************************
DELAY;去抖动延时程序
MOVLW 0FFH
MOVWF Y1
M2 MOVLW 06FH
MOVWF Y2
M1 DECFSZ Y2
GOTO M1
DECFSZ Y1
GOTO M2
RETURN
;**************************************
DELAY1 MOVLW 0FFH
MOVWF P1
Q2
MOVLW 0FFH
MOVWF P2
Q1
DECFSZ P2
GOTO Q1
DECFSZ P1
GOTO Q2
RETURN
;**************************************
XIANSHI;数码管显示
MOVF CB,W
CALL SHUMA
MOVWF TUMP
MOVLW .8
MOVWF BIT
LOOP BCF GPIO,CLK
BTFSC TUMP,0
BSF GPIO,AB
BTFSS TUMP,0
BCF GPIO,AB
RRF TUMP,F
BSF GPIO,CLK
DECFSZ BIT
GOTO LOOP
RETURN
;**************************************
SHUCHU;输出处理
MOVF CB,W
CALL CHU
MOVWF TUMP1
MOVLW .8
MOVWF BIT1
LOOP1 BCF GPIO,CLK1
BTFSC TUMP1,0
BSF GPIO,AB1
BTFSS TUMP1,0
BCF GPIO,AB1
RRF TUMP1,F
BSF GPIO,CLK1
DECFSZ BIT1
GOTO LOOP1
RETURN
;**************************************
SHUMA;数码管显示码
ADDWF 2,1
RETLW 001H
RETLW 037H
RETLW 042H
RETLW 012H
RETLW 034H
RETLW 018H
RETLW 008H
RETLW 033H
RETLW 000H
;*************************************
CHU ;输出子程序
ADDWF 2,1
RETLW B’11111111’
RETLW B’11111110’
RETLW B’11111101’
RETLW B’11111011’
RETLW B’11110111’
RETLW B’11101111’
RETLW B’11011111’
RETLW B’10111111’
RETLW B’01111111’
;*************************************
; EEPROM读写程序
;*************************************
READ BSF STATUS,RP0
MOVF ADDR,W
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
RETURN
;*************************************
WRITE
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
MOVF ADDR,W
MOVWF EEADR
MOVF DATE1,W
MOVWF EEDATA
BSF EECON1,WREN
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BCF STATUS,RP0
RETURN
;**************************************
END
2 ;否,转去减一键检测
GOTO MAI ;是,不再减一
BTFSC IN2 ;减一键检测
GOTO MAI
CALL DELAY ;去抖动
BTFSC IN2
GOTO MAI
DECF CB ;对查表量减一
CALL XIANSHI
CALL SHUCHU
BTFSS IN2
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
;***************************************
DELAY;去抖动延时程序
MOVLW 0FFH
MOVWF Y1
M2 MOVLW 06FH
MOVWF Y2
M1 DECFSZ Y2
GOTO M1
DECFSZ Y1
GOTO M2
RETURN
;**************************************
DELAY1 MOVLW 0FFH
MOVWF P1
Q2
MOVLW 0FFH
MOVWF P2
Q1
DECFSZ P2
GOTO Q1
DECFSZ P1
GOTO Q2
RETURN
;**************************************
XIANSHI;数码管显示
MOVF CB,W
CALL SHUMA
MOVWF TUMP
MOVLW .8
MOVWF BIT
LOOP BCF GPIO,CLK
BTFSC TUMP,0
BSF GPIO,AB
BTFSS TUMP,0
BCF GPIO,AB
RRF TUMP,F
BSF GPIO,CLK
DECFSZ BIT
GOTO LOOP
RETURN
;**************************************
SHUCHU;输出处理
MOVF CB,W
CALL CHU
MOVWF TUMP1
MOVLW .8
MOVWF BIT1
LOOP1 BCF GPIO,CLK1
BTFSC TUMP1,0
BSF GPIO,AB1
BTFSS TUMP1,0
BCF GPIO,AB1
RRF TUMP1,F
BSF GPIO,CLK1
DECFSZ BIT1
GOTO LOOP1
RETURN
;**************************************
SHUMA;数码管显示码
ADDWF 2,1
RETLW 001H
RETLW 037H
RETLW 042H
RETLW 012H
RETLW 034H
RETLW 018H
RETLW 008H
RETLW 033H
RETLW 000H
;*************************************
CHU ;输出子程序
ADDWF 2,1
RETLW B’11111111’
RETLW B’11111110’
RETLW B’11111101’
RETLW B’11111011’
RETLW B’11110111’
RETLW B’11101111’
RETLW B’11011111’
RETLW B’10111111’
RETLW B’01111111’
;*************************************
; EEPROM读写程序
;*************************************
READ BSF STATUS,RP0
MOVF ADDR,W
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
RETURN
;*************************************
WRITE
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
MOVF ADDR,W
MOVWF EEADR
MOVF DATE1,W
MOVWF EEDATA
BSF EECON1,WREN
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BCF STATUS,RP0
RETURN
;**************************************
END
6 有关PIC12F629 点击次数:276次 更新时间:2017-12-23 PIC12F629 #DEFINE IN2 GPIO,5 ;按键减 GOTO MAIN CLRF SHUA MOVF CB,W 有关PIC12F629 点击次数:276次 更新时间:2017-12-23 PIC12F629 #DEFINE IN2 GPIO,5 ;按键减 GOTO MAIN CLRF SHUA MOVF CB,W GOTO MAI GOTO M1 SHUCHU;输出处理 CHU ;输出子程序 MOVF ADDR,W 6 有关PIC12F629 点击次数:276次 更新时间:2017-12-23 PIC12F629 #DEFINE IN2 GPIO,5 ;按键减 GOTO MAIN CLRF SHUA MOVF CB,W GOTO MAI GOTO M1 SHUCHU;输出处理 CHU ;输出子程序 MOVF ADDR,W
CLRF CB
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
INCF CB ;对查表量加一
CALL XIANSHI
CALL SHUCHU
BTFSS IN1
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
DEC MOVF CB,W
XORLW .0
BTFSS STATUS,Z ;是否减到0?
GOTO
;1.Master Clear Enable 此项为MCLR<4脚>选项
; internal:内部自控 External:外部控制
;2.Oscillator:可设内部,外部震荡<internal,external>
; 如果选NO Clock则3脚作I/O口用,否则3脚作CLKOUT
;***********************************
include
P1 EQU 2CH
P2 EQU 2DH
Y1 EQU 20H ;Y1,Y2为去抖
Y2 EQU 21H ;动延时寄存器
ADDR EQU 23H ;EEPROM地址寄存器
DATE1 EQU 24H ;EEPROM数据寄存器
BIT EQU 25H
BIT1 EQU 26H
TUMP EQU 27H
TUMP1 EQU 28H
CB EQU 29H ;显示输出公用查表量
SHUA EQU 2AH ;刷新用
SHUA1 EQU 2BH ;刷新用
AB EQU .1 ;显示数据
CLK EQU .2 ;显示时钟
AB1 EQU .4 ;输出数据
CLK1 EQU .0 ;输出时钟
#DEFINE IN1 GPIO,3 ;按键加
ORG 0000H
NOP
BSF STATUS,RP0
MOVLW B’00101000’ ;设GP5,GP3为输入
MOVWF TRISIO
BCF OPTION_REG,7 ;设GP5弱上拉
BSF WPU,5
MOVLW 0FFH
MOVWF OSCCAL ;设频率最好
BCF STATUS,RP0
MOVLW 00H
MOVWF ADDR ;访问EEPROM的00H
CALL READ ;读EEPROM
MOVWF CB
MOVF CB,W
SUBLW .8
BTFSC STATUS,C
CLRF CB
;********************************************
MAIN
;********************************************
CALL XIANSHI ;初次上电,显示,输出
CALL SHUCHU
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSS IN1 ;两键都松开,
GOTO $-1
BTFSS IN2 ;才能往下跳
GOTO $-4
MAI
;**********************************************
;;;;;;;;;;;刷新程序;;;;;;;;;;;;;
INCF SHUA
MOVF SHUA,W
XORLW 0FFH
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
INCF SHUA1
MOVF SHUA1,W
XORLW 010H
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA1
CALL XIANSHI
CALL SHUCHU
PPP
;*********************************************
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSC IN1 ;检测加一键是否按下?
GOTO DEC ;否,转去减一键检测
CALL DELAY ;去抖动
BTFSC IN1
GOTO DEC
XORLW .8
BTFSS STATUS,Z
GOTO
;1.Master Clear Enable 此项为MCLR<4脚>选项
; internal:内部自控 External:外部控制
;2.Oscillator:可设内部,外部震荡<internal,external>
; 如果选NO Clock则3脚作I/O口用,否则3脚作CLKOUT
;***********************************
include
P1 EQU 2CH
P2 EQU 2DH
Y1 EQU 20H ;Y1,Y2为去抖
Y2 EQU 21H ;动延时寄存器
ADDR EQU 23H ;EEPROM地址寄存器
DATE1 EQU 24H ;EEPROM数据寄存器
BIT EQU 25H
BIT1 EQU 26H
TUMP EQU 27H
TUMP1 EQU 28H
CB EQU 29H ;显示输出公用查表量
SHUA EQU 2AH ;刷新用
SHUA1 EQU 2BH ;刷新用
AB EQU .1 ;显示数据
CLK EQU .2 ;显示时钟
AB1 EQU .4 ;输出数据
CLK1 EQU .0 ;输出时钟
#DEFINE IN1 GPIO,3 ;按键加
ORG 0000H
NOP
BSF STATUS,RP0
MOVLW B’00101000’ ;设GP5,GP3为输入
MOVWF TRISIO
BCF OPTION_REG,7 ;设GP5弱上拉
BSF WPU,5
MOVLW 0FFH
MOVWF OSCCAL ;设频率最好
BCF STATUS,RP0
MOVLW 00H
MOVWF ADDR ;访问EEPROM的00H
CALL READ ;读EEPROM
MOVWF CB
MOVF CB,W
SUBLW .8
BTFSC STATUS,C
CLRF CB
;********************************************
MAIN
;********************************************
CALL XIANSHI ;初次上电,显示,输出
CALL SHUCHU
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSS IN1 ;两键都松开,
GOTO $-1
BTFSS IN2 ;才能往下跳
GOTO $-4
MAI
;**********************************************
;;;;;;;;;;;刷新程序;;;;;;;;;;;;;
INCF SHUA
MOVF SHUA,W
XORLW 0FFH
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
INCF SHUA1
MOVF SHUA1,W
XORLW 010H
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA1
CALL XIANSHI
CALL SHUCHU
PPP
;*********************************************
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSC IN1 ;检测加一键是否按下?
GOTO DEC ;否,转去减一键检测
CALL DELAY ;去抖动
BTFSC IN1
GOTO DEC
XORLW .8
BTFSS STATUS,Z
GOTO {D_L_技术支持_内容浏览}6
CLRF CB
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
INCF CB ;对查表量加一
CALL XIANSHI
CALL SHUCHU
BTFSS IN1
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
DEC MOVF CB,W
XORLW .0
BTFSS STATUS,Z ;是否减到0?
GOTO {D_L_技术支持_内容浏览}2 ;否,转去减一键检测
GOTO MAI ;是,不再减一
BTFSC IN2 ;减一键检测
GOTO MAI
CALL DELAY ;去抖动
BTFSC IN2
DECF CB ;对查表量减一
CALL XIANSHI
CALL SHUCHU
BTFSS IN2
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
;***************************************
DELAY;去抖动延时程序
MOVLW 0FFH
MOVWF Y1
M2 MOVLW 06FH
MOVWF Y2
M1 DECFSZ Y2
DECFSZ Y1
GOTO M2
RETURN
;**************************************
DELAY1 MOVLW 0FFH
MOVWF P1
Q2
MOVLW 0FFH
MOVWF P2
Q1
DECFSZ P2
GOTO Q1
DECFSZ P1
GOTO Q2
RETURN
;**************************************
XIANSHI;数码管显示
MOVF CB,W
CALL SHUMA
MOVWF TUMP
MOVLW .8
MOVWF BIT
LOOP BCF GPIO,CLK
BTFSC TUMP,0
BSF GPIO,AB
BTFSS TUMP,0
BCF GPIO,AB
RRF TUMP,F
BSF GPIO,CLK
DECFSZ BIT
GOTO LOOP
RETURN
;**************************************
MOVF CB,W
CALL CHU
MOVWF TUMP1
MOVLW .8
MOVWF BIT1
LOOP1 BCF GPIO,CLK1
BTFSC TUMP1,0
BSF GPIO,AB1
BTFSS TUMP1,0
BCF GPIO,AB1
RRF TUMP1,F
BSF GPIO,CLK1
DECFSZ BIT1
GOTO LOOP1
RETURN
;**************************************
SHUMA;数码管显示码
ADDWF 2,1
RETLW 001H
RETLW 037H
RETLW 042H
RETLW 012H
RETLW 034H
RETLW 018H
RETLW 008H
RETLW 033H
RETLW 000H
;*************************************
ADDWF 2,1
RETLW B’11111111’
RETLW B’11111110’
RETLW B’11111101’
RETLW B’11111011’
RETLW B’11110111’
RETLW B’11101111’
RETLW B’11011111’
RETLW B’10111111’
RETLW B’01111111’
;*************************************
; EEPROM读写程序
;*************************************
READ BSF STATUS,RP0
MOVF ADDR,W
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
RETURN
;*************************************
WRITE
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
MOVWF EEADR
MOVF DATE1,W
MOVWF EEDATA
BSF EECON1,WREN
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BCF STATUS,RP0
RETURN
;**************************************
END
CLRF CB
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
INCF CB ;对查表量加一
CALL XIANSHI
CALL SHUCHU
BTFSS IN1
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
DEC MOVF CB,W
XORLW .0
BTFSS STATUS,Z ;是否减到0?
GOTO
;1.Master Clear Enable 此项为MCLR<4脚>选项
; internal:内部自控 External:外部控制
;2.Oscillator:可设内部,外部震荡<internal,external>
; 如果选NO Clock则3脚作I/O口用,否则3脚作CLKOUT
;***********************************
include
P1 EQU 2CH
P2 EQU 2DH
Y1 EQU 20H ;Y1,Y2为去抖
Y2 EQU 21H ;动延时寄存器
ADDR EQU 23H ;EEPROM地址寄存器
DATE1 EQU 24H ;EEPROM数据寄存器
BIT EQU 25H
BIT1 EQU 26H
TUMP EQU 27H
TUMP1 EQU 28H
CB EQU 29H ;显示输出公用查表量
SHUA EQU 2AH ;刷新用
SHUA1 EQU 2BH ;刷新用
AB EQU .1 ;显示数据
CLK EQU .2 ;显示时钟
AB1 EQU .4 ;输出数据
CLK1 EQU .0 ;输出时钟
#DEFINE IN1 GPIO,3 ;按键加
ORG 0000H
NOP
BSF STATUS,RP0
MOVLW B’00101000’ ;设GP5,GP3为输入
MOVWF TRISIO
BCF OPTION_REG,7 ;设GP5弱上拉
BSF WPU,5
MOVLW 0FFH
MOVWF OSCCAL ;设频率最好
BCF STATUS,RP0
MOVLW 00H
MOVWF ADDR ;访问EEPROM的00H
CALL READ ;读EEPROM
MOVWF CB
MOVF CB,W
SUBLW .8
BTFSC STATUS,C
CLRF CB
;********************************************
MAIN
;********************************************
CALL XIANSHI ;初次上电,显示,输出
CALL SHUCHU
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSS IN1 ;两键都松开,
GOTO $-1
BTFSS IN2 ;才能往下跳
GOTO $-4
MAI
;**********************************************
;;;;;;;;;;;刷新程序;;;;;;;;;;;;;
INCF SHUA
MOVF SHUA,W
XORLW 0FFH
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA
INCF SHUA1
MOVF SHUA1,W
XORLW 010H
BTFSS STATUS,Z
GOTO PPP
CLRF SHUA1
CALL XIANSHI
CALL SHUCHU
PPP
;*********************************************
BSF STATUS,RP0
MOVLW B’00101000’
MOVWF TRISIO
BCF STATUS,RP0
BTFSC IN1 ;检测加一键是否按下?
GOTO DEC ;否,转去减一键检测
CALL DELAY ;去抖动
BTFSC IN1
GOTO DEC
XORLW .8
BTFSS STATUS,Z
GOTO {D_L_技术支持_内容浏览}6
CLRF CB
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
INCF CB ;对查表量加一
CALL XIANSHI
CALL SHUCHU
BTFSS IN1
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
DEC MOVF CB,W
XORLW .0
BTFSS STATUS,Z ;是否减到0?
GOTO {D_L_技术支持_内容浏览}2 ;否,转去减一键检测
GOTO MAI ;是,不再减一
BTFSC IN2 ;减一键检测
GOTO MAI
CALL DELAY ;去抖动
BTFSC IN2
DECF CB ;对查表量减一
CALL XIANSHI
CALL SHUCHU
BTFSS IN2
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
;***************************************
DELAY;去抖动延时程序
MOVLW 0FFH
MOVWF Y1
M2 MOVLW 06FH
MOVWF Y2
M1 DECFSZ Y2
DECFSZ Y1
GOTO M2
RETURN
;**************************************
DELAY1 MOVLW 0FFH
MOVWF P1
Q2
MOVLW 0FFH
MOVWF P2
Q1
DECFSZ P2
GOTO Q1
DECFSZ P1
GOTO Q2
RETURN
;**************************************
XIANSHI;数码管显示
MOVF CB,W
CALL SHUMA
MOVWF TUMP
MOVLW .8
MOVWF BIT
LOOP BCF GPIO,CLK
BTFSC TUMP,0
BSF GPIO,AB
BTFSS TUMP,0
BCF GPIO,AB
RRF TUMP,F
BSF GPIO,CLK
DECFSZ BIT
GOTO LOOP
RETURN
;**************************************
MOVF CB,W
CALL CHU
MOVWF TUMP1
MOVLW .8
MOVWF BIT1
LOOP1 BCF GPIO,CLK1
BTFSC TUMP1,0
BSF GPIO,AB1
BTFSS TUMP1,0
BCF GPIO,AB1
RRF TUMP1,F
BSF GPIO,CLK1
DECFSZ BIT1
GOTO LOOP1
RETURN
;**************************************
SHUMA;数码管显示码
ADDWF 2,1
RETLW 001H
RETLW 037H
RETLW 042H
RETLW 012H
RETLW 034H
RETLW 018H
RETLW 008H
RETLW 033H
RETLW 000H
;*************************************
ADDWF 2,1
RETLW B’11111111’
RETLW B’11111110’
RETLW B’11111101’
RETLW B’11111011’
RETLW B’11110111’
RETLW B’11101111’
RETLW B’11011111’
RETLW B’10111111’
RETLW B’01111111’
;*************************************
; EEPROM读写程序
;*************************************
READ BSF STATUS,RP0
MOVF ADDR,W
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
RETURN
;*************************************
WRITE
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
MOVWF EEADR
MOVF DATE1,W
MOVWF EEDATA
BSF EECON1,WREN
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BCF STATUS,RP0
RETURN
;**************************************
END
GOTO MAI ;是,不再减一
BTFSC IN2 ;减一键检测
GOTO MAI
CALL DELAY ;去抖动
BTFSC IN2
GOTO MAI
DECF CB ;对查表量减一
CALL XIANSHI
CALL SHUCHU
BTFSS IN2
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
;***************************************
DELAY;去抖动延时程序
MOVLW 0FFH
MOVWF Y1
M2 MOVLW 06FH
MOVWF Y2
M1 DECFSZ Y2
GOTO M1
DECFSZ Y1
GOTO M2
RETURN
;**************************************
DELAY1 MOVLW 0FFH
MOVWF P1
Q2
MOVLW 0FFH
MOVWF P2
Q1
DECFSZ P2
GOTO Q1
DECFSZ P1
GOTO Q2
RETURN
;**************************************
XIANSHI;数码管显示
MOVF CB,W
CALL SHUMA
MOVWF TUMP
MOVLW .8
MOVWF BIT
LOOP BCF GPIO,CLK
BTFSC TUMP,0
BSF GPIO,AB
BTFSS TUMP,0
BCF GPIO,AB
RRF TUMP,F
BSF GPIO,CLK
DECFSZ BIT
GOTO LOOP
RETURN
;**************************************
SHUCHU;输出处理
MOVF CB,W
CALL CHU
MOVWF TUMP1
MOVLW .8
MOVWF BIT1
LOOP1 BCF GPIO,CLK1
BTFSC TUMP1,0
BSF GPIO,AB1
BTFSS TUMP1,0
BCF GPIO,AB1
RRF TUMP1,F
BSF GPIO,CLK1
DECFSZ BIT1
GOTO LOOP1
RETURN
;**************************************
SHUMA;数码管显示码
ADDWF 2,1
RETLW 001H
RETLW 037H
RETLW 042H
RETLW 012H
RETLW 034H
RETLW 018H
RETLW 008H
RETLW 033H
RETLW 000H
;*************************************
CHU ;输出子程序
ADDWF 2,1
RETLW B’11111111’
RETLW B’11111110’
RETLW B’11111101’
RETLW B’11111011’
RETLW B’11110111’
RETLW B’11101111’
RETLW B’11011111’
RETLW B’10111111’
RETLW B’01111111’
;*************************************
; EEPROM读写程序
;*************************************
READ BSF STATUS,RP0
MOVF ADDR,W
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
RETURN
;*************************************
WRITE
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
MOVF ADDR,W
MOVWF EEADR
MOVF DATE1,W
MOVWF EEDATA
BSF EECON1,WREN
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BCF STATUS,RP0
RETURN
;**************************************
END
2 ;否,转去减一键检测
GOTO MAI ;是,不再减一
BTFSC IN2 ;减一键检测
GOTO MAI
CALL DELAY ;去抖动
BTFSC IN2
GOTO MAI
DECF CB ;对查表量减一
CALL XIANSHI
CALL SHUCHU
BTFSS IN2
GOTO $-1
MOVF CB,W
MOVWF DATE1
CALL WRITE
GOTO MAIN
;***************************************
DELAY;去抖动延时程序
MOVLW 0FFH
MOVWF Y1
M2 MOVLW 06FH
MOVWF Y2
M1 DECFSZ Y2
GOTO M1
DECFSZ Y1
GOTO M2
RETURN
;**************************************
DELAY1 MOVLW 0FFH
MOVWF P1
Q2
MOVLW 0FFH
MOVWF P2
Q1
DECFSZ P2
GOTO Q1
DECFSZ P1
GOTO Q2
RETURN
;**************************************
XIANSHI;数码管显示
MOVF CB,W
CALL SHUMA
MOVWF TUMP
MOVLW .8
MOVWF BIT
LOOP BCF GPIO,CLK
BTFSC TUMP,0
BSF GPIO,AB
BTFSS TUMP,0
BCF GPIO,AB
RRF TUMP,F
BSF GPIO,CLK
DECFSZ BIT
GOTO LOOP
RETURN
;**************************************
SHUCHU;输出处理
MOVF CB,W
CALL CHU
MOVWF TUMP1
MOVLW .8
MOVWF BIT1
LOOP1 BCF GPIO,CLK1
BTFSC TUMP1,0
BSF GPIO,AB1
BTFSS TUMP1,0
BCF GPIO,AB1
RRF TUMP1,F
BSF GPIO,CLK1
DECFSZ BIT1
GOTO LOOP1
RETURN
;**************************************
SHUMA;数码管显示码
ADDWF 2,1
RETLW 001H
RETLW 037H
RETLW 042H
RETLW 012H
RETLW 034H
RETLW 018H
RETLW 008H
RETLW 033H
RETLW 000H
;*************************************
CHU ;输出子程序
ADDWF 2,1
RETLW B’11111111’
RETLW B’11111110’
RETLW B’11111101’
RETLW B’11111011’
RETLW B’11110111’
RETLW B’11101111’
RETLW B’11011111’
RETLW B’10111111’
RETLW B’01111111’
;*************************************
; EEPROM读写程序
;*************************************
READ BSF STATUS,RP0
MOVF ADDR,W
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
RETURN
;*************************************
WRITE
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
MOVF ADDR,W
MOVWF EEADR
MOVF DATE1,W
MOVWF EEDATA
BSF EECON1,WREN
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BCF STATUS,RP0
RETURN
;**************************************
END