📄 nuanfeng.asm
字号:
JMP RK21
JMP RK21
JMP RK22
RK20: BS P6,0 ;打开第一个继电器
BS D0+11,0
BC D0+11,1
RET
RK21: BS P6,0 ;打开2个
BS P6,1
BS D0+11,0
BS D0+11,1
RET
RK22: BC P6,0 ;关
BC P6,1
BC D0+11,0
BC D0+11,1
RET
RKEY3: MOV A,@7 ;时间设定 ,输出控制
MOV FTIMES,A ;刷新显示,并置闪烁标志0.5S闪烁7次
BS FLAG1,FTIME
BC FLAG1,FTEMP
RET
RKEY4: MOV A,@7 ;温度设定
MOV FTIMES,A ;刷新显示
BS FLAG1,FTEMP
BC FLAG1,FTIME
RET
RKEY5: MOV A,@7
MOV FTIMES,A ;刷新显示
JBS FLAG1,FTIME
JMP RKEY5TEMP
INC STIME ;时间加1,家到15为0,刚好循环
;AND A,@0X0F
;MOV B,A
;MOV A,STIME
;AND A,@0XF0 ;保护高4位
;XOR A,B
;MOV STIME,A
RET
RKEY5TEMP:
MOV A,@7
MOV FTIMES,A
JBS FLAG1,FTEMP
JMP NOABLESET
INC STEMP ;温度设定值加1
MOV A,STEMP ;
SUB A,@80
JBC R3,C
RET
MOV A,@0
MOV STEMP,A
RET
RKEY6: MOV A,@7
MOV FTIMES,A
JBS FLAG1,FTIME
JMP RKEY6TEMP
DEC STIME ;时间-1,-到0为15,刚好循环
;AND A,@0X0F
;MOV B,A
;MOV A,STIME
;AND A,@0XF0 ;保护高4位
;XOR A,B
;MOV STIME,A
RET
RKEY6TEMP:
MOV A,@7
MOV FTIMES,A
JBS FLAG1,FTEMP
JMP NOABLESET
DEC STEMP ;温度设定值加1
MOV A,STEMP ;
SUB A,@0
JBS R3,C
RET
MOV A,@80
MOV STEMP,A
RET
RKEY7: ;BC FLAG1,FTIME
;BC FLAG1,FTEMP
JBS FLAG1,FKO
JMP RKEY7OFF
BC FLAG1,FKO ;关
MOV A,@15
MOV STIME,A ;默认,温度和时间设置
MOV A,@80
MOV STEMP,A
BS P6,JDQ1
BS P6,JDQ2
RET
RKEY7OFF:BS FLAG1,FKO ;开
BS P6,FS ;打开风扇
RET
NOABLESET: BC FLAG,FLED
BC FLAG1,FTIME
BC FLAG1,FTEMP
DKEYRET: BC RKEY,7 ;清楚有按键 标志
RET
;==============================================================================================
;初始化程序积存器
;==============================================================================================
INIT: MOV A,@0B00000110 ;1:128:,
CONTW ;预分频给TCC,内部时钟触发,不允许中断
MOV A,@0X0
IOW P5 ;输出并清0
CLR P5
MOV A,@0X0 ;输出并清0
IOW P6
CLR P6
;MOV A,@0X0FF
;IOW IOCB ;关闭内部下拉
;MOV A,@0
;IOW IOCC ;关闭集电极开路
;MOV A,@0XFF
;IOW IOCD ;关上拉
MOV A,@0X0 ;0X80程序调好再使能
IOW IOCE ;使能看门狗,P60为普通I/O口
MOV A,@1
IOW IOCF ;允许TCC中断
CLR TCC
CLR FTIMES
MOV A,@7
MOV R250MS,A
MOV A,@2
MOV R66MS,A
MOV A,@10
MOV R200MS,A
CLR RNTSTC4
MOV A,@2
MOV R05S,A
MOV A,@120
MOV R1M,A
MOV A,@30
MOV R30M,A
MOV R15S,A
CLR FLAG
clr flag1
MOV A,@15 ;默认时间温度设置
MOV STEMP,A
MOV A,@80
MOV STEMP,A
ENI
;===================================================================================
;上电开始,初始化LCD,并清除所有显示单元
;===================================================================================
CLRLCD:
BS 6,CS
BS 6,WR
BS 6,DATA
MOV A,@4
MOV RX,A ;COMMAND MODE
CALL SENDMODE
MOV A,@1
MOV RX,A ;SYS EN
CALL SENDCOMMAND
MOV A,@3
MOV RX,A ;LCD ON
CALL SENDCOMMAND
MOV A,@0X29
MOV RX,A ;BIAS 1/3,4 COMMONS
CALL SENDCOMMAND
MOV A,@5
MOV RX,A
CALL SENDMODE
MOV A,@0X0
MOV RX,A
CALL SENDADDRESS
MOV A,@12
MOV DCNT2,A
MOV A,@D0
MOV R4,A
NEXT1:
MOV A,@0
MOV RX,A
MOV R0,A
INC R4
CALL SENDDATA
DJZ DCNT2
JMP NEXT1
RET
;===============================================================================================
;没66MS作一次AD转换,按键检测,10K,NTS轮讯
;===============================================================================================
MAIN_AD: JBS FLAG,F33MS
RET
BC FLAG,F33MS
DJZ R66MS
RET
MOV A,@2
MOV R66MS,A
MOV A,ADID
XOR A,@0
JBS R3,Z
JMP MA10K
MOV A,@1
MOV ADID,A
CALL ADKEY
RET
MA10K: MOV A,ADID
XOR A,@1
JBS R3,Z
JMP MADNTS
MOV A,@2
MOV ADID,A
CALL AD10K
RET
MADNTS: CALL ADNTS
MOV A,@0
MOV ADID,A
RET
;==================================================================================================
;利用AD转换做按键检测
;==================================================================================================
ADKEY: DISI ;关中断
MOV A,TCC
MOV RTCC,A
;CLR TCC ;清TCC,应放在充电之前,放在这里起修正作用,
MOV A,@0B00000001 ;设置总允许中断,内部记数1:4
CONTW
MOV A,@0B00000110
IOW P5 ;P50,3输出,其他输入
;nop ;休整TCC,使TCC的高字节刚好是键值1~7
;nop
;nop
;nop
;BC P5,KEY
CLR TCC
BS P5,KEY
JBS P5,R10K
JMP $-1
MOV A,TCC
swapa tcc
and a,@0xf
sub a,tcc
;MOV A,TCC
MOV RKEYTC,A
CALL FANGDIAN0
MOV A,@0X14-5 ;80+5>TCC>14-5有按键
SUB A,RKEYTC
JBS R3,C
JMP DKEYRET
MOV A,@0X90;7C+7
SUB A,RKEYTC
JBC R3,C
JMP DKEYRET
SWAPA RKEYTC
AND A,@0X0F
MOV B,A
BC R3,C
RLC B ;高位*2
DEC B ;再减去2
DEC B
BS B,0;保证b!=0
DEC RKEYTC
DJZ B
JMP $-2
;MOV A,RKEYTC ;没必要保护
;SUB A,@0X7F
;JBC R3,C
;JMP DETKEY
;MOV A,@0X7F
;MOV RKEYTC,A
DETKEY: SWAPA RKEYTC
AND A,@0XF
MOV RKEYTC,A;键值
jmp readkey
;==================================================================================================
;利用AD转换做10K标准电阻检测
;==================================================================================================
AD10K: DISI ;关中断
MOV A,TCC
MOV RTCC,A
MOV A,@0B00000001 ;设置总允许中断,内部记数1:4
CONTW
BC P5,2 ;放电
MOV A,@0B11110011
IOW P5 ;P52,3输出,其他输入
BC P5,R10K
CLR TCC
BS P5,R10K
JBS P5,NTS
JMP $-1
MOV A,TCC
MOV B,A
CALL FANGDIAN0
MOV A,R10KTC3
MOV R10KTC4,A
MOV A,R10KTC2
MOV R10KTC3,A
MOV A,R10KTC1
MOV R10KTC2,A
MOV A,B
MOV R10KTC1,A
MOV A,RTCC
MOV TCC,A
D10KRET: RET
;==================================================================================================
;利用AD转换做热敏电阻检测
;==================================================================================================
ADNTS: DISI ;关中断
MOV A,TCC
MOV RTCC,A
MOV A,@0B00000001 ;设置总允许中断,内部记数1:4
CONTW
MOV A,@0B11110101
IOW P5 ;P51,3输出,其他输入
BC P5,NTS
CLR TCC
BS P5,NTS
JBS P5,R10K
JMP $-1
MOV A,TCC ;程序可以测到27K左右,TCC益处
MOV B,A
CALL FANGDIAN0
MOV A,RNTSTC3
MOV RNTSTC4,A
MOV A,RNTSTC2
MOV RNTSTC3,A
MOV A,RNTSTC1
MOV RNTSTC2,A
MOV A,B
MOV RNTSTC1,A
MOV A,RTCC
MOV TCC,A
;==========================================================================================
PROCESS: MOV A,RNTSTC4 ;测试到4个以后就做处理,程序开始要做清零初始化
JBC R3,Z
RET
MOV A,@RNTSTC1
MOV R4,A
CALL AVERAGE
MOV A,R_ADL
MOV DIV1,A
MOV A,@10
MOV DCNT1,A
CLR DIV2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -