📄 lcd_main.src
字号:
; if (!Key_DOWN) KeyV = 2;
; SOURCE LINE # 159
JB P2_5,?C0014
MOV KeyV,#02H
?C0014:
; if (!Key_SET) KeyV = 3;
; SOURCE LINE # 160
JB P2_4,?C0015
MOV KeyV,#03H
?C0015:
; //KeySETDowning = 0; //清除
; if (KeyV != 0) //有键按下
; SOURCE LINE # 162
MOV A,KeyV
JNZ $ + 5H
LJMP ?C0016
; {
; SOURCE LINE # 163
; Delay_10ms(); //延时防抖 按下10ms再测
; SOURCE LINE # 164
LCALL Delay_10ms
; if (!Key_UP) TempKeyV = 1;
; SOURCE LINE # 165
JB P2_3,?C0017
MOV TempKeyV,#01H
?C0017:
; if (!Key_DOWN) TempKeyV = 2;
; SOURCE LINE # 166
JB P2_5,?C0018
MOV TempKeyV,#02H
?C0018:
; if (!Key_SET) TempKeyV = 3;
; SOURCE LINE # 167
JB P2_4,?C0019
MOV TempKeyV,#03H
?C0019:
;
; if (KeyV == TempKeyV) //两次值相等为确定接下了键
; SOURCE LINE # 169
MOV A,KeyV
XRL A,TempKeyV
JZ $ + 5H
LJMP ?C0020
; {
; SOURCE LINE # 170
; if (KeyV == 3) //按下SET键,如在SET状态就退出,否则进入
; SOURCE LINE # 171
MOV A,KeyV
XRL A,#03H
JNZ ?C0021
; {
; SOURCE LINE # 172
; //KeySETDowning = 1; //表明SET正在按下
; PowTF = 0; //电源标识开
; SOURCE LINE # 174
CLR PowTF
; if (!KeyTF) //KeyTF=0,键盘允许
; SOURCE LINE # 175
JB KeyTF,?C0022
; if (SetTF)
; SOURCE LINE # 176
JNB SetTF,?C0023
; {
; SOURCE LINE # 177
; SetTF = 0; //标识位标识退出设定
; SOURCE LINE # 178
CLR SetTF
; InitDS1820(); //初始化
; SOURCE LINE # 179
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 180
LCALL ROMDS1820
; TMWDS1820(); //写温度上限指令
; SOURCE LINE # 181
LCALL TMWDS1820
; WriteDS1820(); //写温度上限到DS18B20ROM
; SOURCE LINE # 182
LCALL WriteDS1820
; WriteDS1820(); //写温度上限到DS18B20ROM
; SOURCE LINE # 183
LCALL WriteDS1820
; WriteDS1820(); //写温度上限到DS18B20ROM
; SOURCE LINE # 184
LCALL WriteDS1820
; InitDS1820(); //初始化
; SOURCE LINE # 185
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 186
LCALL ROMDS1820
; TMREDS1820(); //温度上限值COPY回E2PRAM
; SOURCE LINE # 187
LCALL TMREDS1820
; // V2ToV();
; }
; SOURCE LINE # 189
SJMP ?C0022
?C0023:
; else
; SetTF = 1;
; SOURCE LINE # 191
SETB SetTF
?C0022:
; if (!KeySETDown) //没有第一次按下SET时,KeySETDown标识置1
; SOURCE LINE # 192
JB KeySETDown,?C0025
; KeySETDown = 1;
; SOURCE LINE # 193
SETB KeySETDown
SJMP ?C0021
?C0025:
; else
; KSDNum = KSDNum + 1; //前一秒内有按过SET则开始计数
; SOURCE LINE # 195
INC KSDNum
; }
; SOURCE LINE # 196
?C0021:
; if (SetTF==1) //在SET状态下
; SOURCE LINE # 197
JNB SetTF,?C0027
; {
; SOURCE LINE # 198
; cur_temper_set[9]=0x3d; //"=" 显示set标志
; SOURCE LINE # 199
MOV cur_temper_set+09H,#03DH
; cur_temper_set[10]=0x73; //"s"
; SOURCE LINE # 200
MOV cur_temper_set+0AH,#073H
; cur_temper_set[11]=0x65; //"e"
; SOURCE LINE # 201
MOV cur_temper_set+0BH,#065H
; cur_temper_set[12]=0x74; //"t"
; SOURCE LINE # 202
MOV cur_temper_set+0CH,#074H
; if ((KeyV == 1) && (!KeyTF))
; SOURCE LINE # 203
MOV A,KeyV
CJNE A,#01H,?C0028
JB KeyTF,?C0028
; TMSetV = TMSetV + 1; //上调温度
; SOURCE LINE # 204
INC TMSetV
?C0028:
; if ((KeyV == 2) && (!KeyTF))
; SOURCE LINE # 205
MOV A,KeyV
CJNE A,#02H,?C0029
JB KeyTF,?C0029
; TMSetV = TMSetV - 1; //下调温度
; SOURCE LINE # 206
DEC TMSetV
?C0029:
; if (TMSetV <= -55) //限制温度上下限
; SOURCE LINE # 207
SETB C
MOV A,TMSetV
XRL A,#080H
SUBB A,#049H
JNC ?C0030
; TMSetV = -55;
; SOURCE LINE # 208
MOV TMSetV,#0C9H
?C0030:
; if (TMSetV >= 125)
; SOURCE LINE # 209
CLR C
MOV A,TMSetV
XRL A,#080H
SUBB A,#0FDH
JC ?C0027
; TMSetV = 125;
; SOURCE LINE # 210
MOV TMSetV,#07DH
; }
; SOURCE LINE # 211
?C0027:
; if ((!KeyTF) && (IntNum3 == 0))
; SOURCE LINE # 212
JB KeyTF,?C0020
MOV A,IntNum3
JNZ ?C0020
; {
; SOURCE LINE # 213
; KeyTF = 1; //当键盘处于可用时,锁定
; SOURCE LINE # 214
SETB KeyTF
; cur_temper_set[9]=0x20; // 显示空白
; SOURCE LINE # 215
MOV cur_temper_set+09H,#020H
; cur_temper_set[10]=0x20;
; SOURCE LINE # 216
MOV cur_temper_set+0AH,#020H
; cur_temper_set[11]=0x20;
; SOURCE LINE # 217
MOV cur_temper_set+0BH,#020H
; cur_temper_set[12]=0x20;
; SOURCE LINE # 218
MOV cur_temper_set+0CH,#020H
; }
; SOURCE LINE # 219
; }
; SOURCE LINE # 220
?C0020:
;
; if (KeySETDown) //在2秒内按下了SET则计中断发生次数用于长按SET时计时用
; SOURCE LINE # 222
JNB KeySETDown,?C0033
; IntNum = IntNum + 1;
; SOURCE LINE # 223
INC IntNum
?C0033:
; if (IntNum > 55) //中断发生了55次时(大约1.2秒)75为1.5秒左右
; SOURCE LINE # 224
MOV A,IntNum
SETB C
SUBB A,#037H
JC ?C0016
; {
; SOURCE LINE # 225
; IntNum = 0;
; SOURCE LINE # 226
MOV IntNum,#00H
; KeySETDown = 0;
; SOURCE LINE # 227
CLR KeySETDown
; if (KSDNum == 55) //如一直长按了SET1.2秒左右
; SOURCE LINE # 228
MOV A,KSDNum
CJNE A,#037H,?C0035
; {
; SOURCE LINE # 229
; RelayOutPort = 1; //关闭继电器输出
; SOURCE LINE # 230
SETB P2_6
; PowTF = 1; //电源标识关
; SOURCE LINE # 231
SETB PowTF
; //Delay_4s(); //延时
; IntNum = 0;
; SOURCE LINE # 233
MOV IntNum,#00H
; IntNum2 = 0;
; SOURCE LINE # 234
MOV IntNum2,#00H
; IntNum3 = 0;
; SOURCE LINE # 235
MOV IntNum3,#00H
; BF = 0; //显示欢迎信息
; SOURCE LINE # 236
MOV BF,#00H
; EA=0;
; SOURCE LINE # 237
CLR EA
; }
; SOURCE LINE # 238
?C0035:
; KSDNum = 0;
; SOURCE LINE # 239
MOV KSDNum,#00H
; }
; SOURCE LINE # 240
; }
; SOURCE LINE # 241
?C0016:
;
; KeyV = 0;
; SOURCE LINE # 243
MOV KeyV,#00H
; TempKeyV = 0; //清空变量准备下次键扫描
; SOURCE LINE # 244
MOV TempKeyV,#00H
;
; if (PowTF==0)
; SOURCE LINE # 246
JB PowTF,?C0045
; {
; SOURCE LINE # 247
; InitDS1820(); //初始化
; SOURCE LINE # 248
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 249
LCALL ROMDS1820
; TMVDS1820(); //温度转换指令
; SOURCE LINE # 250
LCALL TMVDS1820
; Delay_510();
; SOURCE LINE # 251
LCALL Delay_510
; Delay_510(); //延时等待转换完成
; SOURCE LINE # 252
LCALL Delay_510
; InitDS1820(); //初始化
; SOURCE LINE # 253
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 254
LCALL ROMDS1820
; TMRDS1820(); //读出温度指令
; SOURCE LINE # 255
LCALL TMRDS1820
; ReadDS1820(); //读出温度值
; SOURCE LINE # 256
LCALL ReadDS1820
; V2ToV(); //转换显示值
; SOURCE LINE # 257
LCALL V2ToV
; if (TMV > TMSetV) //根据采集到的温度值控制继电器
; SOURCE LINE # 258
SETB C
MOV A,TMSetV
XRL A,#080H
MOV R0,A
MOV A,TMV
XRL A,#080H
SUBB A,R0
JC ?C0037
; {
; SOURCE LINE # 259
; RelayOutPort = 0;
; SOURCE LINE # 260
CLR P2_6
; cur_temper_set[13]=0x20; //" "
; SOURCE LINE # 261
MOV cur_temper_set+0DH,#020H
; cur_temper_set[14]=0x4f; //"O"
; SOURCE LINE # 262
MOV cur_temper_set+0EH,#04FH
; cur_temper_set[15]=0x4e; //"N"
; SOURCE LINE # 263
MOV cur_temper_set+0FH,#04EH
; }
; SOURCE LINE # 264
SJMP ?C0038
?C0037:
; else
; {
; SOURCE LINE # 266
; RelayOutPort = 1;
; SOURCE LINE # 267
SETB P2_6
; cur_temper_set[13]=0x4f; //"O"
; SOURCE LINE # 268
MOV cur_temper_set+0DH,#04FH
; cur_temper_set[14]=0x46; //"F"
; SOURCE LINE # 269
MOV cur_temper_set+0EH,#046H
; cur_temper_set[15]=0x46; //"F"
; SOURCE LINE # 270
MOV cur_temper_set+0FH,#046H
; }
; SOURCE LINE # 271
?C0038:
;
; if (SetTF) IntNum2 = IntNum2 + 1; //用于闪烁计数
; SOURCE LINE # 273
JNB SetTF,?C0039
INC IntNum2
?C0039:
; if (IntNum2 > 50 ) IntNum2 = 0;
; SOURCE LINE # 274
MOV A,IntNum2
SETB C
SUBB A,#032H
JC ?C0040
MOV IntNum2,#00H
?C0040:
; if (KeyTF) IntNum3 = IntNum3 + 1; //用于防止按键连按
; SOURCE LINE # 275
JNB KeyTF,?C0041
INC IntNum3
?C0041:
; if (IntNum3 > 25)
; SOURCE LINE # 276
MOV A,IntNum3
SETB C
SUBB A,#019H
JC ?C0042
; {
; SOURCE LINE # 277
; IntNum3 = 0;
; SOURCE LINE # 278
MOV IntNum3,#00H
; KeyTF = 0;
; SOURCE LINE # 279
CLR KeyTF
; }
; SOURCE LINE # 280
?C0042:
; if ((SetTF) && (IntNum2 < 25)) goto InitEnd; //计数在后半段时显示
; SOURCE LINE # 281
JNB SetTF,?C0043
MOV A,IntNum2
CLR C
SUBB A,#019H
JC ?C0045
?C0043:
; BF=1; //让显示温度值
; SOURCE LINE # 282
MOV BF,#01H
; EA=0; //关中断
; SOURCE LINE # 283
CLR EA
; }
; SOURCE LINE # 284
; InitEnd:;
; SOURCE LINE # 285
?KeyAndDis_Time0?InitEnd:
; }
; SOURCE LINE # 286
?C0045:
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF KeyAndDis_Time0
;
;
;
; void V2ToV(void) //数值转换
RSEG ?PR?V2ToV?LCD_MAIN
V2ToV:
USING 0
; SOURCE LINE # 290
; {
; SOURCE LINE # 291
; TLV = TLV >> 4;
; SOURCE LINE # 292
MOV A,TLV
SWAP A
ANL A,#0FH
MOV TLV,A
; THV = THV << 4; //读出的高低位数值移位
; SOURCE LINE # 293
MOV A,THV
SWAP A
ANL A,#0F0H
MOV THV,A
; TMV = TLV | THV; //合并高低位放入TM为实际温度值
; SOURCE LINE # 294
ORL A,TLV
MOV TMV,A
; Sign = 0; Sign_Set=0;
; SOURCE LINE # 295
CLR A
MOV Sign,A
MOV Sign_Set,A
; Sign_Set = TMSetV >> 7; //取符号
; SOURCE LINE # 296
MOV A,TMSetV
MOV R0,#07H
?C0105:
MOV C,ACC.7
RRC A
DJNZ R0,?C0105
MOV Sign_Set,A
; Sign = TMV >> 7;
; SOURCE LINE # 297
MOV A,TMV
MOV R0,#07H
?C0106:
MOV C,ACC.7
RRC A
DJNZ R0,?C0106
MOV Sign,A
;
; if (Sign)
; SOURCE LINE # 299
JZ ?C0046
; {
; SOURCE LINE # 300
; LCD_One = (~TMV) / 100; //转换百位值
; SOURCE LINE # 301
MOV A,TMV
CPL A
MOV R7,A
MOV B,#064H
LCALL ?C?SCDIV
MOV LCD_One,A
; LCD_Two = ((~TMV) - LCD_One * 100)/10;
; SOURCE LINE # 302
MOV B,#064H
MUL AB
MOV R6,A
CLR C
MOV A,R7
SUBB A,R6
; LCD_Three = (~TMV) - LCD_One * 100 - LCD_Two * 10;
; SOURCE LINE # 303
; }
; SOURCE LINE # 304
SJMP ?C0109
?C0046:
; else
; {
; SOURCE LINE # 306
; LCD_One = (TMV) / 100; //转换百位值
; SOURCE LINE # 307
MOV A,TMV
MOV B,#064H
LCALL ?C?SCDIV
MOV LCD_One,A
; LCD_Two = (TMV - LCD_One * 100)/10;
; SOURCE LINE # 308
MOV B,#064H
MUL AB
MOV R7,A
CLR C
MOV A,TMV
SUBB A,R7
?C0109:
MOV R7,A
MOV B,#0AH
LCALL ?C?SCDIV
MOV LCD_Two,A
; LCD_Three = TMV - LCD_One * 100 - LCD_Two * 10;
; SOURCE LINE # 309
MOV B,#0AH
MUL AB
MOV R6,A
CLR C
MOV A,R7
SUBB A,R6
MOV LCD_Three,A
; }
; SOURCE LINE # 310
?C0047:
;
; if (Sign_Set)
; SOURCE LINE # 312
MOV A,Sign_Set
JZ ?C0048
; {
; SOURCE LINE # 313
; LCD_One_set = (~(TMSetV-1)) / 100; //SET状态下显示设定值
; SOURCE LINE # 314
MOV A,TMSetV
DEC A
CPL A
MOV R7,A
MOV B,#064H
LCALL ?C?SCDIV
MOV LCD_One_set,A
; LCD_Two_set = ((~(TMSetV-1)) - LCD_One_set * 100)/10;
; SOURCE LINE # 315
MOV B,#064H
MUL AB
MOV R6,A
CLR C
MOV A,R7
SUBB A,R6
; LCD_Three_set = (~(TMSetV-1)) - LCD_One_set * 100 - LCD_Two_set * 10;
; SOURCE LINE # 316
; }
; SOURCE LINE # 317
SJMP ?C0110
?C0048:
; else
; {
; SOURCE LINE # 319
; LCD_One_set = (TMSetV) / 100; //SET状态下显示设定值
; SOURCE LINE # 320
MOV A,TMSetV
MOV B,#064H
LCALL ?C?SCDIV
MOV LCD_One_set,A
; LCD_Two_set = (TMSetV - LCD_One_set * 100)/10;
; SOURCE LINE # 321
MOV B,#064H
MUL AB
MOV R7,A
CLR C
MOV A,TMSetV
SUBB A,R7
?C0110:
MOV R7,A
MOV B,#0AH
LCALL ?C?SCDIV
MOV LCD_Two_set,A
; LCD_Three_set = TMSetV - LCD_One_set * 100 - LCD_Two_set * 10;
; SOURCE LINE # 322
MOV B,#0AH
MUL AB
MOV R6,A
CLR C
MOV A,R7
SUBB A,R6
MOV LCD_Three_set,A
; }
; SOURCE LINE # 323
?C0049:
;
; //转LCD字段 温度值
; if (LCD_One) //超过百时十位的处理
; SOURCE LINE # 326
MOV A,LCD_One
JZ ?C0050
; LCD_Two = LCDDis[LCD_Two];
; SOURCE LINE # 327
SJMP ?C0111
?C0050:
; else
; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -