⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcmain.src

📁 PC与单片机双向通讯智能温控程序 #include <AT89X51.H> #include <intrins.h> #define Key_UP P1_0 #def
💻 SRC
📖 第 1 页 / 共 3 页
字号:
; //BEEP=1;
; send_char_com('N');
			; SOURCE LINE # 187
	MOV  	R7,#04EH
; send_char_com('N');
			; SOURCE LINE # 188
; send_char_com('N');
			; SOURCE LINE # 189
	ACALL	L?0100
; SetTF = 0;
			; SOURCE LINE # 190
	CLR  	SetTF
; 
; inbuf2[0]=0x00;
			; SOURCE LINE # 192
	MOV  	inbuf2,#00H
; 
; } 
			; SOURCE LINE # 194
?C0019:
; 
; if (inbuf2[0]==0x34){
			; SOURCE LINE # 196
	MOV  	A,inbuf2
	CJNE 	A,#034H,?C0020
; 	   KeyV=2;
			; SOURCE LINE # 197
	MOV  	KeyV,#02H
; //send_string_com(inbuf2,1);
; //BEEP=0;
; //RELAY=0;
;   TMSetV = TMSetV - 1;
			; SOURCE LINE # 201
	DEC  	TMSetV
;     inbuf2[0]=0x00;
			; SOURCE LINE # 202
	MOV  	inbuf2,#00H
; } 
			; SOURCE LINE # 203
?C0020:
; 
; if (inbuf2[0]==0x35){
			; SOURCE LINE # 205
	MOV  	A,inbuf2
	CJNE 	A,#035H,?C0021
; 
; //send_string_com(inbuf2,1);
; //BEEP=1;
; //RELAY=1;
;  TMSetV = TMSetV + 1;    //上调温度
			; SOURCE LINE # 210
	INC  	TMSetV
;  inbuf2[0]=0x00;
			; SOURCE LINE # 211
	MOV  	inbuf2,#00H
; } 
			; SOURCE LINE # 212
?C0021:
; 
; if (inbuf2[0]==0x74){
			; SOURCE LINE # 214
	MOV  	A,inbuf2
	CJNE 	A,#074H,?C0022
; 	 KeyV=2;
			; SOURCE LINE # 215
	MOV  	KeyV,#02H
; //send_string_com(inbuf2,1);
; //BEEP=1;
; //RELAY=1;
; } 
			; SOURCE LINE # 219
?C0022:
; 
; if (inbuf2[0]==0x90){
			; SOURCE LINE # 221
	MOV  	A,inbuf2
	CJNE 	A,#090H,?C0023
; 	 KeyV=1;
			; SOURCE LINE # 222
	MOV  	KeyV,#01H
; //send_string_com(inbuf2,1);
; //BEEP=1;
; //RELAY=1;
; } 
			; SOURCE LINE # 226
?C0023:
; 
; 
;   if (!Key_UP)
			; SOURCE LINE # 229
	JB   	P1_0,?C0024
;     KeyV = 1;
			; SOURCE LINE # 230
	MOV  	KeyV,#01H
?C0024:
;   if (!Key_DOWN)
			; SOURCE LINE # 231
	JB   	P1_1,?C0025
;     KeyV = 2;
			; SOURCE LINE # 232
	MOV  	KeyV,#02H
?C0025:
;   if (!Key_SET)
			; SOURCE LINE # 233
	JB   	P1_2,?C0026
;     KeyV = 3;
			; SOURCE LINE # 234
	MOV  	KeyV,#03H
?C0026:
; 	//KeySETDowning = 0;  //清除
;   if (KeyV != 0)      //有键按下
			; SOURCE LINE # 236
	MOV  	A,KeyV
	JNZ  	$ + 4H
	AJMP 	?C0027
;     {
			; SOURCE LINE # 237
;       Delay_10ms();   //延时防抖  按下10ms再测
			; SOURCE LINE # 238
	ACALL	Delay_10ms
;       if (!Key_UP)
			; SOURCE LINE # 239
	JB   	P1_0,?C0028
;         TempKeyV = 1;
			; SOURCE LINE # 240
	MOV  	TempKeyV,#01H
?C0028:
;       if (!Key_DOWN)
			; SOURCE LINE # 241
	JB   	P1_1,?C0029
;         TempKeyV = 2;
			; SOURCE LINE # 242
	MOV  	TempKeyV,#02H
?C0029:
;       if (!Key_SET)
			; SOURCE LINE # 243
	JB   	P1_2,?C0030
;         TempKeyV = 3;
			; SOURCE LINE # 244
	MOV  	TempKeyV,#03H
?C0030:
;       if (KeyV == TempKeyV)   //两次值相等为确定接下了键
			; SOURCE LINE # 245
	MOV  	A,KeyV
	XRL  	A,TempKeyV
	JNZ  	?C0027
;         {
			; SOURCE LINE # 246
;           if (KeyV == 3)      //按下SET键,如在SET状态就退出,否则进入
			; SOURCE LINE # 247
	MOV  	A,KeyV
	XRL  	A,#03H
	JNZ  	?C0032
;             {
			; SOURCE LINE # 248
; 							//KeySETDowning = 1; //表明SET正在按下
; 							
; 			
;               PowTF = 0;      //电源标识开
			; SOURCE LINE # 252
	CLR  	PowTF
; 							if (!KeyTF)
			; SOURCE LINE # 253
	JB   	KeyTF,?C0033
;               	if (SetTF){
			; SOURCE LINE # 254
	JNB  	SetTF,?C0034
; 				send_char_com('N');
			; SOURCE LINE # 255
	MOV  	R7,#04EH
; send_char_com('N');
			; SOURCE LINE # 256
; send_char_com('N');
			; SOURCE LINE # 257
	ACALL	L?0100
;                 		SetTF = 0;    //标识位标识退出设定
			; SOURCE LINE # 258
	CLR  	SetTF
; 						
; 										InitDS1820(); //初始化
			; SOURCE LINE # 260
	ACALL	InitDS1820
;   									ROMDS1820(); 	//跳过ROM
			; SOURCE LINE # 261
	ACALL	ROMDS1820
;   									TMWDS1820(); 	//写温度上限指令
			; SOURCE LINE # 262
	ACALL	TMWDS1820
; 										WriteDS1820(); 	//写温度上限到DS18B20ROM
			; SOURCE LINE # 263
	ACALL	WriteDS1820
; 										WriteDS1820(); 	//写温度上限到DS18B20ROM
			; SOURCE LINE # 264
	ACALL	WriteDS1820
; 										WriteDS1820(); 	//写温度上限到DS18B20ROM
			; SOURCE LINE # 265
	ACALL	WriteDS1820
; 										InitDS1820(); //初始化
			; SOURCE LINE # 266
	ACALL	InitDS1820
;   									ROMDS1820(); 	//跳过ROM
			; SOURCE LINE # 267
	ACALL	ROMDS1820
;   									TMREDS1820(); 	//温度上限值COPY回E2PRAM
			; SOURCE LINE # 268
	ACALL	TMREDS1820
; 									}
			; SOURCE LINE # 269
	SJMP 	?C0033
?C0034:
;               	else {
			; SOURCE LINE # 270
; 				send_char_com('O');
			; SOURCE LINE # 271
; 	   send_char_com('O');
			; SOURCE LINE # 272
; 	   send_char_com('O');
			; SOURCE LINE # 273
	LCALL	L?0099
;                 	SetTF = 1;}
			; SOURCE LINE # 274
	SETB 	SetTF
?C0033:
; 					 
; 				   
;               if (!KeySETDown) //没有第一次按下SET时,KeySETDown标识置1
			; SOURCE LINE # 277
	JB   	KeySETDown,?C0036
;                 KeySETDown = 1;
			; SOURCE LINE # 278
	SETB 	KeySETDown
	SJMP 	?C0032
?C0036:
;               else
;                 KSDNum = KSDNum + 1;  //前一秒内有按过SET则开始计数
			; SOURCE LINE # 280
	INC  	KSDNum
;             }
			; SOURCE LINE # 281
?C0032:
;           if (SetTF)  //在SET状态下
			; SOURCE LINE # 282
	JNB  	SetTF,?C0038
;             {
			; SOURCE LINE # 283
; 			 
;               if ((KeyV == 1) && (!KeyTF))
			; SOURCE LINE # 285
	MOV  	A,KeyV
	CJNE 	A,#01H,?C0039
	JB   	KeyTF,?C0039
;                 TMSetV = TMSetV + 1;    //上调温度
			; SOURCE LINE # 286
	INC  	TMSetV
?C0039:
;               if ((KeyV == 2) && (!KeyTF))
			; SOURCE LINE # 287
	MOV  	A,KeyV
	CJNE 	A,#02H,?C0040
	JB   	KeyTF,?C0040
;                 TMSetV = TMSetV - 1;    //下调温度
			; SOURCE LINE # 288
	DEC  	TMSetV
?C0040:
;               if (TMSetV <= 20)          //限制温度上下限
			; SOURCE LINE # 289
	SETB 	C
	MOV  	A,TMSetV
	XRL  	A,#080H
	SUBB 	A,#094H
	JNC  	?C0041
;                 TMSetV = 20;
			; SOURCE LINE # 290
	MOV  	TMSetV,#014H
?C0041:
;               if (TMSetV >= 75)
			; SOURCE LINE # 291
	CLR  	C
	MOV  	A,TMSetV
	XRL  	A,#080H
	SUBB 	A,#0CBH
	JC   	?C0038
;                 TMSetV = 75;
			; SOURCE LINE # 292
	MOV  	TMSetV,#04BH
;             }
			; SOURCE LINE # 293
?C0038:
; 		if ((!KeyTF) && (IntNum3 == 0)) KeyTF = 1; //当键盘处于可用时,锁定
			; SOURCE LINE # 294
	JB   	KeyTF,?C0027
	MOV  	A,IntNum3
	JNZ  	?C0027
	SETB 	KeyTF
;         }
			; SOURCE LINE # 295
; 
;      
;     }
			; SOURCE LINE # 298
?C0027:
;   KeyV = 0;
			; SOURCE LINE # 299
	MOV  	KeyV,#00H
;   TempKeyV = 0;   //清空变量准备下次键扫描
			; SOURCE LINE # 300
	MOV  	TempKeyV,#00H
; 
;   if (!PowTF)
			; SOURCE LINE # 302
	JB   	PowTF,?C0053
;     {
			; SOURCE LINE # 303
;       InitDS1820();	//初始化
			; SOURCE LINE # 304
	ACALL	InitDS1820
;       ROMDS1820(); 	//跳过ROM
			; SOURCE LINE # 305
	ACALL	ROMDS1820
;       TMVDS1820();  //温度转换指令
			; SOURCE LINE # 306
	ACALL	TMVDS1820
; 
;       Delay_510();
			; SOURCE LINE # 308
	ACALL	Delay_510
;       Delay_510();  //延时等待转换完成
			; SOURCE LINE # 309
	ACALL	Delay_510
; 
;       InitDS1820(); //初始化
			; SOURCE LINE # 311
	ACALL	InitDS1820
;       ROMDS1820(); 	//跳过ROM
			; SOURCE LINE # 312
	ACALL	ROMDS1820
;       TMRDS1820(); 	//读出温度指令
			; SOURCE LINE # 313
	ACALL	TMRDS1820
;       ReadDS1820(); //读出温度值
			; SOURCE LINE # 314
	ACALL	ReadDS1820
; 
;       V2ToV();        //转换显示值
			; SOURCE LINE # 316
	ACALL	V2ToV
;       if (TMV > TMSetV)   //根据采集到的温度值控制继电器
			; SOURCE LINE # 317
	SETB 	C
	MOV  	A,TMSetV
	XRL  	A,#080H
	MOV  	R0,A
	MOV  	A,TMV
	XRL  	A,#080H
	SUBB 	A,R0
	JC   	?C0045
;         {
			; SOURCE LINE # 318
;           RelayOutPort = 0;
			; SOURCE LINE # 319
	CLR  	P2_0
; 		  flag=0;
			; SOURCE LINE # 320
	MOV  	flag,#00H
; 		  }
			; SOURCE LINE # 321
	SJMP 	?C0046
?C0045:
;       else
; 		    {
			; SOURCE LINE # 323
;           RelayOutPort = 1;
			; SOURCE LINE # 324
	SETB 	P2_0
; 		  DELPort=1; 
			; SOURCE LINE # 325
	SETB 	P2_1
; 		  Second=1;
			; SOURCE LINE # 326
	MOV  	Second,#01H
; 		  flag=1;
			; SOURCE LINE # 327
	MOV  	flag,#01H
; 
; 		
;   		  }
			; SOURCE LINE # 330
?C0046:
; 
;       if (SetTF) IntNum2 = IntNum2 + 1; //用于闪烁计数
			; SOURCE LINE # 332
	JNB  	SetTF,?C0047
	INC  	IntNum2
?C0047:
;       if (IntNum2 > 50 ) IntNum2 = 0;
			; SOURCE LINE # 333
	MOV  	A,IntNum2
	SETB 	C
	SUBB 	A,#032H
	JC   	?C0048
	MOV  	IntNum2,#00H
?C0048:
; 			if (KeyTF) IntNum3 = IntNum3 + 1; //用于防止按键连按
			; SOURCE LINE # 334
	JNB  	KeyTF,?C0049
	INC  	IntNum3
?C0049:
; 			if (IntNum3 > 25) 
			; SOURCE LINE # 335
	MOV  	A,IntNum3
	SETB 	C
	SUBB 	A,#019H
	JC   	?C0050
; 				{
			; SOURCE LINE # 336
; 					IntNum3 = 0;
			; SOURCE LINE # 337
	MOV  	IntNum3,#00H
; 					KeyTF = 0;
			; SOURCE LINE # 338
	CLR  	KeyTF
; 				}
			; SOURCE LINE # 339
?C0050:
; 
;       if ((SetTF) && (IntNum2 < 25)) goto InitEnd;  //计数在后半段时显示
			; SOURCE LINE # 341
	JNB  	SetTF,?C0051
	MOV  	A,IntNum2
	CLR  	C
	SUBB 	A,#019H
	JC   	?C0053
?C0051:
;          
; 	  LEDPort = LED_Two;
			; SOURCE LINE # 343
	MOV  	P0,LED_Two
;       LEDTwoC = 0;
			; SOURCE LINE # 344
	CLR  	P3_6
;       Delay_510();
			; SOURCE LINE # 345
	ACALL	Delay_510
;       LEDTwoC = 1;    //显示十位数
			; SOURCE LINE # 346
	SETB 	P3_6
;       LEDPort = LED_Three;
			; SOURCE LINE # 347
	MOV  	P0,LED_Three
;       LEDThreeC = 0;
			; SOURCE LINE # 348
	CLR  	P3_7
;       Delay_510();
			; SOURCE LINE # 349
	ACALL	Delay_510
;       LEDThreeC = 1;    //显示个位数
			; SOURCE LINE # 350
	SETB 	P3_7
;     }
			; SOURCE LINE # 351
