📄 temp_dis.asm
字号:
RRF TEMP2,1
RRF TEMP2,1
RRF TEMP2,1
RRF TEMP2,1
RRF TEMP2,1
RRF TEMP2,1 ;采样结果右移6位送TEMP2
MOVLW 03H
ANDWF TEMP2,1 ;屏蔽高6位
MOVF TEMP2,0
ADDWF TEMP1,0
MOVWF ADR_int
ADDWF ADR_int,0
MOVWF ADR
RETURN
;******************************上限修改子程序*******************************
Change_Max MOVLW 01H
MOVWF DISP_dig
MOVF MAX,0
MOVWF DISP_seg
CALL Display ;显示上限值个位
MOVLW 02H
MOVWF DISP_dig
MOVF MAX,0
MOVWF DISP_seg
SWAPF DISP_seg,1
CALL Display ;显示上限值十位
MOVLW 03H
MOVWF DISP_dig
MOVLW 00H
MOVWF DISP_seg
CALL Display ;显示上限值百位
MOVLW 04H
MOVWF DISP_dig
MOVLW 0CH
MOVWF DISP_seg
CALL Display ;最高位显示"H"
MOVF MAX,0
MOVWF MAX?_temp
LOP1 BTFSS PORTB,0 ;K1键松开?
GOTO LOP1 ;否,循环检测
CALL DELAY10 ;是,延时10ms
BTFSS PORTB,0 ;再次检测K1键是否松开?
GOTO LOP1 ;否,循环检测
BSF T1CON,0 ;是,TMR1开始计数,15s定时中断开始
MOVLW 1EH ;TMR1中断"30"次则自动跳出上下限值修改
MOVWF TMR1_count
LOP2 BTFSC PORTB,2 ;K3键按下?
GOTO LOP2_K4 ;否,检测K4键
CALL DELAY10 ;是,延时10ms
BTFSC PORTB,2 ;再次检测K3键是否按下?
GOTO LOP2_K4 ;否,检测K4键
GOTO LOP3 ;是,开始修改上限值十位
LOP2_K4 BTFSC PORTB,3 ;K4键按下?
GOTO LOP2_K1 ;否,检测K1
CALL DELAY10 ;是,延时10ms
BTFSC PORTB,3 ;再次检测K4键是否按下?
GOTO LOP2_K1 ;否,检测K1
GOTO LOP4 ;是,开始修改上限值个位
LOP2_K1 BTFSC PORTB,0 ;K1键按下?
GOTO LOP2 ;否,检测K3
CALL DELAY10 ;是,延时10ms
BTFSC PORTB,0 ;再次检测K1键是否按下?
GOTO LOP2 ;否,检测K3
BCF T1CON,0 ;关TMR1计数器,禁止中断
MOVF MAX?_temp,0 ;保存修改后的上限值
MOVWF MAX?
CALL DELAY30
CALL DELAY30
CALL DELAY30
GOTO NEXT1 ;跳出上下限修改
LOP3 BSF T1CON,0 ;TMR1开始计数,15ms定时中断开始
MOVLW 1EH ;TMR1中断"30"次则自动跳出上下限值修改
MOVWF TMR1_count
CALL DELAY30
CALL DELAY30
CALL DELAY30
CALL DELAY30
MOVLW 10H
ADDWF MAX?_temp,1 ;十位值加1
MOVF MAX?_temp,0
SUBLW 99H ;是否超出温度测量范围
BTFSC STATUS,0
GOTO LOP5 ;否,则转显示
MOVF MIN,0 ;是,则把下限值赋给上限值
MOVWF MAX?_temp
GOTO LOP5 ;转显示
LOP4 BSF T1CON,0 ;TMR1开始计数,15ms定时中断开始
MOVLW 1EH ;TMR1中断"30"次则自动跳出上下限值修改
MOVWF TMR1_count
CALL DELAY30
CALL DELAY30
CALL DELAY30
CALL DELAY30
MOVLW 01H
ADDWF MAX?_temp,1 ;个位值加1
MOVF MAX?_temp,0
ANDLW 0FH
SUBLW 09H
BTFSC STATUS,0 ;个位值是否大于9
GOTO LOP5 ;否,转显示
MOVLW 0F0H ;是,个位值清零
ANDWF MAX?_temp,1
MOVF MIN,0
SUBWF MAX?_temp,0 ;上限值是否低于下限值
BTFSC STATUS,0
GOTO LOP5 ;否,转显示
MOVF MIN,0 ;是,则把下限值赋给上限值
MOVWF MAX?_temp
GOTO LOP5 ;转显示
LOP5 MOVLW 01H
MOVWF DISP_dig
MOVF MAX?_temp,0
MOVWF DISP_seg
CALL Display ;显示个位
MOVLW 02H
MOVWF DISP_dig
MOVF MAX?_temp,0
MOVWF DISP_seg
SWAPF DISP_seg,1
CALL Display ;显示十位
GOTO LOP2
RETURN
;*******************************下限修改子程序****************************
Change_Min MOVLW 01H
MOVWF DISP_dig
MOVF MIN,0
MOVWF DISP_seg
CALL Display ;显示下限值个位
MOVLW 02H
MOVWF DISP_dig
MOVF MIN,0
MOVWF DISP_seg
SWAPF DISP_seg,1
CALL Display ;显示下限值十位
MOVLW 03H
MOVWF DISP_dig
MOVLW 00H
MOVWF DISP_seg
CALL Display ;显示下限值百位
MOVLW 04H
MOVWF DISP_dig
MOVLW 0DH
MOVWF DISP_seg
CALL Display ;最高位显示"L"
MOVF MIN,0
MOVWF MIN_temp
LOP6 BTFSS PORTB,1 ;K2键松开?
GOTO LOP6 ;否,循环检测
CALL DELAY10 ;是,延时10ms
BTFSS PORTB,1 ;再次检测K2是否松开
GOTO LOP6 ;否,循环检测
BSF T1CON,0 ;是,TMR1开始计数,15ms定时中断开始
MOVLW 1EH ;TMR1中断"30"次则自动跳出上下限值修改
MOVWF TMR1_count
LOP7 BTFSC PORTB,2 ;K3键是否按下?
GOTO LOP7_K4 ;否,检测K4键
CALL DELAY10 ;是,延时10ms
BTFSC PORTB,2 ;再次检测K3键是否按下?
GOTO LOP7_K4 ;否,检测K4键
GOTO LOP8 ;是,开始下限值十位修改
LOP7_K4 BTFSC PORTB,3 ;K4键是否按下?
GOTO LOP7_K2 ;否,检测K2键
CALL DELAY10 ;是,延时10ms
BTFSC PORTB,3 ;再次检测K4键是否按下?
GOTO LOP7_K2 ;否,检测K2键
GOTO LOP9 ;是,开始下限值个位修改
LOP7_K2 BTFSC PORTB,1 ;K2键是否按下?
GOTO LOP7 ;否,检测K3键
CALL DELAY10 ;是,延时10ms
BTFSC PORTB,1 ;再次检测K2键是否按下?
GOTO LOP7 ;否,检测K3键
BCF T1CON,0 ;是,关TMR1计数器,禁止中断
MOVF MIN_temp,0
MOVWF MIN ;保存修改后的下限值
CALL DELAY30
CALL DELAY30
CALL DELAY30
GOTO NEXT2 ;跳出上下限修改
LOP8 BSF T1CON,0 ;TMR1开始计数,15ms定时中断开始
MOVLW 1EH ;TMR1中断"30"次则自动跳出上下限值修改
MOVWF TMR1_count
CALL DELAY30
CALL DELAY30
CALL DELAY30
CALL DELAY30
MOVLW 10H
ADDWF MIN_temp,1 ;下限十位值加1
MOVF MAX,0
SUBWF MIN_temp,0
BTFSS STATUS,0 ;下限值比上限值大?
GOTO LOP10 ;否,转显示
MOVF MAX,0 ;是,则把上限值赋给下限值
MOVWF MIN_temp
GOTO LOP10 ;转显示
LOP9 BSF T1CON,0 ;TMR1开始计数,15ms定时中断开始
MOVLW 1EH ;TMR1中断"30"次则自动跳出上下限值修改
MOVWF TMR1_count
CALL DELAY30
CALL DELAY30
CALL DELAY30
CALL DELAY30
MOVLW 01H
ADDWF MIN_temp,1 ;个位值加1
MOVF MAX,0
SUBWF MIN_temp,0
BTFSC STATUS,0 ;下限值比上限值大?
GOTO LOP11 ;否,转下一步
MOVF MAX,0 ;是,则把上限值赋给下限值
MOVWF MIN_temp
GOTO LOP10
LOP11 MOVF MIN_temp,0
ANDLW 0FH
SUBLW 09H
BTFSC STATUS,0 ;个位值大于9
GOTO LOP10 ;否,转显示
MOVLW 0F0H ;是,个位值清零
ANDWF MIN_temp,1
LOP10 MOVLW 01H
MOVWF DISP_dig
MOVF MIN_temp,0
MOVWF DISP_seg
CALL Display ;显示个位
MOVLW 02H
MOVWF DISP_dig
MOVF MIN_temp,0
MOVWF DISP_seg
SWAPF DISP_seg,1
CALL Display ;显示十位
RETURN
;*******************************显示子程序********************************
Display BCF PORTC,4 ;置7219LORD端低电平,允许接收
MOVLW 08H
MOVWF DISP_count ;置循环次数为8
LP1 BCF PORTC,3 ;时钟端置低电平,准备转换
BTFSS DISP_dig,7 ;判断待传数据位是1吗?
GOTO PC5_CLR1 ;否,PORTC.5清零
BSF PORTC,5 ;是,PORTC.5置1
GOTO CLK_UP1 ;转CLK_UP1
PC5_CLR1 BCF PORTC,5 ;否,待传数据置0
NOP
CLK_UP1 BSF PORTC,3 ;给时钟上跳沿启动一位传输
RLF DISP_dig,1 ;下一位待传数据送Disp_dig第7位
DECFSZ DISP_count,1 ;是否传完本字节?
GOTO LP1 ;否,循环
MOVLW 08H ;是,传下一字节数据
MOVWF DISP_count
LP2 BCF PORTC,3 ;时钟端置低电平,准备转换
BTFSS DISP_seg,7 ;判断待传数据位是1吗?
GOTO PC5_CLR2 ;否,PORTC.5清零
BSF PORTC,5 ;是,PORTC.5置1
GOTO CLK_UP2 ;转CLK_UP2
PC5_CLR2 BCF PORTC,5 ;否,待传数据置0
NOP
CLK_UP2 BSF PORTC,3 ;给时钟上跳沿启动一位传输
RLF DISP_seg,1 ;下一位待传数据送Disp_seg第7位
DECFSZ DISP_count,1 ;是否传完本字节?
GOTO LP2 ;否,循环
BSF PORTC,4 ;是,置7219LORD端高电平,禁止接收
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -