📄 lengnuanfengji.asm
字号:
JP TRET
LDIA B'00000110' ;选择AN6通道,转换时钟为系统时钟的2分频
CALL AD_CONVERT
;********************************************************************
;********************************************************************
LD A,ADDATA
ADDR TMPL
SZB FLAGS,C
INCR TMPH
INCR ADCNT
LDIA 08H
SUBA ADCNT ;检测8次AD,求平均值
SNZB FLAGS,Z
JP TRET
CLR ADCNT
CLRB FLAGS,C
RRCR TMPH
RRCR TMPL
CLRB FLAGS,C
RRCR TMPH
RRCR TMPL
CLRB FLAGS,C
RRCR TMPH
RRCR TMPL
LDIA 9FH ;0BAH
SUBA TMPL
LDIA 9FH ;0BAH
SZB FLAGS,C
LD TMPL,A
LDIA 3AH ;当前A/D值-3AH
SUBR TMPL
LDIA 65H
SNZB FLAGS,C
LD TMPL,A
CALL TABLE_CC
LD TMP_NTC,A
SZB WORK,CC_FF
CALL TABLE_FF
LD RAM_DSP,A
CLR TMPH
CLR TMPL
NTC_MAX_CHK:
JP TRET
;********************************************************************
;***************计时程序*********************************************
TIMING:
SNZB WORK,T1S_EN
JP TRET
CLRB WORK,T1S_EN
INCR TIME_3S
LDIA 06H
SUBA TIME_3S
SZB FLAGS,C
CLRB FLAG,SET_MODE
SNZB WORK,ON_OFF
JP TRET
SNZB WORK,TIM_EN
JP TRET
LDIA 0FH
ANDR TIMER
SZB FLAGS,Z
JP TRET
SZDECR TIMEL_30MIN
JP TRET
SZDECR TIMEH_30MIN
JP TRET
CALL INIT_30_MIN
SZDECR TIMER
JP TRET
CLR WORK
CLR PWR_CNT
JP TRET
;********************************************************************
;********************************************************************
INIT_1_SEC:
LDIA 08H
LD TIMEH_1S,A
LDIA 0D0H
LD TIMEL_1S,A
RET 00H
;********************************************************************
;********************************************************************
INIT_30_SEC:
LDIA D'60'
LD TIMEL_30S,A
RET 00H
;********************************************************************
;********************************************************************
INIT_30_MIN:
LDIA 0FH
LD TIMEH_30MIN,A
LDIA 0BH
LD TIMEL_30MIN,A
RET 00H
;********************************************************************
;*************蜂鸣器驱动程序*****************************************
BEEP:
LD A,RBEEP
SZB FLAGS,Z
JP BEEP_OFF
LDIA 01H
SUBA RBEEP
SZB FLAGS,Z
JP BPBP
CLRB P2_RAM,BUZ
JP BP_CNT
BPBP:
LDIA 04H
XORR P2_RAM
BP_CNT:
SZDECR BEEPL
JP BEEP_BACK
SZDECR BEEPH
JP BEEP_BACK
LDIA 02H
LD BEEPH,A
LDIA 00H
LD BEEPL,A
DECR RBEEP
BEEP_OFF:
CLRB P2_RAM,BUZ
BEEP_BACK:
LDIA 03H
ORR P2_RAM ;关闭显示
LD A,P2_RAM
LD P2,A
SETB P0,LED_COM
RET 00H
;********************************************************************
;********************************************************************
;===============A/D转换启动子程序====================================
;********************************************************************
;********************************************************************
AD_CONVERT:
LD ADCON,A
NOP
NOP
SETB ADCON,CONV
NOP
CLRB ADCON,CONV
WAIT:
SZB ADCON,EOCB ;等待转换结束
JP WAIT
RET 00H
;********************************************************************
;*************按键扫描程序*******************************************
KSCAN:
LDIA B'11111111'
WRSR P1CON
LDIA 0FFH
LD P0,A
LDIA 03H
ORR P2
NOP
NOP
NOP
CLR KCOUNT
CLRB P0,4
NOP
NOP
NOP
NOP
INCR KCOUNT
SNZB P1,5
JP KHAVE
INCR KCOUNT
SNZB P1,6
JP KHAVE
INCR KCOUNT
SNZB P1,7
JP KHAVE
LDIA 08H
SUBA KCOUNT
SZB FLAGS,C
JP KEY_NO
CLRB P0,5
NOP
NOP
NOP
NOP
INCR KCOUNT
SNZB P1,5
JP KHAVE
INCR KCOUNT
SNZB P1,6
JP KHAVE
INCR KCOUNT
SNZB P1,7
JP KHAVE
CLRB P0,7
NOP
NOP
NOP
NOP
INCR KCOUNT
SNZB P1,7
JP KHAVE
INCR KCOUNT
SNZB P1,6
JP KHAVE
INCR KCOUNT
SNZB P1,5
JP KHAVE
KEY_NO:
CLR KEYF
CLR KCOUNT
KEY_FLASH:
LD A,KCOUNT
LD KEY_OLD,A
CLR KCNTL
JP TRET
;********************************************************************
;********************************************************************
KHAVE:
LD A,KCOUNT
SUBA KEY_OLD
SNZB FLAGS,Z
JP KEY_FLASH
INCR KCNTL
LDIA 10H
SUBA KCNTL
SNZB FLAGS,C
JP TRET
CLR KCNTL
SZB KEYF,PRESS
JP TRET
SETB KEYF,PRESS
SETB KEYF,CLICK
JP TRET
;********************************************************************
;********************℃和℉的进制转换*********************************
;********************************************************************
CC_TO_FF:
SNZB FLAG,CF_EN
JP TRET
CLRB FLAG,CF_EN
;--------------------------------------------------------------------
LD A,SET_CC ;设置的温度转换为十进制
SZB WORK,CC_FF ;用于设置值的十进制显示
LD A,SET_FF
LD ACCCL,A
CALL BIN_TO_BCD
LD A,R2
LD RAM_DSP,A
;--------------------------------------------------------------------
LD A,SET_CC ;调整摄氏和华氏设置值
SZB WORK,CC_FF
LD A,SET_FF
LD ACCCL,A
;--------------------------------------------------------------------
CALCUL1:
LDIA D'0'
SZB WORK,CC_FF
LDIA D'32'
SUBR ACCCL
LDIA 09H
SZB WORK,CC_FF
LDIA 05H
CALL AD_MUL
;--------------------------------------------------------------------
CALCUL2:
LDIA 05H
SZB WORK,CC_FF
LDIA 09H
CALL AD_DIV
;--------------------------------------------------------------------
CALCUL3:
LDIA D'32'
SZB WORK,CC_FF
LDIA D'0'
ADDA ACCCL
SZB WORK,CC_FF
JP BCD_TO_CC
BCD_TO_FF:
LD SET_FF,A
JP CALCUL4
BCD_TO_CC:
LD SET_CC,A
;--------------------------------------------------------------------
CALCUL4:
LD A,SET_CC ;设置的温度转换为十进制
LD ACCCL,A ;方便与NTC的实际温度比较
CALL BIN_TO_BCD ;二进制转十进制
LD A,R2
LD TMP_SET,A
JP TRET
;********************************************************************
;********************************************************************
START:
CLRWDT
LDIA B'00000000'
WRSR PRESCAL
LDIA B'00000010'
LD COMPCON,A ;允许P1口上拉电阻有效
LDIA 0FFH
LD P0,A
LD P1,A
CLR P2
CLR P3
LDIA B'01000000' ;置I/O口线输入输出状态
WRSR P0CON
LDIA B'00000000'
WRSR P1CON
LDIA B'01000000'
WRSR P2CON
;********************************************************************
;****************所有通用RAM清零*************************************
CLR_RAM:
LDIA 010H
LD FSR,A
CLR_LOOP:
CLR IAR
SETB FSR,4
SZINCR FSR
JP CLR_LOOP
;********************************************************************
;****************初始化寄存器****************************************
INIT_RAM:
CLRWDT
LDIA 02H
LD RBEEP,A
LD BEEPH,A
LDIA D'68'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -