📄 tcmain.src
字号:
; TL0=0xDF; //设定时值为20000us(20ms)
; SOURCE LINE # 197
MOV TL0,#0DFH
;
; LEDPort = 0xFF;
; SOURCE LINE # 199
MOV P0,#0FFH
; if (!Key_UP)
; SOURCE LINE # 200
JB P3_4,?C0017
; KeyV = 1;
; SOURCE LINE # 201
MOV KeyV,#01H
?C0017:
; if (!Key_DOWN)
; SOURCE LINE # 202
JB P3_5,?C0018
; KeyV = 2;
; SOURCE LINE # 203
MOV KeyV,#02H
?C0018:
; if (!Key_SET)
; SOURCE LINE # 204
JB P3_6,?C0019
; KeyV = 3;
; SOURCE LINE # 205
MOV KeyV,#03H
?C0019:
; //KeySETDowning = 0; //清除
; if (KeyV != 0) //有键按下
; SOURCE LINE # 207
MOV A,KeyV
JNZ $ + 5H
LJMP ?C0020
; {
; SOURCE LINE # 208
; Delay_10ms(); //延时防抖 按下10ms再测
; SOURCE LINE # 209
LCALL Delay_10ms
; if (!Key_UP)
; SOURCE LINE # 210
JB P3_4,?C0021
; TempKeyV = 1;
; SOURCE LINE # 211
MOV TempKeyV,#01H
?C0021:
; if (!Key_DOWN)
; SOURCE LINE # 212
JB P3_5,?C0022
; TempKeyV = 2;
; SOURCE LINE # 213
MOV TempKeyV,#02H
?C0022:
; if (!Key_SET)
; SOURCE LINE # 214
JB P3_6,?C0023
; TempKeyV = 3;
; SOURCE LINE # 215
MOV TempKeyV,#03H
?C0023:
; if (KeyV == TempKeyV) //两次值相等为确定接下了键
; SOURCE LINE # 216
MOV A,KeyV
XRL A,TempKeyV
JNZ ?C0024
; {
; SOURCE LINE # 217
; if (KeyV == 3) //按下SET键,如在SET状态就退出,否则进入
; SOURCE LINE # 218
MOV A,KeyV
XRL A,#03H
JNZ ?C0025
; {
; SOURCE LINE # 219
; //KeySETDowning = 1; //表明SET正在按下
; PowTF = 0; //电源标识开
; SOURCE LINE # 221
CLR PowTF
; if (!KeyTF)
; SOURCE LINE # 222
JB KeyTF,?C0026
; if (SetTF)
; SOURCE LINE # 223
JNB SetTF,?C0027
; {
; SOURCE LINE # 224
; SetTF = 0; //标识位标识退出设定
; SOURCE LINE # 225
CLR SetTF
; InitDS1820(); //初始化
; SOURCE LINE # 226
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 227
LCALL ROMDS1820
; TMWDS1820(); //写温度上限指令
; SOURCE LINE # 228
LCALL TMWDS1820
; WriteDS1820(); //写温度上限到DS18B20ROM
; SOURCE LINE # 229
LCALL WriteDS1820
; WriteDS1820(); //写温度上限到DS18B20ROM
; SOURCE LINE # 230
LCALL WriteDS1820
; WriteDS1820(); //写温度上限到DS18B20ROM
; SOURCE LINE # 231
LCALL WriteDS1820
; InitDS1820(); //初始化
; SOURCE LINE # 232
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 233
LCALL ROMDS1820
; TMREDS1820(); //温度上限值COPY回E2PRAM
; SOURCE LINE # 234
LCALL TMREDS1820
; }
; SOURCE LINE # 235
SJMP ?C0026
?C0027:
; else
; SetTF = 1;
; SOURCE LINE # 237
SETB SetTF
?C0026:
; if (!KeySETDown) //没有第一次按下SET时,KeySETDown标识置1
; SOURCE LINE # 238
JB KeySETDown,?C0029
; KeySETDown = 1;
; SOURCE LINE # 239
SETB KeySETDown
SJMP ?C0025
?C0029:
; else
; KSDNum = KSDNum + 1; //前一秒内有按过SET则开始计数
; SOURCE LINE # 241
INC KSDNum
; }
; SOURCE LINE # 242
?C0025:
; if (SetTF) //在SET状态下
; SOURCE LINE # 243
JNB SetTF,?C0031
; {
; SOURCE LINE # 244
; if ((KeyV == 1) && (!KeyTF))
; SOURCE LINE # 245
MOV A,KeyV
CJNE A,#01H,?C0032
JB KeyTF,?C0032
; TMSetV = TMSetV + 1; //上调温度
; SOURCE LINE # 246
INC TMSetV
?C0032:
; if ((KeyV == 2) && (!KeyTF))
; SOURCE LINE # 247
MOV A,KeyV
CJNE A,#02H,?C0033
JB KeyTF,?C0033
; TMSetV = TMSetV - 1; //下调温度
; SOURCE LINE # 248
DEC TMSetV
?C0033:
; if (TMSetV <= -55) //限制温度上下限
; SOURCE LINE # 249
SETB C
MOV A,TMSetV
XRL A,#080H
SUBB A,#049H
JNC ?C0034
; TMSetV = -55;
; SOURCE LINE # 250
MOV TMSetV,#0C9H
?C0034:
; if (TMSetV >= 125)
; SOURCE LINE # 251
CLR C
MOV A,TMSetV
XRL A,#080H
SUBB A,#0FDH
JC ?C0031
; TMSetV = 125;
; SOURCE LINE # 252
MOV TMSetV,#07DH
; }
; SOURCE LINE # 253
?C0031:
; if ((!KeyTF) && (IntNum3 == 0)) KeyTF = 1; //当键盘处于可用时,锁定
; SOURCE LINE # 254
JB KeyTF,?C0024
MOV A,IntNum3
JNZ ?C0024
SETB KeyTF
; }
; SOURCE LINE # 255
?C0024:
;
; if (KeySETDown) //在2秒内按下了SET则计中断发生次数用于长按SET时计时用
; SOURCE LINE # 257
JNB KeySETDown,?C0020
; //IntNum = IntNum + 1;
; //if (IntNum > 55) //中断发生了55次时(大约1.2秒)75为1.5秒左右
; {
; SOURCE LINE # 260
; //IntNum = 0;
; KeySETDown = 0;
; SOURCE LINE # 262
CLR KeySETDown
; if (KSDNum == 55) //如一直长按了SET1.2秒左右
; SOURCE LINE # 263
MOV A,KSDNum
CJNE A,#037H,?C0038
; {
; SOURCE LINE # 264
; RelayOutPort = 1; //关闭继电器输出
; SOURCE LINE # 265
SETB P1_5
; PowTF = 1; //电源标识关
; SOURCE LINE # 266
SETB PowTF
; LEDOneC = 0;
; SOURCE LINE # 267
CLR P2_0
; LEDTwoC = 0;
; SOURCE LINE # 268
CLR P2_1
; LEDThreeC = 0;
; SOURCE LINE # 269
CLR P2_2
; LEDPort = 0xBF; //显示"--"
; SOURCE LINE # 270
MOV P0,#0BFH
; Delay_4s(); //延时
; SOURCE LINE # 271
LCALL Delay_4s
; LEDOneC = 1;
; SOURCE LINE # 272
SETB P2_0
; LEDTwoC = 1; //关显示
; SOURCE LINE # 273
SETB P2_1
; LEDThreeC = 1;
; SOURCE LINE # 274
SETB P2_2
; Delay_4s();
; SOURCE LINE # 275
LCALL Delay_4s
; //IntNum = 0;
; IntNum2 = 0;
; SOURCE LINE # 277
MOV IntNum2,#00H
; IntNum3 = 0;
; SOURCE LINE # 278
MOV IntNum3,#00H
; }
; SOURCE LINE # 279
?C0038:
; KSDNum = 0;
; SOURCE LINE # 280
MOV KSDNum,#00H
; }
; SOURCE LINE # 281
; }
; SOURCE LINE # 282
?C0020:
; KeyV = 0;
; SOURCE LINE # 283
MOV KeyV,#00H
; TempKeyV = 0; //清空变量准备下次键扫描
; SOURCE LINE # 284
MOV TempKeyV,#00H
;
; if (!PowTF)
; SOURCE LINE # 286
JNB PowTF,$ + 6H
LJMP ?C0048
; {
; SOURCE LINE # 287
; InitDS1820(); //初始化
; SOURCE LINE # 288
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 289
LCALL ROMDS1820
; TMVDS1820(); //温度转换指令
; SOURCE LINE # 290
LCALL TMVDS1820
;
; Delay_510();
; SOURCE LINE # 292
LCALL Delay_510
; Delay_510(); //延时等待转换完成
; SOURCE LINE # 293
LCALL Delay_510
;
; InitDS1820(); //初始化
; SOURCE LINE # 295
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 296
LCALL ROMDS1820
; TMRDS1820(); //读出温度指令
; SOURCE LINE # 297
LCALL TMRDS1820
; ReadDS1820(); //读出温度值
; SOURCE LINE # 298
LCALL ReadDS1820
;
; V2ToV(); //转换显示值
; SOURCE LINE # 300
LCALL V2ToV
; if (TMV > TMSetV) //根据采集到的温度值控制继电器
; SOURCE LINE # 301
SETB C
MOV A,TMSetV
XRL A,#080H
MOV R0,A
MOV A,TMV
XRL A,#080H
SUBB A,R0
JC ?C0040
; {
; SOURCE LINE # 302
; RelayOutPort = 0;
; SOURCE LINE # 303
CLR P1_5
; RelayOutfan = 1;
; SOURCE LINE # 304
SETB P1_6
; LEDhigh = 0 ;
; SOURCE LINE # 305
CLR P1_0
; LEDlow = 1;
; SOURCE LINE # 306
SETB P1_1
; }
; SOURCE LINE # 307
SJMP ?C0041
?C0040:
; else
; {
; SOURCE LINE # 309
; RelayOutPort = 1;
; SOURCE LINE # 310
SETB P1_5
; RelayOutfan = 0;
; SOURCE LINE # 311
CLR P1_6
; LEDhigh = 1;
; SOURCE LINE # 312
SETB P1_0
; LEDlow = 0;
; SOURCE LINE # 313
CLR P1_1
; }
; SOURCE LINE # 314
?C0041:
;
; if (SetTF) IntNum2 = IntNum2 + 1; //用于闪烁计数
; SOURCE LINE # 316
JNB SetTF,?C0042
INC IntNum2
?C0042:
; if (IntNum2 > 50 ) IntNum2 = 0;
; SOURCE LINE # 317
MOV A,IntNum2
SETB C
SUBB A,#032H
JC ?C0043
MOV IntNum2,#00H
?C0043:
; if (KeyTF) IntNum3 = IntNum3 + 1; //用于防止按键连按
; SOURCE LINE # 318
JNB KeyTF,?C0044
INC IntNum3
?C0044:
; if (IntNum3 > 25)
; SOURCE LINE # 319
MOV A,IntNum3
SETB C
SUBB A,#019H
JC ?C0045
; {
; SOURCE LINE # 320
; IntNum3 = 0;
; SOURCE LINE # 321
MOV IntNum3,#00H
; KeyTF = 0;
; SOURCE LINE # 322
CLR KeyTF
; }
; SOURCE LINE # 323
?C0045:
;
; if ((SetTF) && (IntNum2 < 25)) goto InitEnd; //计数在后半段时显示
; SOURCE LINE # 325
JNB SetTF,?C0046
MOV A,IntNum2
CLR C
SUBB A,#019H
JC ?C0048
?C0046:
; LEDPort = LED_One;
; SOURCE LINE # 326
MOV P0,LED_One
; LEDOneC = 0;
; SOURCE LINE # 327
CLR P2_0
; Delay_510();
; SOURCE LINE # 328
LCALL Delay_510
; LEDOneC = 1; //显示百位数
; SOURCE LINE # 329
SETB P2_0
; LEDPort = LED_Two;
; SOURCE LINE # 330
MOV P0,LED_Two
; LEDTwoC = 0;
; SOURCE LINE # 331
CLR P2_1
; Delay_510();
; SOURCE LINE # 332
LCALL Delay_510
; LEDTwoC = 1; //显示十位数
; SOURCE LINE # 333
SETB P2_1
; LEDPort = LED_Three;
; SOURCE LINE # 334
MOV P0,LED_Three
; LEDThreeC = 0;
; SOURCE LINE # 335
CLR P2_2
; Delay_510();
; SOURCE LINE # 336
LCALL Delay_510
; LEDThreeC = 1; //显示个位数
; SOURCE LINE # 337
SETB P2_2
; }
; SOURCE LINE # 338
; InitEnd:;
; SOURCE LINE # 339
?KeyAndDis_Time0?InitEnd:
; }
; SOURCE LINE # 340
?C0048:
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF KeyAndDis_Time0
;
; void V2ToV(void) //数值转换
RSEG ?PR?V2ToV?TCMAIN
V2ToV:
USING 0
; SOURCE LINE # 342
; {
; SOURCE LINE # 343
; TLV = TLV >> 4;
; SOURCE LINE # 344
MOV A,TLV
SWAP A
ANL A,#0FH
MOV TLV,A
; THV = THV << 4; //读出的高低位数值移位
; SOURCE LINE # 345
MOV A,THV
SWAP A
ANL A,#0F0H
MOV THV,A
; TMV = TLV | THV; //合并高低位放入TM为实际温度值
; SOURCE LINE # 346
ORL A,TLV
MOV TMV,A
; Sign = 0;
; SOURCE LINE # 347
CLR A
MOV Sign,A
; if (SetTF || !Key_SET)
; SOURCE LINE # 348
JB SetTF,?C0050
JB P3_6,?C0049
?C0050:
; Sign = TMSetV >> 7; //取符号
; SOURCE LINE # 349
MOV A,TMSetV
MOV R0,#07H
?C0084:
MOV C,ACC.7
RRC A
DJNZ R0,?C0084
MOV Sign,A
SJMP ?C0051
?C0049:
; else
; Sign = TMV >> 7;
; SOURCE LINE # 351
MOV A,TMV
MOV R0,#07H
?C0085:
MOV C,ACC.7
RRC A
DJNZ R0,?C0085
MOV Sign,A
?C0051:
;
; if (Sign)
; SOURCE LINE # 353
MOV A,Sign
JZ ?C0052
; {
; SOURCE LINE # 354
; if (SetTF || !Key_SET)
; SOURCE LINE # 355
JB SetTF,?C0054
JB P3_6,?C0053
?C0054:
; {
; SOURCE LINE # 356
; LED_One = (~(TMSetV-1)) / 100; //SET状态下显示设定值
; SOURCE LINE # 357
MOV A,TMSetV
; LED_Two = ((~(TMSetV-1)) - LED_One * 100)/10;
; SOURCE LINE # 358
; LED_Three = (~(TMSetV-1)) - LED_One * 100 - LED_Two * 10;
; SOURCE LINE # 359
; }
; SOURCE LINE # 360
SJMP ?C0086
?C0053:
; else
; {
; SOURCE LINE # 362
; LED_One = (~(TMV-1)) / 100; //转换百位值
; SOURCE LINE # 363
MOV A,TMV
?C0086:
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 # 364
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 # 365
; }
; SOURCE LINE # 366
; }
; SOURCE LINE # 367
SJMP ?C0088
?C0052:
; else
; {
; SOURCE LINE # 369
; if (SetTF || !Key_SET)
; SOURCE LINE # 370
JB SetTF,?C0058
JB P3_6,?C0057
?C0058:
; {
; SOURCE LINE # 371
; LED_One = (TMSetV) / 100; //SET状态下显示设定值
; SOURCE LINE # 372
MOV A,TMSetV
MOV B,#064H
LCALL ?C?SCDIV
MOV LED_One,A
; LED_Two = (TMSetV - LED_One * 100)/10;
; SOURCE LINE # 373
MOV B,#064H
MUL AB
MOV R7,A
CLR C
MOV A,TMSetV
SUBB A,R7
?C0087:
; LED_Three = TMSetV - LED_One * 100 - LED_Two * 10;
; SOURCE LINE # 374
; }
; SOURCE LINE # 375
SJMP ?C0088
?C0057:
; else
; {
; SOURCE LINE # 377
; LED_One = (TMV) / 100; //转换百位值
; SOURCE LINE # 378
MOV A,TMV
MOV B,#064H
LCALL ?C?SCDIV
MOV LED_One,A
; LED_Two = (TMV - LED_One * 100)/10;
; SOURCE LINE # 379
MOV B,#064H
MUL AB
MOV R7,A
CLR C
MOV A,TMV
SUBB A,R7
?C0088:
MOV R7,A
MOV B,#0AH
LCALL ?C?SCDIV
MOV LED_Two,A
; LED_Three = TMV - LED_One * 100 - LED_Two * 10;
; SOURCE LINE # 380
MOV B,#0AH
MUL AB
MOV R6,A
CLR C
MOV A,R7
SUBB A,R6
MOV LED_Three,A
; }
; SOURCE LINE # 381
; }
; SOURCE LINE # 382
?C0056:
;
; //转LED字段
; if (LED_One) //超过百时十位的处理
; SOURCE LINE # 385
MOV A,LED_One
JZ ?C0060
; LED_Two = LEDDis[LED_Two];
; SOURCE LINE # 386
SJMP ?C0089
?C0060:
; else
; {
; SOURCE LINE # 388
; if (LED_Two == 0)
; SOURCE LINE # 389
MOV A,LED_Two
JNZ ?C0062
; LED_Two = LEDDis[10];
; SOURCE LINE # 390
MOV DPTR,#LEDDis+0AH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -