📄 pump.lst
字号:
346 1 for(i=0;i<8;i++)
347 1 { if((data1&0x01)==0x01)
348 2 lcd2wbit(1);
349 2 else
350 2 lcd2wbit(0);
351 2 data1>>=1;
352 2 }
353 1 }
354 /**********************************************************************************************
355 函数:void lcdwd1(void)
356 说明:LCD4段数据传输函数
357 ***********************************************************************************************/
358 void lcd2wd1(void)
359 { uchar i;
360 1 for(i=0;i<5;i++)
361 1 {lcd2wd(l_data[i]);
362 2 } delay(1);}
363 /**********************************************************************************************
364 函数:void l2_set(void)
365 说明:各段显示数据设置,若存在小数点,则相应位的显示数据改变
366 ***********************************************************************************************/
367 void l2_set(void)
368 {uchar i;
369 1 l_data[0]=0xff;
370 1 if(Fluxdrop_Flag) //判断是流量还是滴数模式
371 1 Point_Flag=0xff;
372 1 else
373 1 Point_Flag=2;
374 1 for(i=1;i<5;i++)
375 1 {l_data[i]=lcd_data[temp2[i-1]];
376 2 }
C51 COMPILER V8.01 PUMP 09/19/2006 11:35:54 PAGE 11
377 1 // if(Point_Flag!=0xff)
378 1 // l_data[(Point_Flag+1)]=l_data[(Point_Flag+1)]&0x7F;
379 1 }
380 /**********************************************************************************************
381 函数:void display2(void)
382 说明:显示设置数据
383 ***********************************************************************************************/
384 void display2(void)
385 {l2_set();
386 1 lcd2wd1();
387 1 delay(Time_50ms);
388 1 WDTCN=0xA5;
389 1 delay(Time_50ms);
390 1 WDTCN=0xA5;
391 1 delay(Time_50ms);
392 1 WDTCN=0xA5;
393 1 delay(Time_50ms);
394 1 WDTCN=0xA5;
395 1 }
396 /**********************************************************************************************
397 函数:void noplay2(void)
398 说明:为实现闪烁,需要一段时间空白显示
399 ***********************************************************************************************/
400 void noplay2(void)
401 {uchar i;
402 1 for(i=1;i<6;i++)
403 1 l_data[i]=0xff;
404 1 lcd2wd1();
405 1 delay(Time_50ms);
406 1 WDTCN=0xA5;
407 1 delay(Time_50ms);
408 1 WDTCN=0xA5;
409 1 delay(Time_50ms);
410 1 WDTCN=0xA5;
411 1 delay(Time_50ms);
412 1 WDTCN=0xA5;
413 1 }
414
415 /**********************************************************************************************
416 函数:void SM_Set(void)
417 说明:电机工作方式和初始状态设置
418 ***********************************************************************************************/
419 void SM_Set(void)
420 { DAC0_Set();
421 1 SM_RST=0;
422 1 nop(5);
423 1 SM_RST=1;
424 1 nop(5);
425 1 SM_MODE=1;
426 1 SM_CW=1;
427 1 nop(5);
428 1 }
429 /**********************************************************************************************
430 函数:void Timer0_Set(void)
431 说明:定时器T0设置,用于电机PWM控制脉冲的产生,采用中断方式
432 ***********************************************************************************************/
433 void T0_Set(void)
434 {
435 1 TMOD=0x51;
436 1 TL0=((-PWM_Width)&0xff);
437 1 TH0=((-PWM_Width>>8)&0xff);
438 1 TR0=1;
C51 COMPILER V8.01 PUMP 09/19/2006 11:35:54 PAGE 12
439 1 }
440 /**********************************************************************************************
441 函数:void Timer0_ISR(void)
442 说明:定时器T0中断服务函数,当驱动步进电机的PWM频率比较小,延迟时间比较长的时候,在中断中进行
443 时间累积,达到一定时间后,变换驱动脉冲的电平值
444 ***********************************************************************************************/
445 void T0_ISR(void) interrupt 1
446 { TR0=0;
447 1 TL0=((-PWM_Width)&0xff);
448 1 TH0=((-PWM_Width>>8)&0xff);
449 1 TR0=1;
450 1 BUFFER++;
451 1 if(BUFFER==Buffer_NUM)
452 1 { BUFFER=0;
453 2 SM_CLK1=!SM_CLK1;
454 2 }
455 1 All_Pulse--;
456 1 if(All_Pulse==0)
457 1 { SR_Flag=0;
458 2 SM_SR();
459 2 }
460 1 }
461 /**********************************************************************************************
462 函数:void SM_SR(void)
463 说明:电机运行控制,当运行标志为1时,电机运转,反之停转
464 ***********************************************************************************************/
465 void SM_SR(void)
466 { if(SR_Flag)
467 1 {
468 2 T0_Set();
469 2 SM_RST=1;
470 2 nop(5);
471 2 SM_EN=1;
472 2 // nop(5);
473 2 // ET1=1;
474 2 // EIE2=0x01;
475 2 // TR1=1;
476 2 // TR2=1;
477 2 // TMR3CN=0x04;
478 2 }
479 1 else
480 1 { SM_EN=0;
481 2 SM_RST=0;
482 2 TR0=0;
483 2 // ET0=0;
484 2 TR1=0;
485 2 TR2=0;
486 2 TMR3CN=0x00;
487 2 }
488 1 }
489 /**********************************************************************************************
490 函数:void DAC0_Set(void)
491 说明:设置斩波驱动的比较电压,取内部电压基准2.4V,给DAC偏置,考虑电流为400mA,取样电阻阻值为0.7,
492 目前取0.26V,采用12位分辨率时,应先设置DAC0L,后设置DAC0H
493 ***********************************************************************************************/
494 void DAC0_Set(void)
495 { REF0CN=0x03;
496 1 DAC0L=(0xff&DAC0_DATA);
497 1 DAC0H=(0xff&(DAC0_DATA>>8));
498 1 DAC0CN=0x80;
499 1 }
500 /**********************************************************************************************
C51 COMPILER V8.01 PUMP 09/19/2006 11:35:54 PAGE 13
501 函数:void DAC1_Set(void)
502 说明:设置LM306P的比较电压,取内部电压基准2.4V,给DAC偏置,暂取1.8V,初值十六进制为0x0c00,采用
503 12位分辨率时,应先设置DAC1L,后设置DAC1H
504 ***********************************************************************************************/
505 void DAC1_Set(void)
506 { REF0CN=0x03;
507 1 DAC1L=(0xff&DAC1_DATA);
508 1 DAC1H=(0xff&(DAC1_DATA>>8));
509 1 DAC1CN=0x80;
510 1 }
511 /**********************************************************************************************
512 函数:void ADC_Set(void)
513 说明:取内部参考电压2.4V,当检测到电源电压大于2.28V,或是小于1.93V时,提示电源电压低于限定值,
514 停机,报警。选用通道0,单端输入方式,窗口比较模式.采样后结果为2.04,电压表测量为2.06V,
515 还可以
516 ***********************************************************************************************/
517 void ADC_Set(void)
518 { AMX0CF = 0x00;
519 1 AMX0SL = 0x00;
520 1 ADC0CF = 0x60;
521 1 ADC0CN = 0x48;
522 1 ADC0LTH = 0x0C;
523 1 ADC0LTL = 0xA1;
524 1 ADC0GTH = 0x0F;
525 1 ADC0GTL = 0x33;
526 1 ADCEN=1;
527 1 }
528 /**********************************************************************************************
529 函数:void ADC_ISR(void) interrupt 8
530 说明:ADC中断函数,当电源电压低于正常值时,停机,报警 (模拟电源需要关闭,不知是什么意思)
531 ***********************************************************************************************/
532 void ADC_ISR(void) interrupt 8
533 { EIE1=0x00;
534 1 Lpower_LED=0;
535 1 SR_Flag=0;
536 1 SM_SR();
537 1 }
538 /**********************************************************************************************
539 函数:void T1_Set(void)
540 说明:定时器T1寄存器设置函数
541 ***********************************************************************************************/
542 void T1_Set(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -