3KG电子称 自动灌装C语言 编程

//***********3KG电子称测试程序**HX711电路板*****************
//******2013 6 23 13:10 L714 自动称重测试 版本V1.0
/***3.2  1.4 0.7 3.1 ***********************/
/***0.6  0.5 0.4 rst ***********************/
/*******************************************/
/***设定 返回 ******************************/
/***重量 位选 清零 复位*********************/
/********-------------------------**********/
/*******|设定 00000 |***********************/
/*******|实际 00000 |***********************/
/*******|产量 0000  |***********************/
/*******|灌装 00285 |***********************/
/********-------------------------**********/
                  #include       <reg52.h>
                  #include       <intrins.h>
                  #define        uint unsigned int 
                  #define        uchar unsigned char 
                  uchar          code disdt[10]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9};
                  uint           val,val1,val2,val3;      /*设定重量 实际重量 灌装结束重量 产量 */
                  uint           a,l,m,n,k,s,w,ww;             /****个十百代码缓冲**/
                  sbit           Buzzer=P1^1;
                  sbit           OUT1=P1^0;  
                  sbit           OUT2=P1^1;
                  sbit           OUT3=P1^3;  
                  unsigned long  HX711_Buffer = 0;
                  unsigned int   Weight_Maopi = 0,WeiDATA =0;
                  uint           t0,t1,t2,t3,t4,ta,tb,tc,td,te,t01,t02,t03,t04;
                  uchar             TBIT;                   //光标地址计数器
                  sbit           HX711_DOUT=P3^3; 
                  sbit           HX711_SCK=P3^4; 
                  sbit           RS=P3^5; 
                  sbit           RW=P3^6; 
                  sbit           E=P3^7; 
                  sbit           SDA=P1^7;               /****EEPROM数据****/
                  sbit           SCL=P1^6;               /****EEPROM脉冲****/
                  sbit           SETWEIGHT=P3^2;          //重量设定
                  sbit           BACK=P1^4;              //重量设定
                  sbit           WEIGHTSET=P0^6;          //重量
                  sbit           WEIGHTBIT=P0^5;          //重量位选
                  sbit           WEIGHTCLR=P3^1;          //归零
                  sbit           TOTALCLR=P0^4;          //产量清零
                  sbit           MUTALAIR=P0^7;          //手动灌装
                  sbit           Filling=P0^0;              //灌装P0^0;     
                  #define         Lcd_Bus P2 
                  bdata          char com_data;   
                  sbit           mos_bit=com_data^7;     /****高位****/
                  sbit           low_bit=com_data^0;     /****低位****/
/**************************************/
                 void start()
                 {
                   SDA=1;_nop_();_nop_();_nop_();_nop_();
                   SCL=1;_nop_();_nop_();_nop_();_nop_();
                   SDA=0;_nop_();_nop_();_nop_();_nop_();
                   SCL=0;_nop_();_nop_();_nop_();_nop_();
                  }
/***************************************/
                 void stop()
                 {
                   SDA=0;_nop_();_nop_();_nop_();_nop_();
                   SCL=1;_nop_();_nop_();_nop_();_nop_();
                   SDA=1;_nop_();_nop_();_nop_();_nop_();
                  }
/***************************************/
                 void ack()
                 {
                   SCL=1;_nop_();_nop_();_nop_();_nop_();
                   SCL=0;_nop_();_nop_();_nop_();_nop_();
                  }
/***************************************/
                 void shift8(char a)
                  {
                    data uchar i;
                    com_data=a;
                    for(i=0;i<8;i++)
                     {
                       SDA=mos_bit;
                       SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
                       SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
                       com_data=com_data*2;
                      }
                    }
/***************************************/
                 void delay_iic(int v)
                     {
                       int i;
                       for(i=1;i<v;i++){;}
                      } 
/***************************************/
                 uchar rd_24c01(char a)
                   {
                     data uint i,command;
                     SDA=1;_nop_();_nop_();_nop_();_nop_();
                     SCL=0;_nop_();_nop_();_nop_();_nop_();
                     start();
                     command=160;
                     shift8(command);                            /*****写入160*****/
                     ack();
                     shift8(a);
                     ack();
                     start();
                     command=161;
                     shift8(command);                            /*****写入161*****/
                     ack();
                     SDA=1;_nop_();_nop_();_nop_();_nop_();
                     for(i=0;i<8;i++)
                     {
                      com_data=com_data*2;
                      SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
                      low_bit=SDA;
                      SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
                     }
                    stop();
                    return(com_data);
                  }
/***************************************/
                 void wr_24c01(char a,char b)
                  {
                    data uint command;
                    _nop_();_nop_();_nop_();_nop_();_nop_();
                    SDA=1;_nop_();_nop_();_nop_();_nop_();
                    SCL=0;_nop_();_nop_();_nop_();_nop_();
                    start();
                    command=160;
                    shift8(command);                             /*****写入160*****/
                    ack();
                    shift8(a);                                   /*****写入 a *****/
                    ack();
                    shift8(b);                                   /*****写入 b *****/
                    ack();
                    stop();
                    _nop_();_nop_();_nop_();_nop_();_nop_();
                  }
/*********写入EEPROM 运行总时*****************************/
               void writea(void)
                  { 
                   wr_24c01(1,a);delay_iic(200);                 /*写入万位*/
                   wr_24c01(2,l);delay_iic(200);                 /*写入千位*/
                   wr_24c01(3,m);delay_iic(200);                 /*写入百位*/
                   wr_24c01(4,n);delay_iic(200);                 /*写入十位*/
                   wr_24c01(5,s);delay_iic(200);                 /*写入个位*/
                  }  
 /**************************************/
               void red24 (void)
                  { 
                     a=rd_24c01(1);delay_iic(25);                  /*数据万位*/
                   l=rd_24c01(2);delay_iic(25);                  /*数据千位*/
                   m=rd_24c01(3);delay_iic(25);                  /*数据百位*/
                   n=rd_24c01(4);delay_iic(25);                  /*数据十位*/
                   s=rd_24c01(5);delay_iic(25);                  /*数据个位*/
                   val1=a*10000+l*1000+m*100+n*10+s;/*x置初值合并A数据 百位乘百 十位乘十*/
                  }
/*------------------检查忙位--------------------------*/ 
                void chk_busy() 
                   { 
                    RS=0; 
                    RW=1; 
                    E=1; 
                    Lcd_Bus=0xff; 
                    while((Lcd_Bus&0x80)==0x80); 
                    E=0; 
                   } 
/*------------------延时子程序------------------------*/ 
                void delay(unsigned int t) 
                   { 
                    uint i,j; 
                    for(i=0;i<t;i++) 
                    for(j=0;j<20;j++); 
                   }                
/*------------------写命令到LCD-----------------------*/ 
                void write_com(uchar cmdcode) 
                  { 
                    chk_busy(); 
                    RS=0; 
                    RW=0; 
                    E=1; 
                    Lcd_Bus=cmdcode; 
                    delay(3);                            /*在数据写入的时候加入适当的延时*/ 
                    E=0; 
                    delay(3); 
                   } 
/*-------------------写数据到LCD----------------------*/ 
                void write_data(unsigned char Dispdata) 
                  { 
                    chk_busy(); 
                    RS=1; 
                    RW=0; 
                    E=1; 
                    Lcd_Bus=Dispdata; 
                    delay(3);                           /*在数据写入的时候加入适当的延时 */
                    E=0; 
                    delay(3); 
                  } 
/*------------------显示文字--------------------------*/ 
             void   displaywriting()                                     
               {                                               
                write_com(0x80);                              
                write_data(0xC9);                           
                write_data(0xE8);                 
                write_com(0x81);                               
                write_data(0xB6);
                write_data(0xA8);                  //设定  
                write_com(0x82); 
                write_data(0xA3);
                write_data(0xBA);                  /*---:----*/ 
                write_com(0x90);                              
                write_data(0xD6);                           
                write_data(0xD8);                 
                write_com(0x91);                               
                write_data(0xC1);
                write_data(0xBF);                  //实际 改皮重
                write_com(0x92); 
                write_data(0xA3);
                write_data(0xBA);                  /*---:----*/ 
                write_com(0x88);                              
                write_data(0xB2);                           
                write_data(0xFA);                 
                write_com(0x89);                               
                write_data(0xC1);
                write_data(0xBF);                  //产量
                write_com(0x8A); 
                write_data(0xA3);
                write_data(0xBA);                  /*---:----*/ 
               } 
/*------------------显示灌装---------------------------------*/ 
             void     disfilling()
               { 
                write_com(0x98);                              
                write_data(0xB9);                           
                write_data(0xE0);                 
                write_com(0x99);                               
                write_data(0xD7);
                write_data(0xB0);                  //灌装
               } 
/*------------------清除灌装---------------------------------*/ 
             void  clrfilling()
               { 
                write_com(0x98);                              
                write_data(0xB6);                           
                write_data(0xA0);                 
                write_com(0x99);                               
                write_data(0xB6);
                write_data(0xA0);                  //清除显示灌装
               } 
/*------------------显示设定重量数据--------------------------*/ 
            void   displaya()                                     
               {                                               
                write_com(0x83);                              
                write_data(0xA3);                           
                write_data(disdt[a]);                      
                write_com(0x84);                               
                write_data(0xA3);
                write_data(disdt[l]);        
                write_com(0x85);                             
                write_data(0xA3); 
                write_data(disdt[m]);    
                write_com(0x86);                               
                write_data(0xA3);
                write_data(disdt[n]);        
                write_com(0x87);                             
                write_data(0xA3); 
                write_data(disdt[s]);
                }  
/*------------------显示实际重量数据--------------------------*/ 
             void   displayb()                                     
               {                                               
                write_com(0x93);                              
                write_data(0xA3);                           
                write_data(disdt[t0]);                      
                write_com(0x94);                               
                write_data(0xA3);
                write_data(disdt[t1]);        
                write_com(0x95);                             
                write_data(0xA3); 
                write_data(disdt[t2]);    
                write_com(0x96);                               
                write_data(0xA3);
                write_data(disdt[t3]);        
                write_com(0x97);                             
                write_data(0xA3); 
                write_data(disdt[t4]); 
               }  
/*------------------显示结束重量数据--------------------------*/ 
             void   displayc()                                     
               {                                               
                write_com(0x9a);                              
                write_data(0xA3);                           
                write_data(disdt[ta]);                      
                write_com(0x9b);                               
                write_data(0xA3);
                write_data(disdt[tb]);        
                write_com(0x9c);                             
                write_data(0xA3); 
                write_data(disdt[tc]);    
                write_com(0x9d);                               
                write_data(0xA3);
                write_data(disdt[td]);        
                write_com(0x9e);                             
                write_data(0xA3); 
                write_data(disdt[te]); 
               }  
/*------------------显示产量--------------------------*/ 
             void   displayd()                                     
               {                                               
                write_com(0x8c);                              
                write_data(0xA3);                           
                write_data(disdt[t01]);                      
                write_com(0x8d);                               
                write_data(0xA3);
                write_data(disdt[t02]);        
                write_com(0x8e);                             
                write_data(0xA3); 
                write_data(disdt[t03]);    
                write_com(0x8f);                               
                write_data(0xA3);
                write_data(disdt[t04]); 
                }       
/*------------------初始化LCD屏-----------------------*/ 
           void lcdreset() 
               {
                delay(300);
                RW=0; 
                delay(10);                                       /*选择基本指令集 */
                write_com(0x30);                                 /*选择8bit数据流 */
                delay(50); 
                write_com(0x0F);                                 /*开显示(无游标、不反白) */
                delay(50); 
                write_com(0x01);                                 /*清除显示,并且设定地址指针为00H */
                delay(50); 
                write_com(0x04);                                 /*游标的移动方向及指定显示的移位*/ 
                delay(50); 
               } 
/*******************************************/
              void Delay__hx711_us(void)
              {
               _nop_();
               _nop_();
              }
/*******************************************/
              void Delay_ms(unsigned int n)
              {
               unsigned int  i,j;
               for(i=0;i<n;i++)
               for(j=0;j<123;j++);
              }
/*******************************************/
              unsigned long HX711_Read(void)    //增益128
              {
               unsigned long count; 
               unsigned char i; 
                 HX711_DOUT=1; 
               Delay__hx711_us();
                 HX711_SCK=0; 
                 count=0; 
                 while(HX711_DOUT); 
                 for(i=0;i<24;i++)
               { 
                HX711_SCK=1; 
                count=count<<1; 
                HX711_SCK=0; 
                if(HX711_DOUT)
                count++; 
               } 
                HX711_SCK=1; 
               Delay__hx711_us();
               HX711_SCK=0;  
               return(count);
              }
/*******************************************/
              void Get_Weight()
              {
               HX711_Buffer=HX711_Read();
               HX711_Buffer=HX711_Buffer/100;
               if(HX711_Buffer > Weight_Maopi)            
               {
                WeiDATA=HX711_Buffer;
                WeiDATA=WeiDATA- Weight_Maopi;                //获取实物的AD采样数值。
                WeiDATA=(unsigned int)((float)WeiDATA/13.2+0.05);     //计算实物的实际重量
                if(WeiDATA>25000 )
                 {
                 Buzzer=0;                //打开警报    
                 }
                else
                 {
                  Buzzer=1;                //关闭警报
                 }
               }
             else if(HX711_Buffer<Weight_Maopi-30)
               {
                Buzzer=0;                //负重量报警
               }
              }
/*******************************************/
              void Get_Maopi()
              {
               unsigned char i=0;
               unsigned int Temp_Weight=0;
               Weight_Maopi=0;
               for( i=0;i<10;i++)
               {
                HX711_Buffer=HX711_Read();
                Temp_Weight=HX711_Buffer/100;
                 if(Temp_Weight>Weight_Maopi)
                 {
                  Weight_Maopi=Temp_Weight;     
                 }
                }        
               } 
/**************设定重量处理*****************************/
               void  dispose1()
               {
                a=val1/10000;                                    /*除以10000*/
                l=(val1-a*10000)/1000;                           /*除以1000*/
                m=(val1-a*10000-l*1000)/100;                     /*减t1x1000再除以100*/
                n=(val1-a*10000-l*1000-m*100)/10;                /*减t1x1000再减t2X100*/
                s=val1-a*10000-l*1000-m*100-n*10;                /*分离千 百 十 个三位*/
               }   
/***************实际重量处理****************************/
              void   dispose2()
               {      
                t0=WeiDATA/10000;
                t1=WeiDATA%10000/1000 ;
                t2=WeiDATA%1000/100 ;
                t3=WeiDATA%100/10;
                t4=WeiDATA%10;
                }
/***************实际重量处理****************************/
              void   dispose3()
               {      
                ta=val2/10000;
                tb=val2%10000/1000 ;
                tc=val2%1000/100 ;
                td=val2%100/10;
                te=val2%10;
                }
/************************产量处理**********************/       
                void  addtotal()
                {
                 if(val3>9999){val3=0;}                 /*大于9999归零*/
                 t01=val3/1000;                          /*除以1000*/
                 t02=(val3-t01*1000)/100;                 /*减t1x1000再除以100*/
                 t03=(val3-t01*1000-100*t02)/10;           /*减t1x1000再减t2X100*/
                 t04=val3-t01*1000-100*t02-10*t03;          /*分离千 百 十 个三位*/
                 }           
/*--------------显示万位--------------------------*/
              void   TenThousands() 
                {  
                 write_com(0x83);                                /*地址*/
                 write_data(0xA3);                               /*半个字符*/
                 write_data(disdt[a]);                           /*万位*/  
                } 
/*--------------显示千位---------------------------*/
             void   Thousands() 
                {  
                 write_com(0x84);                                 /*地址*/
                 write_data(0xA3);                                /*半个字符*/
                 write_data(disdt[l]);                           /*千位*/  
                } 
/*--------------显示百位---------------------------*/
             void   hundreds()
                {  
                 write_com(0x85);                                 /*地址*/
                 write_data(0xA3);                                /*半个字符*/
                 write_data(disdt[m]);                           /*百位*/ 
                } 
/*--------------显示十位---------------------------*/                
             void   decade()
               {
                write_com(0x86);                                 /*地址*/
                write_data(0xA3);                                /*半个字符*/
                write_data(disdt[n]);                           /*十位*/
               }
/*--------------显示个位---------------------------*/
           void    single()
                {  
                 write_com(0x87);                                 /*地址*/
                 write_data(0xA3);                                /*半个字符*/
                 write_data(disdt[s]);                           /*个位*/ 
                } 
/*---------------显示位选光标-------------------*/
              void displaybit()
                {     
                 switch(TBIT)
                 {
                   case 1:                                          /*光标个位显示*/
                  {
                   single();                                       /*个位数据显示*/
                   //decade();                                       /*十位数据显示光标自动后移一位*/
                   break;                                           /*子程序返回*/
                  }
                  case 2:                                          /*光标十位显示*/
                  {
                   decade();                                       /*十位数据显示*/
                   //hundreds();                                       /*百位数据显示光标自动后移一位*/
                   break; /*子程序返回*/
                  }
                  case 3:                                          /*光标百位显示*/
                  {
                   hundreds();                                       /*百位数据显示*/
                   //Thousands();                                       /*千位数据显示光标自动后移一位*/
                   break; /*子程序返回*/
                  }
                  case 4:                                          /*光标千位显示*/
                  {
                   Thousands();                                       /*千位数据显示*/
                   //TenThousands();                                 /*万位数据显示光标自动后移一位*/
                   break; /*子程序返回*/
                  }
                  case 5:                                          /*光标千位显示*/
                   {
                   TenThousands();                                   /*万位数据显示*/
                   //write_com(0x82); 
                   //write_data(0xA3);
                   //write_data(0xBA);                               /*---:显示光标自动后移一位----*/ 
                   break;                                           /*子程序返回*/
                   }
                  }
                }  
/*----------设定重量按位加-------------------------*/
               void   setda1on()                                  /*写数据B子函数*/
                  {                                                /*子函数开始*/
                   dispose1();                                       /*设定重量处理分离各位*/                         
                   switch (TBIT)
                   {
                    case 1:                                        /*光标个位显示*/
                     {
                      s++;
                      if(s>=10)
                      {s=0;}
                      single();
                      //decade();
                      break;
                     }
                    case 2:                              /*光标十位显示*/
                     {
                      n++;
                      if(n>=10)
                         {n=0;}
                      decade();
                      //hundreds();
                      break;
                     }
                    case 3:                              /*光标百位显示*/
                     {
                      m++;
                        if(m>=10)
                      {m=0;}
                      hundreds();
                      //Thousands();
                      break;
                      }
                    case 4:                              /*光标千位显示*/
                     { 
                      l++;
                      if(l>=10)
                      {l=0;}
                      Thousands();
                      //TenThousands();
                      break;
                     }
                    case 5:                                 /*光标千位显示*/
                     { 
                      a++;
                      if(a>=4)
                      {a=0;}
                        TenThousands();                         /*万位显示*/
                     
                      break;
                     }
                    }
                    val1=a*10000+l*1000+m*100+n*10+s;
                    writea();                              /*百 十 个三位写入EEPROM*/
                   }    
/*******************************************/
              void main()
              {
               lcdreset();
               Delay_ms(1000);                           //延时1s,等待传感器稳定
               displaywriting();                     //显示文字
               Get_Maopi();                             //称毛皮重量
               TBIT=0;
               Get_Weight();                         //称重
               dispose2();                           //数据处理取实际重量个十百千万位值
               displayb();                           //显示实际重量数据
               red24 ();                             //读EEPROM数据 取设定值数据
               dispose1();                           //数据处理取设定重量个十百千万位值
               displaya();                           //显示设定重量数据
               val3=0;
               k=0;w=0;                                 //延时计时标记归零
               addtotal();                  /*处理产量统计 分离个十百千位*/
               displayd();
                while(1)
                {         
                   if(!SETWEIGHT)                      /*设置重量按键*/
                   {                                 /*循环*/
                    for(;k<=25;)                     /*小于等于25循环*/
                    {
                     if(!SETWEIGHT)                  /*检测重量按键为低电平?*/
                     {  
                      k++;
                     }
                   else if(~!SETWEIGHT)                  /*检测重量按键为低电平?*/
                    {  
                     k=0;break; 
                    }
                    k=0;
                    dispose1();                           //数据处理取设定重量个十百千万位值
                    displaya();                           //显示设定重量数据
                    ww=10;
                    do
                     {
                    if(!WEIGHTSET)                     
                      {//3                                
                       for(;w<=25;)                    
                       {      //2
                       if(!WEIGHTSET)                 
                         {     //1                              
                          OUT3=0;
                          w++;
                          delay(10); 
                          }     //1
                        else if(~WEIGHTSET)        
                         w=0;break;                                   
                        }       //2                             
                       w=0;OUT3=1;                       
                       _nop_();_nop_();               
                       setda1on();                     
                       delay(600); 
                      }//3                            // 重量设置结束                           
                       else if(!WEIGHTBIT)                /**重量位选按键**/
                       {         //3                              
                        for(;w<=25;)                    
                         {       //2
                          if(!WEIGHTBIT)                
                          {     //1                                             
                          OUT3=0;
                          w++;
                          delay(10); 
                          }     //1
                           else if(~WEIGHTBIT)            
                           w=0;break;                                   
                          }       //2   
                        w=0;OUT3=1;                    
                        TBIT++;                        
                        if(TBIT>=6)    
                        {TBIT=0;}             
                        displaybit();                 
                        delay(2500);
                       }       //3  
                        else if(!BACK)              /**重量位选按键**/
                        {                                  
                         ww=0;
                         }    
                       }  
                      while(ww>5);
                     }

                    }
                    if(!Filling)                    /*检测灌装开关为低电平?**/
                      {                              /*自动开始*/
                       for(;k<=10;)                  /*寄存器复位*/
                       {
                         if(!Filling)                /*检测灌装开关为低电平?*/
                         {                           /*自动运行*/
                          k++;
                          delay(10); 
                          }
                         else if(~!Filling)          /*检测灌装开关为高电平?*/
                         k=0;break;                  /*寄存器复位返回循环*/                                
                        }
                        val2=0;
                        dispose3();                  //数据处理取实际重量个十百千万位值
                        displayc();                  //显示实际重量数据
                        k=0;                         /*寄存器复位*/
                        disfilling();
                        OUT1=0; OUT2=0;              /*灌装输出*/
                        while(WeiDATA<val1)    
                        {
                        Get_Weight();                 //称重
                        dispose2();                  //数据处理取实际重量个十百千万位值
                        displayb();                  //显示实际重量数据
                        }
                        val2=val1;
                        OUT1=1;OUT2=1;                 /*灌装关*/
                        clrfilling();  
                        dispose3();                  //数据处理取实际重量个十百千万位值
                        displayc();                  //显示实际重量数据
                        val3++;
                        addtotal();                  /*处理产量统计 分离个十百千位*/
                        displayd();                  //显示产量
                       }
                      if(!TOTALCLR)                      /*设置重量按键*/
                       {                                 /*循环*/
                        for(;k<=25;)                     /*小于等于25循环*/
                        {
                         if(!TOTALCLR)                  /*检测重量按键为低电平?*/
                         {                              /*循环检测 */
                          val3=0;
                          addtotal();                  /*处理产量统计 分离个十百千位*/
                          displayd();                  //显示产量
                          }
                         else if(~TOTALCLR)             /*检测重量按键为高电平?*/
                          k=0;break;                    /*寄存器复位*/                 
                         }                              /*循环*/
                        } 
                      k=0;                                    /*结束*/    
                      Get_Weight();                         //称重
                      dispose2();                        //数据处理取实际重量个十百千万位值
                      displayb();                        //显示实际重量数据
                      OUT3=0; 
                      Delay_ms(200);                       //延时
                      OUT3=1; 
                      Delay_ms(200);                       //延时
                     } 
                   }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值