📄 4.src
字号:
MOV A,KeyV
CJNE A,#02H,?C0022
JB KeyTF,?C0022
; TMSetV = TMSetV - 1; //下调温度
; SOURCE LINE # 192
DEC TMSetV
?C0022:
; if (TMSetV <= -55) //限制温度上下限
; SOURCE LINE # 193
SETB C
MOV A,TMSetV
XRL A,#080H
SUBB A,#049H
JNC ?C0023
; TMSetV = -55;
; SOURCE LINE # 194
MOV TMSetV,#0C9H
?C0023:
; if (TMSetV >= 125)
; SOURCE LINE # 195
CLR C
MOV A,TMSetV
XRL A,#080H
SUBB A,#0FDH
JC ?C0020
; TMSetV = 125;
; SOURCE LINE # 196
MOV TMSetV,#07DH
; }
; SOURCE LINE # 197
?C0020:
; if ((!KeyTF) && (IntNum3 == 0)) KeyTF = 1; //当键盘处于可用时,锁定
; SOURCE LINE # 198
JB KeyTF,?C0013
MOV A,IntNum3
JNZ ?C0013
SETB KeyTF
; }
; SOURCE LINE # 199
?C0013:
;
; if (KeySETDown) //在2秒内按下了SET则计中断发生次数用于长按SET时计时用
; SOURCE LINE # 201
JNB KeySETDown,?C0026
; IntNum = IntNum + 1;
; SOURCE LINE # 202
INC IntNum
?C0026:
; if (IntNum > 55) //中断发生了55次时(大约1.2秒)75为1.5秒左右
; SOURCE LINE # 203
MOV A,IntNum
SETB C
SUBB A,#037H
JC ?C0009
; {
; SOURCE LINE # 204
; IntNum = 0;
; SOURCE LINE # 205
MOV IntNum,#00H
; KeySETDown = 0;
; SOURCE LINE # 206
CLR KeySETDown
; if (KSDNum == 55) //如一直长按了SET1.2秒左右
; SOURCE LINE # 207
MOV A,KSDNum
XRL A,#037H
JNZ ?C0028
; {
; SOURCE LINE # 208
; RelayOutPort = 1; //关闭继电器输出 1
; SOURCE LINE # 209
SETB RelayOutPort
; PowTF = 1; //电源标识关 1
; SOURCE LINE # 210
SETB PowTF
; LEDOneC = 0;
; SOURCE LINE # 211
CLR LEDOneC
; LEDTwoC = 0;
; SOURCE LINE # 212
CLR LEDTwoC
; LEDThreeC = 0;
; SOURCE LINE # 213
CLR LEDThreeC
; LEDPort = 0xBF; //显示"--"
; SOURCE LINE # 214
MOV P0,#0BFH
; Delay_4s(); //延时
; SOURCE LINE # 215
LCALL Delay_4s
; LEDOneC = 1;
; SOURCE LINE # 216
SETB LEDOneC
; LEDTwoC = 1; //关显示 1 1 1
; SOURCE LINE # 217
SETB LEDTwoC
; LEDThreeC = 1;
; SOURCE LINE # 218
SETB LEDThreeC
; Delay_4s();
; SOURCE LINE # 219
LCALL Delay_4s
; IntNum = 0;
; SOURCE LINE # 220
MOV IntNum,#00H
; IntNum2 = 0;
; SOURCE LINE # 221
MOV IntNum2,#00H
; IntNum3 = 0;
; SOURCE LINE # 222
MOV IntNum3,#00H
; }
; SOURCE LINE # 223
?C0028:
; KSDNum = 0;
; SOURCE LINE # 224
MOV KSDNum,#00H
; }
; SOURCE LINE # 225
; }
; SOURCE LINE # 226
?C0009:
; KeyV = 0;
; SOURCE LINE # 227
MOV KeyV,#00H
; TempKeyV = 0; //清空变量准备下次键扫描
; SOURCE LINE # 228
MOV TempKeyV,#00H
;
; if (!PowTF)
; SOURCE LINE # 230
JB PowTF,?C0038
; {
; SOURCE LINE # 231
; InitDS1820(); //初始化
; SOURCE LINE # 232
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 233
LCALL ROMDS1820
; TMVDS1820(); //温度转换指令
; SOURCE LINE # 234
LCALL TMVDS1820
;
; Delay_510();
; SOURCE LINE # 236
LCALL Delay_510
; Delay_510(); //延时等待转换完成
; SOURCE LINE # 237
LCALL Delay_510
;
; InitDS1820(); //初始化
; SOURCE LINE # 239
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 240
LCALL ROMDS1820
; TMRDS1820(); //读出温度指令
; SOURCE LINE # 241
LCALL TMRDS1820
; ReadDS1820(); //读出温度值
; SOURCE LINE # 242
LCALL ReadDS1820
;
; V2ToV(); //转换显示值
; SOURCE LINE # 244
LCALL V2ToV
; if (TMV > TMSetV) //根据采集到的温度值控制继电器
; SOURCE LINE # 245
SETB C
MOV A,TMSetV
XRL A,#080H
MOV R0,A
MOV A,TMV
XRL A,#080H
SUBB A,R0
JC ?C0030
; {
; SOURCE LINE # 246
; RelayOutPort = 0;
; SOURCE LINE # 247
CLR RelayOutPort
; }
; SOURCE LINE # 248
SJMP ?C0031
?C0030:
; else
; {
; SOURCE LINE # 250
; RelayOutPort = 1;
; SOURCE LINE # 251
SETB RelayOutPort
; }
; SOURCE LINE # 252
?C0031:
;
; if (SetTF) IntNum2 = IntNum2 + 1; //用于闪烁计数
; SOURCE LINE # 254
JNB SetTF,?C0032
INC IntNum2
?C0032:
; if (IntNum2 > 50 ) IntNum2 = 0;
; SOURCE LINE # 255
MOV A,IntNum2
SETB C
SUBB A,#032H
JC ?C0033
MOV IntNum2,#00H
?C0033:
; if (KeyTF) IntNum3 = IntNum3 + 1; //用于防止按键连按
; SOURCE LINE # 256
JNB KeyTF,?C0034
INC IntNum3
?C0034:
; if (IntNum3 > 25)
; SOURCE LINE # 257
MOV A,IntNum3
SETB C
SUBB A,#019H
JC ?C0035
; {
; SOURCE LINE # 258
; IntNum3 = 0;
; SOURCE LINE # 259
MOV IntNum3,#00H
; KeyTF = 0;
; SOURCE LINE # 260
CLR KeyTF
; }
; SOURCE LINE # 261
?C0035:
;
; if ((SetTF) && (IntNum2 < 25)) goto InitEnd; //计数在后半段时显示
; SOURCE LINE # 263
JNB SetTF,?C0036
MOV A,IntNum2
CLR C
SUBB A,#019H
JC ?C0038
?C0036:
; LEDPort = LED_One;
; SOURCE LINE # 264
MOV P0,LED_One
; LEDOneC = 0;
; SOURCE LINE # 265
CLR LEDOneC
; Delay_510();
; SOURCE LINE # 266
LCALL Delay_510
; LEDOneC = 1; //显示百位数
; SOURCE LINE # 267
SETB LEDOneC
; LEDPort = LED_Two;
; SOURCE LINE # 268
MOV P0,LED_Two
; LEDTwoC = 0;
; SOURCE LINE # 269
CLR LEDTwoC
; Delay_510();
; SOURCE LINE # 270
LCALL Delay_510
; LEDTwoC = 1; //显示十位数
; SOURCE LINE # 271
SETB LEDTwoC
; LEDPort = LED_Three;
; SOURCE LINE # 272
MOV P0,LED_Three
; LEDThreeC = 0;
; SOURCE LINE # 273
CLR LEDThreeC
; Delay_510();
; SOURCE LINE # 274
LCALL Delay_510
; LEDThreeC = 1; //显示个位数
; SOURCE LINE # 275
SETB LEDThreeC
; }
; SOURCE LINE # 276
; InitEnd:;
; SOURCE LINE # 277
?KeyAndDis_Time0?InitEnd:
; }
; SOURCE LINE # 278
?C0038:
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF KeyAndDis_Time0
;
; void V2ToV(void) //数值转换
RSEG ?PR?V2ToV?4
V2ToV:
USING 0
; SOURCE LINE # 280
; {
; SOURCE LINE # 281
; TLV = TLV >> 4;
; SOURCE LINE # 282
MOV A,TLV
SWAP A
ANL A,#0FH
MOV TLV,A
; THV = THV << 4; //读出的高低位数值移位
; SOURCE LINE # 283
MOV A,THV
SWAP A
ANL A,#0F0H
MOV THV,A
; TMV = TLV | THV; //合并高低位放入TM为实际温度值
; SOURCE LINE # 284
ORL A,TLV
MOV TMV,A
; Sign = 0;
; SOURCE LINE # 285
CLR A
MOV Sign,A
; if (SetTF || !Key_SET)
; SOURCE LINE # 286
JB SetTF,?C0040
JB Key_SET,?C0039
?C0040:
; Sign = TMSetV >> 7; //取符号
; SOURCE LINE # 287
MOV A,TMSetV
MOV R0,#07H
?C0074:
MOV C,ACC.7
RRC A
DJNZ R0,?C0074
MOV Sign,A
SJMP ?C0041
?C0039:
; else
; Sign = TMV >> 7;
; SOURCE LINE # 289
MOV A,TMV
MOV R0,#07H
?C0075:
MOV C,ACC.7
RRC A
DJNZ R0,?C0075
MOV Sign,A
?C0041:
;
; if (Sign)
; SOURCE LINE # 291
MOV A,Sign
JZ ?C0042
; {
; SOURCE LINE # 292
; if (SetTF || !Key_SET)
; SOURCE LINE # 293
JB SetTF,?C0044
JB Key_SET,?C0043
?C0044:
; {
; SOURCE LINE # 294
; LED_One = (~(TMSetV-1)) / 100; //SET状态下显示设定值
; SOURCE LINE # 295
MOV A,TMSetV
; LED_Two = ((~(TMSetV-1)) - LED_One * 100)/10;
; SOURCE LINE # 296
; LED_Three = (~(TMSetV-1)) - LED_One * 100 - LED_Two * 10;
; SOURCE LINE # 297
; }
; SOURCE LINE # 298
SJMP ?C0076
?C0043:
; else
; {
; SOURCE LINE # 300
; LED_One = (~(TMV-1)) / 100; //转换百位值
; SOURCE LINE # 301
MOV A,TMV
?C0076:
DEC A
CPL A
MOV R7,A
MOV B,#064H
LCALL ?C?SCDIV
MOV LED_One,A
; LED_Two = ((~(TMV-1)) - LED_One * 100)/10;
; SOURCE LINE # 302
MOV B,#064H
MUL AB
MOV R6,A
CLR C
MOV A,R7
SUBB A,R6
; LED_Three = (~(TMV-1)) - LED_One * 100 - LED_Two * 10;
; SOURCE LINE # 303
; }
; SOURCE LINE # 304
; }
; SOURCE LINE # 305
SJMP ?C0078
?C0042:
; else
; {
; SOURCE LINE # 307
; if (SetTF || !Key_SET)
; SOURCE LINE # 308
JB SetTF,?C0048
JB Key_SET,?C0047
?C0048:
; {
; SOURCE LINE # 309
; LED_One = (TMSetV) / 100; //SET状态下显示设定值
; SOURCE LINE # 310
MOV A,TMSetV
MOV B,#064H
LCALL ?C?SCDIV
MOV LED_One,A
; LED_Two = (TMSetV - LED_One * 100)/10;
; SOURCE LINE # 311
MOV B,#064H
MUL AB
MOV R7,A
CLR C
MOV A,TMSetV
SUBB A,R7
?C0077:
; LED_Three = TMSetV - LED_One * 100 - LED_Two * 10;
; SOURCE LINE # 312
; }
; SOURCE LINE # 313
SJMP ?C0078
?C0047:
; else
; {
; SOURCE LINE # 315
; LED_One = (TMV) / 100; //转换百位值
; SOURCE LINE # 316
MOV A,TMV
MOV B,#064H
LCALL ?C?SCDIV
MOV LED_One,A
; LED_Two = (TMV - LED_One * 100)/10;
; SOURCE LINE # 317
MOV B,#064H
MUL AB
MOV R7,A
CLR C
MOV A,TMV
SUBB A,R7
?C0078:
MOV R7,A
MOV B,#0AH
LCALL ?C?SCDIV
MOV LED_Two,A
; LED_Three = TMV - LED_One * 100 - LED_Two * 10;
; SOURCE LINE # 318
MOV B,#0AH
MUL AB
MOV R6,A
CLR C
MOV A,R7
SUBB A,R6
MOV LED_Three,A
; }
; SOURCE LINE # 319
; }
; SOURCE LINE # 320
?C0046:
;
; //转LED字段
; if (LED_One) //超过百时十位的处理
; SOURCE LINE # 323
MOV A,LED_One
JZ ?C0050
; LED_Two = LEDDis[LED_Two];
; SOURCE LINE # 324
SJMP ?C0079
?C0050:
; else
; {
; SOURCE LINE # 326
; if (LED_Two == 0)
; SOURCE LINE # 327
MOV A,LED_Two
JNZ ?C0052
; LED_Two = LEDDis[10];
; SOURCE LINE # 328
MOV DPTR,#LEDDis+0AH
SJMP ?C0080
?C0052:
; else
; LED_Two = LEDDis[LED_Two];
; SOURCE LINE # 330
?C0079:
MOV R7,LED_Two
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,#LOW (LEDDis)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (LEDDis)
ADDC A,R6
MOV DPH,A
CLR A
?C0080:
MOVC A,@A+DPTR
MOV LED_Two,A
; }
; SOURCE LINE # 331
?C0051:
; if (Sign)
; SOURCE LINE # 332
MOV A,Sign
JZ ?C0054
; LED_One = LEDDis[11];
; SOURCE LINE # 333
MOV DPTR,#LEDDis+0BH
SJMP ?C0081
?C0054:
; else
; {
; SOURCE LINE # 335
; if (LED_One == 0)
; SOURCE LINE # 336
MOV A,LED_One
JNZ ?C0056
; LED_One = LEDDis[10];
; SOURCE LINE # 337
MOV DPTR,#LEDDis+0AH
SJMP ?C0082
?C0056:
; else
; LED_One = LEDDis[LED_One];
; SOURCE LINE # 339
MOV R7,LED_One
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,#LOW (LEDDis)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (LEDDis)
ADDC A,R6
MOV DPH,A
?C0081:
CLR A
?C0082:
MOVC A,@A+DPTR
MOV LED_One,A
; }
; SOURCE LINE # 340
?C0055:
; LED_Three = LEDDis[LED_Three];
; SOURCE LINE # 341
MOV R7,LED_Three
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,#LOW (LEDDis)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (LEDDis)
ADDC A,R6
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV LED_Three,A
; }
; SOURCE LINE # 342
RET
; END OF V2ToV
;
; void InitDS1820(void) //初始化DS1820
RSEG ?PR?InitDS1820?4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -