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

📄 pump.lst

📁 毕业设计做的东西的硬件程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 543          {  
 544   1      // TMOD=0x51;
 545   1         TL1=(0xff&(-Bubble_NUM));
 546   1         TH1=(0xff&(-Bubble_NUM>>8));
 547   1         TR1=0;
 548   1      }
 549          /**********************************************************************************************
 550           函数:void T1_ISR(void)
 551           说明:定时器T1中断服务函数
 552          ***********************************************************************************************/
 553          void T1_ISR(void)  interrupt 3
 554          { 
 555   1        TR1=0;
 556   1        ET1=0;
 557   1        TR2=0;
 558   1        TMR3CN=0x00;
 559   1        EIE2=0x00;
 560   1        Bubble_alarm();
 561   1      }
 562          /**********************************************************************************************
C51 COMPILER V8.01   PUMP                                                                  09/19/2006 11:35:54 PAGE 14  

 563           函数:void PCA_ADC(void)
 564           说明:软件定时器方式,做第五个定时器用
 565          ***********************************************************************************************/
 566          void PCA_ADC(void)           
 567          {       PCA0MD = 0x02;      
 568   1              PCA0CN = 0x00;      
 569   1          PCA0H = 0x00;               
 570   1          PCA0L = 0x00;       
 571   1              PCA0CPM0 = 0x4C;        
 572   1              PCA0CPL0 = 0x88;        
 573   1              PCA0CPH0 = 0x88;        
 574   1              CR=1;               
 575   1      }
 576          /**********************************************************************************************
 577           函数:void T2_Set(void)
 578           说明:定时器T2寄存器设置函数,用来对超声波传感器处理后的信号进行计数,当无气泡时,在定时器溢出
 579                 前自动重载,如果有气泡,则会发生溢出。T2用于判断大于0.3ml的气泡。
 580          ***********************************************************************************************/
 581          void T2_Set(void) 
 582          {  RCAP2L=(0xff&(-Delay_LTime));
 583   1         RCAP2H=(0xff&(-Delay_LTime>>8));
 584   1         TL2=(0xff&(-Delay_LTime));
 585   1         TH2=(0xff&(-Delay_LTime>>8));
 586   1         T2CON=0x08;
 587   1         TR2=0;
 588   1      } 
 589          /**********************************************************************************************
 590           函数:void T3_Set(void)
 591           说明:定时器T3寄存器设置函数
 592          ***********************************************************************************************/
 593          void T3_Set(void)
 594          {  TMR3CN=0x00;
 595   1         SMB0CN=0xC1; 
 596   1         TMR3L=(0xff&(-Delay_STime));
 597   1         TMR3H=(0xff&(-Delay_STime>>8));
 598   1         TMR3RLL=(0xff&(-Delay_STime));
 599   1         TMR3RLH=(0xff&(-Delay_STime>>8));
 600   1      // TMR3CN=0x04;
 601   1         SCL=0;
 602   1         nop(20);
 603   1         SCL=1;
 604   1      } 
 605          /**********************************************************************************************
 606           函数:void T3_ISR(void)
 607           说明:定时器T3中断服务函数
 608          ***********************************************************************************************/
 609          void T3_ISR(void) interrupt 14
 610          {       
 611   1          TMR3CN=0x04;
 612   1          T1IN=!T1IN;
 613   1      }
 614          /**********************************************************************************************
 615           函数:void data_inv(void)
 616           说明:将键盘设置的流量或滴数转换为电机的控制参数,以滴作为基本单位,0.1ml对应为2滴.考虑中断循
 617                 环的时间,需要加上修正系数。
 618          ***********************************************************************************************/
 619          void data_inv(void)                          
 620          {uint c;
 621   1       ulint a,b;              
 622   1      //  if(Fluxdrop_Flag)
 623   1      //   Drop_Num=temp[3]+10*temp[2]+100*temp[1];
 624   1      // else 
C51 COMPILER V8.01   PUMP                                                                  09/19/2006 11:35:54 PAGE 15  

 625   1      //     Drop_Num=2*temp[3]+20*temp[2]+200*temp[1];
 626   1        if(Drop_Num==1)
 627   1            Buffer_NUM=2;
 628   1      //  else if((Drop_Num>4)&&(Drop_Num<25))
 629   1      //      Buffer_NUM=10;
 630   1        else
 631   1                Buffer_NUM=1;
 632   1      //  a=15000000/(Drop_Num*Drop_NStep);
 633   1      //  b=a-2;
 634   1      //  c=b/Buffer_NUM;
 635   1      //  PWM_Width=c-2;
 636   1          Flux_Pulse=0.2403*Drop_Num*Drop_Num+48.956*Drop_Num-0.0008*Drop_Num*Drop_Num*Drop_Num+169.8705;
 637   1              a=15000000/Flux_Pulse;
 638   1          b=a-2;
 639   1          c=b/Buffer_NUM;
 640   1          PWM_Width=c-2;
 641   1      }
 642          /**********************************************************************************************
 643           函数:void pulse_inv(void)
 644           说明:将键盘设置的输液量转换为电机的控制参数,以1ml作为基本单位,考虑不可能将容器中的药液完全
 645                 输出,需要扣除相应的保留值(8ml)
 646          ***********************************************************************************************/
 647          void pulse_inv(void)                         
 648          {uint All_Num;
 649   1       All_Num=20*temp2[3]+200*temp2[2]+2000*temp2[1];
 650   1       All_Pulse=(2*All_Num*Flux_Pulse)/Drop_Num;
 651   1      }
 652          /**********************************************************************************************
 653           函数:void Read_flash(void)
 654           说明:读出flash存储器中确切地址的数据
 655          ***********************************************************************************************/
 656          void Read_flash(void)
 657          { uchar code *pread;
 658   1        uchar i;
 659   1        pread=0x5000;             //读flash
 660   1        for(i=0;i<4;i++)
 661   1            { temp[i]=*(pread++);
 662   2                }
 663   1        for(i=0;i<4;i++)
 664   1            { temp2[i]=*(pread++);
 665   2                }
 666   1        for(i=0;i<10;i++)
 667   1            {lcd_data[i]=*(pread++);
 668   2                }
 669   1        delay(Time_1ms);
 670   1      }
 671          /**********************************************************************************************
 672           函数:Write_flash(void)
 673           说明:首先将flash固定区域的数据整页完全擦除,然后写入修改后的数据
 674          ***********************************************************************************************/
 675          void Write_flash(void)
 676          {uchar xdata *pwrite;
 677   1       uchar *pgen;
 678   1       uchar i;
 679   1       FLSCL=0x88;                    //擦除128字节的信息页
 680   1       PSCTL=0x03;
 681   1       pwrite=0x5000;
 682   1       *pwrite=0;
 683   1       PSCTL=0x01;
 684   1       pgen=temp;             //写flash
 685   1       for(i=0;i<4;i++)
 686   1          {
C51 COMPILER V8.01   PUMP                                                                  09/19/2006 11:35:54 PAGE 16  

 687   2              *(pwrite++)=*(pgen++);
 688   2              }
 689   1       pgen=temp2;             //写flash
 690   1       for(i=0;i<4;i++)
 691   1          {
 692   2              *(pwrite++)=*(pgen++);
 693   2              }
 694   1       pgen=lcd_data;
 695   1       for(i=0;i<10;i++)
 696   1          {
 697   2              *(pwrite++)=*(pgen++);
 698   2              }
 699   1       PSCTL=0;
 700   1       FLSCL=0x8f;
 701   1       delay(Time_20ms);
 702   1       }  
 703          /**********************************************************************************************
 704           函数:void keyinterrupt(void)
 705           说明:键盘中断服务函数,Hold键锁定时,不能进行任何操作。采用外部中断INT1
 706          ***********************************************************************************************/
 707          void keyinterrupt(void) interrupt 2     
 708          {uchar release_flag=0xFF;                              //按键是否释放的标志
 709   1       EX1=0;
 710   1       keycode=0x00;
 711   1       delay(Time_20ms);                                     //延迟时间以20ms为宜
 712   1       if(INT1==1)
 713   1         {  EX1=1;
 714   2           return;
 715   2         }
 716   1      code_h=0x7F;
 717   1      while((code_h&0x0f)==0x0f)                            //如果没有到最后一行,则继续扫描
 718   1        {
 719   2         P3=code_h;
 720   2         nop(20);
 721   2         if((P3&0x0F)!=0x0F)
 722   2           { code_l=((P3&0x0F)|0xF0);
 723   3                 keycode=((~code_h)|(~code_l));
 724   3             break;                                         //扫描到按键后退出扫描
 725   3            }
 726   2          else
 727   2             code_h=((code_h>>1)|0x80);
 728   2         }
 729   1      WDTCN=0xA5;
 730   1      switch(keycode)
 731   1           { 
 732   2               case 0x88:                                       //按键1
 733   2      //          if((Speed_Set==1)&&(Hold_Flag==0))
 734   2                       if(Speed_Set==1) 
 735   2 

⌨️ 快捷键说明

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