; InitEnd:;
			; SOURCE LINE # 352
?KeyAndDis_Time0?InitEnd:
; }
			; SOURCE LINE # 353
?C0053:
	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 # 355
; {
			; SOURCE LINE # 356
;   TLV = TLV >> 4;			
			; SOURCE LINE # 357
	MOV  	A,TLV
	SWAP 	A
	ANL  	A,#0FH
	MOV  	TLV,A
;   THV = THV << 4;			//读出的高低位数值移位
			; SOURCE LINE # 358
	MOV  	A,THV
	SWAP 	A
	ANL  	A,#0F0H
	MOV  	THV,A
;   TMV = TLV | THV;		//合并高低位放入TM为实际温度值
			; SOURCE LINE # 359
	ORL  	A,TLV
	MOV  	TMV,A
; 	Sign = 0;
			; SOURCE LINE # 360
	CLR  	A
	MOV  	Sign,A
;   if (SetTF || !Key_SET)
			; SOURCE LINE # 361
	JB   	SetTF,?C0055
	JB   	P1_2,?C0054
?C0055:
;     Sign = TMSetV >> 7;          //取符号
			; SOURCE LINE # 362
	MOV  	A,TMSetV
	MOV  	R0,#07H
?C0090:
	MOV  	C,ACC.7
	RRC  	A
	DJNZ 	R0,?C0090
	MOV  	Sign,A
	SJMP 	?C0056
?C0054:
;   else
;      Sign = TMV >> 7;
			; SOURCE LINE # 364
	MOV  	A,TMV
	MOV  	R0,#07H
?C0091:
	MOV  	C,ACC.7
	RRC  	A
	DJNZ 	R0,?C0091
	MOV  	Sign,A
?C0056:
; 
; 	if (Sign)
			; SOURCE LINE # 366
	MOV  	A,Sign
	JZ   	?C0057
; 		{
			; SOURCE LINE # 367
;   		if (SetTF || !Key_SET)
			; SOURCE LINE # 368
	JB   	SetTF,?C0059
	JB   	P1_2,?C0058
?C0059:
; 				{
			; SOURCE LINE # 369
;     			LED_One = (~(TMSetV-1)) / 100;          //SET状态下显示设定值
			; SOURCE LINE # 370
	MOV  	A,TMSetV
	DEC  	A
	CPL  	A
	MOV  	R7,A
	MOV  	B,#064H
	ACALL	?C?SCDIV
	MOV  	LED_One,A
;     			LED_Two = ((~(TMSetV-1)) - LED_One * 100)/10;
			; SOURCE LINE # 371
	MOV  	B,#064H
	MUL  	AB
	MOV  	R6,A
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R6
	MOV  	R7,A
	MOV  	B,#0AH
	ACALL	?C?SCDIV
	MOV  	LED_Two,A
; 			    LED_Three = (~(TMSetV-1)) - LED_One * 100 - LED_Two * 10;
			; SOURCE LINE # 372
	MOV  	B,#0AH
	MUL  	AB
	MOV  	R6,A
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R6
	MOV  	LED_Three,A
; 				inbuf1[0]=dis_8[LED_Two];
			; SOURCE LINE # 373
	MOV  	A,#LOW (dis_8)
	ADD  	A,LED_Two
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	inbuf1,A
;   inbuf1[1]=dis_8[LED_Three];
			; SOURCE LINE # 374
	MOV  	A,#LOW (dis_8)
	ADD  	A,LED_Three
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	inbuf1+01H,A
;   //inbuf1[2]=dis_8[ LED_Three];
;   inbuf1[2]=0x0d;
			; SOURCE LINE # 376
	MOV  	inbuf1+02H,#0DH
;   inbuf1[3]=0x0a;
			; SOURCE LINE # 377
	MOV  	inbuf1+03H,#0AH
; 				}
			; SOURCE LINE # 378
	SJMP 	?C0061
?C0058:
;   		else
; 				{
			; SOURCE LINE # 380
;     			LED_One = (~(TMV-1)) / 100;							//转换百位值		
			; SOURCE LINE # 381
	MOV  	A,TMV
	DEC  	A
	CPL  	A
	MOV  	R7,A
	MOV  	B,#064H
	ACALL	?C?SCDIV
	MOV  	LED_One,A
;     			LED_Two = ((~(TMV-1)) - LED_One * 100)/10;
			; SOURCE LINE # 382
	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 # 383
; 					inbuf1[0]=dis_8[LED_Two];
			; SOURCE LINE # 384
;   inbuf1[1]=dis_8[LED_Three];
			; SOURCE LINE # 385
;  inbuf1[2]=dis_8[0];
			; SOURCE LINE # 386
;   inbuf1[3]=0x0d;
			; SOURCE LINE # 387
;   inbuf1[4]=0x0a;
			; SOURCE LINE # 388
; 				}
			; SOURCE LINE # 389
; 		}
			; SOURCE LINE # 390
	SJMP 	?C0094
?C0057:
; 	else
; 		{ 
			; SOURCE LINE # 392
;   		if (SetTF || !Key_SET)
			; SOURCE LINE # 393
	JB   	SetTF,?C0063
	JB   	P1_2,?C0062
?C0063:
; 				{
			; SOURCE LINE # 394
;     			LED_One = (TMSetV) / 100;          //SET状态下显示设定值
			; SOURCE LINE # 395
	MOV  	A,TMSetV
	MOV  	B,#064H
	ACALL	?C?SCDIV
	MOV  	LED_One,A
;     			LED_Two = (TMSetV - LED_One * 100)/10;
			; SOURCE LINE # 396
	MOV  	B,#064H
	MUL  	AB
	MOV  	R7,A
	CLR  	C
	MOV  	A,TMSetV
	SUBB 	A,R7
?C0093:
; 			    LED_Three = TMSetV - LED_One * 100 - LED_Two * 10;
			; SOURCE LINE # 397
; 					inbuf1[0]=dis_8[LED_Two];
			; SOURCE LINE # 398
;   inbuf1[1]=dis_8[LED_Three];
			; SOURCE LINE # 399
;  inbuf1[2]=dis_8[0];
			; SOURCE LINE # 400
;   inbuf1[3]=0x0d;
			; SOURCE LINE # 401
;   inbuf1[4]=0x0a;
			; SOURCE LINE # 402
; 				}
			; SOURCE LINE # 403
	SJMP 	?C0094
?C0062:
;   		else
; 				{
			; SOURCE LINE # 405
;     			LED_One = (TMV) / 100;							//转换百位值		
			; SOURCE LINE # 406
	MOV  	A,TMV
	MOV  	B,#064H
	ACALL	?C?SCDIV
	MOV  	LED_One,A
;     			LED_Two = (TMV - LED_One * 100)/10;
			; SOURCE LINE # 407
	MOV  	B,#064H
	MUL  	AB
	MOV  	R7,A
	CLR  	C
	MOV  	A,TMV
	SUBB 	A,R7
?C0094:
	MOV  	R7,A
	MOV  	B,#0AH
	ACALL	?C?SCDIV
	MOV  	LED_Two,A
; 			    LED_Three = TMV - LED_One * 100 - LED_Two * 10;
			; SOURCE LINE # 408
	MOV  	B,#0AH
	MUL  	AB
	MOV  	R6,A
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R6
	MOV  	LED_Three,A
; 					inbuf1[0]=dis_8[LED_Two];
			; SOURCE LINE # 409
	MOV  	A,#LOW (dis_8)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -