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

📄 pump.lst

📁 毕业设计做的东西的硬件程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -