📄 fuzzy_pid.lst
字号:
C51 COMPILER V7.06 FUZZY_PID 01/17/2007 13:01:08 PAGE 5
240 {
241 1 uint i;
242 1 bit b;
243 1 ddata =0;
244 1 i++;
245 1 ddata=1;
246 1 i++;
247 1 i++;
248 1
249 1 b=ddata;
250 1 i=8;
251 1 while(i>0)
252 1 {
253 2 i--;
254 2 }
255 1 return(b);
256 1 }
257 /**************************************************************************************************
258 读取一个字节
259
260 ***************************************************************************************************/
261 uchar RdByte(void)
262 {
263 1 uchar i,j,b;
264 1 b=0;
265 1 for(i=1;i<=8;i++)
266 1 {
267 2 j=RdBit();
268 2 b=(j<<7)|(b>>1);
269 2 }
270 1 return(b);
271 1 }
272 /***************************************************************************************************
273 写数据的一个字节
274
275 ***************************************************************************************************/
276 void WrByte(uchar b)
277 {
278 1 uint i;
279 1 uchar j;
280 1 bit btmp;
281 1 for(j=1;j<=8;j++)
282 1 {
283 2 btmp=b&0x01;
284 2 b=b>>1;
285 2 if(btmp)
286 2 {
287 3 ddata=0;
288 3 i++;
289 3 i++;
290 3 ddata=1;
291 3 i=8;
292 3 while(i>0)
293 3 {
294 4 i--;
295 4 }
296 3 }
297 2 else
298 2 {
299 3 ddata=0;
300 3 i=8;
301 3 while(i>0)
C51 COMPILER V7.06 FUZZY_PID 01/17/2007 13:01:08 PAGE 6
302 3 {
303 4 i--;
304 4 }
305 3 ddata=1;
306 3 i++;
307 3 i++;
308 3 }
309 2 }
310 1 }
311 /**************************************************************************************************
312 启动温度转换
313
314 ***************************************************************************************************/
315 void convert(void)
316 {
317 1 TxReset();
318 1 RxWait();
319 1 delay(1);
320 1 WrByte(0xcc);
321 1 WrByte(0x44);
322 1 }
323 /***************************************************************************************************
324 读取温度
325 读取温度数据
326 ***************************************************************************************************/
327 void RdTemp(void)
328 {
329 1 uchar tlsb,thsb; //存储温度数据,tlsb存低位,thsb存高位
330 1
331 1 convert(); //开启温度转换
332 1
333 1 TxReset();
334 1 RxWait();
335 1 delay(1);
336 1 WrByte(0xcc);
337 1 WrByte(0xbe);
338 1 tlsb=RdByte();
339 1 thsb=RdByte();
340 1
341 1 Temp[2]=ttable[(tlsb&0x0f)]; //得到二进制小数位,在查表得到要显示的小数(保留小数点后一位)
342 1
343 1 Temp[4]=((tlsb&0x0f0)>>4)|((thsb&0x0f)<<4); //得到整数位
344 1 Temp[0]=Temp[4]/10; //得到十位数
345 1 Temp[1]=Temp[4]%10; //得到个位
346 1
347 1 if(Temp[4]>Temp_max) //达到上限温度报警
348 1 LED1=0;
349 1 else
350 1 LED1=1;
351 1 }
352 /***************************************************************************************************
353 查表求行向量 Ec
354 说明:每个采样周期查表返回行值
355 ***************************************************************************************************/
356 uchar table_Ec(void)
357 {
358 1 uchar row;
359 1
360 1 uchar Ec;
361 1 uchar Ec1;
362 1 uchar Ec2;
363 1 uchar Ec3;
C51 COMPILER V7.06 FUZZY_PID 01/17/2007 13:01:08 PAGE 7
364 1
365 1 bit flag;
366 1
367 1 Ec1=para[4];
368 1 Ec2=2*para[4];
369 1 Ec3=3*para[4];
370 1
371 1 if(Temp[6]>=Temp[5])
372 1 {
373 2 flag=0;
374 2 Ec=Temp[6]-Temp[5];
375 2 }
376 1 else
377 1 {
378 2 flag=1;
379 2 Ec=Temp[5]-Temp[6];
380 2 }
381 1 if(Ec>=Ec3)
382 1 {
383 2 if(flag)
384 2 row=0;
385 2 else
386 2 row=6;
387 2 }
388 1 else if(Ec>=Ec2&&Ec<=Ec3)
389 1 {
390 2 if(flag)
391 2 row=1;
392 2 else
393 2 row=5;
394 2 }
395 1 else if(Ec>=Ec1&&Ec<=Ec2)
396 1 {
397 2 if(flag)
398 2 row=2;
399 2 else
400 2 row=4;
401 2 }
402 1 else
403 1 {
404 2 row=3;
405 2 }
406 1 return(row);
407 1 }
408 /***************************************************************************************************
409 查表求列向量 E
410 说明:每个采样周期查一次表返回列值
411 ***************************************************************************************************/
412 uchar table_E(void)
413 {
414 1 uchar column;
415 1
416 1 uchar E1;
417 1 uchar E2;
418 1 uchar E3;
419 1 uchar E;
420 1
421 1 uchar flag;
422 1
423 1 E1=para[1]/2;
424 1 E2=para[1]+E1;
425 1 E3=2*para[1]+E1;
C51 COMPILER V7.06 FUZZY_PID 01/17/2007 13:01:08 PAGE 8
426 1
427 1 if(para[3]>=Temp[4])
428 1 {
429 2 flag=1;
430 2 E=para[3]-Temp[4];
431 2 }
432 1 else
433 1 {
434 2 flag=0;
435 2 E=Temp[4]-para[3];
436 2 }
437 1 if(E>=E3)
438 1 {
439 2 if(flag)
440 2 column=0;
441 2 else
442 2 column=6;
443 2 }
444 1 else if(E>=E2&&E<=E3)
445 1 {
446 2 if(flag)
447 2 column=1;
448 2 else
449 2 column=5;
450 2 }
451 1 else if(E>=E1&&E<=E2)
452 1 {
453 2 if(flag)
454 2 column=2;
455 2 else
456 2 column=4;
457 2 }
458 1 else
459 1 {
460 2 column=3;
461 2 }
462 1 return(column);
463 1 }
464 /***************************************************************************************************
465 加子程序
466 ***************************************************************************************************/
467 void Add_para(void)
468 {
469 1 para[parameter]++;
470 1 }
471 /***************************************************************************************************
472 减子程序
473 ***************************************************************************************************/
474 void delect_para(void)
475 {
476 1 para[parameter]--;
477 1 if(para[parameter]<0)
478 1 para[parameter]=0;
479 1 }
480 /***************************************************************************************************
481 参数选择子程序
482 ***************************************************************************************************/
483 void select_para(void)
484 {
485 1 parameter++;
486 1 if(parameter>4)
487 1 parameter=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -