小车源程序工程

小车源程序工程

none.gif
 
  1. /*****************************************************
  2. This program was produced by the
  3. CodeWizardAVR V1.25.6c Professional
  4. Automatic Program Generator
  5. ?Copyright 1998-2006 Pavel Haiduc, HP  vula_adcfoTech s.r.l.
  6. http://www.hp vula_adcfotech.com
  7.  
  8. Project : 小车
  9. Version :  0.00
  10. Date    : 2007-8-30
  11. Author  : momo                          
  12. Company : zhong bei da xue                       
  13. Comments:
  14.  
  15.  
  16. Chip type           : ATmega16L
  17. Program type        : Application
  18. Clock frequency     : 1.000000 MHz
  19. Memory model        : Small
  20. External SRAM size  : 0
  21. Data Stack size     : 256
  22. *****************************************************/
  23. #include "config.h"
  24.  
  25.  
  26. #define                  startCPA    TCCR1A|=0X40
  27. #define   startCPB    TCCR1A|=0X10
  28.  
  29. #define   stopCPA     TCCR1A&=0XBF
  30. #define   stopCPB     TCCR1A&=0XEF
  31.  
  32. #define   MBgo          PORTD.0=0
  33. #define   MBback       PORTD.0=1
  34.  
  35. #define   MAgo          PORTD.1=0
  36. #define   MAback       PORTD.1=1
  37. /****************************************************
  38. 全局变量声明
  39. *****************************************************/
  40. volatile unsigned char  flage=0X00;
  41. volatile unsigned char Timer[3]={0,0,0};
  42. volatile unsigned char  write;
  43. volatile unsigned char BalanceTime=0;  
  44. unsigned char balan =1;   
  45. unsigned char  vula_adc;   
  46. unsigned char  ad;
  47. flash char *step[4]={ "stepA","stepB","stepC","back " } ;
  48. flash char *mode[2]={"normal","advanc"};
  49. /******************************************************
  50. 系统中断    (显示,蜂鸣)
  51. *******************************************************/
  52. interrupt [TIM0_COMP ] void tim0_comp_isr(void)  
  53. {
  54.     static unsigned char buzz;
  55.     switch ( flage )
  56.      {
  57.     case 0X04:
  58.                     Timer[0]=Read_sec( );
  59.                    if( Timer[0]==Timer[2] )
  60.                    ;
  61.                    else  
  62.                    {
  63.                        BalanceTime++;
  64.                        LCD_write_char( 13 , 1 ,  ( BalanceTime%10)+'0' );
  65.                        LCD_write_char( 12 , 1 ,  ( BalanceTime/10)+'0' );  
  66.                        Timer[2]=Timer[0]   ;
  67.                     }
  68.                     goto j1;  
  69.                     break;
  70.     case 0X84:
  71.                    Timer[0]=Read_sec( );
  72.                    if( Timer[0]==Timer[2] )
  73.                    ;
  74.                    else  
  75.                    {
  76.                        BalanceTime++;
  77.                        LCD_write_char( 13 , 1 ,  ( BalanceTime%10)+'0' );
  78.                        LCD_write_char( 12 , 1 ,  ( BalanceTime/10)+'0' );  
  79.                        Timer[2]=Timer[0]   ;
  80.                     }
  81.    case 0X80:
  82.                     if( (++buzz) == 10 )
  83.                       {
  84.                             buzz=0;
  85.                              PORTC.2=1;
  86.                              flage -=0x80;   
  87.                             }                       
  88.      j1:
  89.     case 0X00:  
  90.                    Timer[0]=Read_sec( );
  91.                    write=Timer[0];         
  92.                    LCD_write_char( 11 , 0 ,   (write& 0x0f)+ '0' );   
  93.                    LCD_write_char( 10 , 0 ,   ( (write>>4)&0x07) + '0' );   
  94.                   
  95.                    Timer[1]=Read_miu( );        
  96.                    write=Timer[1];
  97.                    LCD_write_char(  4 , 0  ,  (write& 0x0f)+'0');      
  98.                    break;
  99.                   
  100.     default:   break;
  101.     }  
  102.   }
  103. /*****************************************************************************
  104. 系统中断T2     (寻线校正)
  105. *****************************************************************************/
  106.   interrupt [TIM2_COMP ] void tim2_comp_isr(void)  
  107. {
  108.      if(PORTD.1==1)
  109.        {
  110.          
  111.           if(PIND.6==1)
  112.            
  113.               startCPA;  
  114.                
  115.                else
  116.                  
  117.                      stopCPA;
  118.                        
  119.             
  120.           if(PIND.7==1)
  121.                
  122.               startCPB;
  123.                
  124.                 else        
  125.                
  126.                      stopCPB;     
  127.                        
  128.        }   
  129.       else
  130.         {
  131.            if(PIND.2==1)
  132.            
  133.               startCPA;  
  134.                     
  135.                 else
  136.                   
  137.                       stopCPA;
  138.                         
  139.             
  140.           if(PIND.3==1)
  141.             
  142.               startCPB;
  143.             
  144.                 else        
  145.                
  146.                       stopCPB;     
  147.          }      
  148. }  
  149.  
  150. unsigned char get_ad(void) {
  151.  
  152.         unsigned char i;
  153.          ADMUX = 0x60;                                      /*基准AVCC、左对齐、通道0*/
  154.                   ADCSRA = 0xC2;                                            /*使能、开启、4分频*/
  155.         while(!(ADCSRA & (1 << ADIF)));                             /*等待*/
  156.         i = ADCH;
  157.         ADCSRA &= ~(1 << ADIF);                /*清标志*/
  158.         ADCSRA &= ~(1 << ADEN);                /*关闭转换*/
  159.  
  160.         return i;
  161. }   
  162.  
  163. void beep( void )
  164. {
  165.    PORTC.2=0;
  166.    delay_ms(500);
  167.    PORTC.2=1;   
  168. }
  169.  
  170. void Findbenlen( void )
  171. {
  172.    
  173.     balan=1;
  174.      do
  175.        {
  176.         
  177.           if( get_ad( ) <=0X79   )       //0x7d(yuan shi)  0X7E bux vula_adcg
  178.                {
  179.                         MBgo ;  
  180.                          MAgo ;
  181.                         startCPA ;
  182.                         startCPB ;
  183.                         delay_ms(200);  
  184.                          stopCPA  ;
  185.                         stopCPB  ;
  186.                         }   
  187.                          delay_ms(200);           
  188.                 if( get_ad( ) >=0X81   )       //0x7d(yuan shi)  0X7E bux vula_adcg
  189.                {
  190.                         MBback ;  
  191.                          MAback ;
  192.                          startCPA ;
  193.                         startCPB ;
  194.                         delay_ms(200);  
  195.                         stopCPA  ;
  196.                         stopCPB  ;
  197.                         }     
  198.                          delay_ms(400);         
  199.             if( get_ad( ) >= 0X84)      //0x82
  200.             {
  201.                          MBback ;  
  202.                          MAback ;
  203.                          startCPA ;
  204.                         startCPB ;
  205.                         delay_ms(200);  
  206.                         stopCPA  ;
  207.                         stopCPB  ;
  208.                         }        
  209.                          delay_ms(400);  
  210.              if( get_ad( ) <=0X82  )       //0x7d(yuan shi)  0X7E bux vula_adcg
  211.                {
  212.                         MBgo ;  
  213.                          MAgo ;
  214.                         startCPA ;
  215.                         startCPB ;
  216.                         delay_ms(200);  
  217.                          stopCPA  ;
  218.                         stopCPB  ;
  219.                         }            
  220.              delay_ms(400);
  221.                 ad=get_ad( );
  222.               if(  ad < 0X82 &&  ad >  0X79 )   
  223.                 balan=0;
  224.                
  225.         }    while(balan);
  226.         
  227.         balan=1;                     
  228.       
  229.      do
  230.        {
  231.         
  232.           if( get_ad( ) <=0X7B   )       //0x7d(yuan shi)  0X7E bux vula_adcg
  233.                {
  234.                         MBgo ;  
  235.                          MAgo ;
  236.                         startCPA ;
  237.                         startCPB ;
  238.                         delay_ms(150);  
  239.                          stopCPA  ;
  240.                         stopCPB  ;
  241.                         }            
  242.    
  243.             if( get_ad( ) >= 0X82)      //0x82
  244.             {
  245.                          MBback ;  
  246.                          MAback ;
  247.                          startCPA ;
  248.                         startCPB ;
  249.                         delay_ms(150);  
  250.                         stopCPA  ;
  251.                         stopCPB  ;
  252.                         }   
  253.       
  254.              delay_ms(2000);
  255.                 ad=get_ad( );
  256.               if(  ad < 0X82 &&  ad >  0X7B )   
  257.                 balan=0;
  258.                
  259.         }    while(balan);                     
  260. }
  261.  
  262. unsigned char SelectMode ( void )
  263. {
  264.   unsigned char temp=0;
  265.   LCD_write_str( 0 , 0 ,"pass START key");  
  266.   LCD_write_str( 0 , 1 ,"zhong bei da xue ");
  267.   //do
  268.   //{
  269.   //delay_ms( 250 );
  270.   //}
  271.   while( PINC.6 ==1 );   
  272.   while(PINC.6 ==0);
  273.   
  274.   LCD_clear( );
  275.   LCD_write_str( 0 , 0 ,"mode:");
  276.   LCD_write_str( 0 , 1 ,"select mode");  
  277.   LCD_write_str( 6 , 0 ,mode[0]);
  278.     delay_ms( 1000 );
  279.   do
  280.     {
  281.       if( PINC.7==0 )
  282.          {
  283.              while(PINC.7==0);
  284.                                 ++temp;
  285.          
  286.              if(temp==2)
  287.                 temp=0;
  288.                
  289.                LCD_write_str( 6 , 0 ,mode[temp]);  
  290.          }
  291.          
  292.         //delay_ms( 200 );  
  293.       }  
  294.      while(PINC.6==1);
  295.      while(PINC.6==0);  
  296.       LCD_clear( );
  297.    return(temp);
  298. }   
  299.  
  300. /*******************************************************
  301. 基本要求部分
  302. *******************************************************/
  303. void nomal ( void )
  304. {
  305. /*****************************************************
  306. 显示时钟,初始设置
  307. *****************************************************/   
  308.     LCD_write_str( 0 , 0 ,"minc:  sec: ");
  309.     LCD_write_str( 0 ,  1 , step[0] );
  310.      delay_ms(1000);
  311.     PORTC.2=0;
  312.     delay_ms(500);
  313.       PORTC.2=1;
  314.    start_PCF( );
  315. /********************************************************
  316.   小车动作初始化
  317. ********************************************************/  
  318.     MBgo ;  
  319.     MAgo;
  320.     startCPA  ;
  321.     startCPB  ;
  322.     TCCR2  = 0x0A;                                   //自动寻线开
  323.    
  324.     SEI( );                                                  //全局中断开   
  325.     /**********************************************
  326.     第一阶段
  327.     **********************************************/
  328.    while ( Timer[0] != 0X15 ) ;
  329.    LCD_write_str( 0 ,  1 , step[1] );
  330.   
  331.    CLI( );
  332.    beep(  );
  333.    start_PCF( );
  334.    /***************************************************
  335.    改变速度
  336.    ***************************************************/
  337.    OCR1AH=0x06;
  338.    OCR1AL =0xFF;                                                       //new
  339.    OCR1BH=0x06;
  340.    OCR1BL=0xFF;
  341.    SEI( );
  342.    /************************************************
  343.    寻找平衡
  344.    ************************************************/   
  345.       TCCR2  = 0x00;   
  346.    /**********************************************************
  347.       do
  348.        {  
  349.         startCPA ;
  350.         startCPB ;
  351.         delay_ms(700);
  352.         stopCPA  ;
  353.         stopCPB  ;  
  354.          delay_ms(200);
  355.          if( get_ad( )>= 0X75 )
  356.            balan=0;
  357.            
  358.        }  while(balan);
  359.      
  360.       balan=1;
  361.       
  362.      do
  363.        {
  364.         
  365.           if( get_ad( ) <=0X7B   )       //0x7d(yuan shi)  0X7E bux vula_adcg
  366.                {
  367.                         MBgo ;  
  368.                          MAgo ;
  369.                         startCPA ;
  370.                         startCPB ;
  371.                         delay_ms(300);  
  372.                          stopCPA  ;
  373.                         stopCPB  ;
  374.                         }            
  375.    
  376.             if( get_ad( ) >= 0X82)      //0x82
  377.             {
  378.                          MBback ;  
  379.                          MAback ;
  380.                          startCPA ;
  381.                         startCPB ;
  382.                         delay_ms(300);  
  383.                         stopCPA  ;
  384.                         stopCPB  ;
  385.                         }   
  386.       
  387.              delay_ms(1700);
  388.                 ad=get_ad( );
  389.               if(  ad < 0X82 &&  ad >  0X7B )   
  390.                 balan=0;
  391.                
  392.         }    while(balan);                     
  393.     *******************************************************/      
  394.     Findbenlen(  );
  395.     PORTC.2=0;
  396.     flage+=0x80;                                        //开启蜂鸣,中断关闭   
  397.    
  398.    /************************************************
  399.    找到平衡
  400.    ************************************************/
  401.    CLI( );
  402.    start_PCF( );                                                     //需要改动
  403.    //Timer[2]= Read_sec( );
  404.    LCD_write_str( 0 ,  1 , step[2] );
  405.    LCD_write_str( 6 ,  1 , "Balan:"  );
  406.    flage+=0x04;
  407.     SEI( );  
  408.    
  409.     do  
  410.        {   
  411.        //保持平衡
  412.         if( Timer[0]==0X05 )
  413.             {
  414.                          flage -=0x04;
  415.                          CLI( );
  416.                          start_PCF( );
  417.                          SEI( );
  418.             }
  419.        }
  420.    while ( (flage==0X04 )|| ( flage==0X84  ) );  
  421.    
  422.    
  423.    /***************************************************
  424.    改变速度
  425.    ***************************************************/
  426.      CLI( );
  427.    OCR1AH=0x01;
  428.    OCR1AL =0xFF;                                                       //new
  429.    OCR1BH=0x01;
  430.    OCR1BL=0xFF;
  431.    SEI( );
  432.    
  433.     MBgo;
  434.     MAgo;     
  435.     startCPA ;
  436.     startCPB ;
  437.   /************************************************
  438.    慢走,直到传感器感知木板落下
  439.   ************************************************/
  440.   TCCR2  = 0x0A;
  441.    /**********************************************
  442.    检测传感器状态,没黑线时停下
  443.    ***********************************************/
  444.   while(PIND.2||PIND.3);                                           //关寻线   
  445.          
  446.    
  447.   CLI( );  
  448.   stopCPA ;
  449.   stopCPB;
  450.   TCCR2  = 0x00;  
  451.   beep(  );
  452.   start_PCF( );
  453.   delay_us(10);
  454.   SEI( );
  455.   /***********************************************
  456.    等待五秒,倒车返回
  457.   ***********************************************/  
  458.   MBback;
  459.   MAback;
  460.   while( Timer[0]!=0X05 )  ;
  461.   LCD_write_str( 0 ,  1 , step[3] );
  462.   beep(  );
  463.   startCPA ;
  464.   startCPB ;  
  465.   TCCR2  = 0x0A;  
  466.    while(PIND.6||PIND.7);  
  467.     beep(  );
  468. }        
  469.  
  470.   /******************************************************
  471.   发挥部分
  472.   ******************************************************/   
  473. void advance ( void )
  474. {
  475.    unsigned char find=1;
  476.    
  477.    
  478.    LCD_write_str( 0 , 0 ,"min:  sec: ");
  479.    start_PCF( );
  480.      
  481.    MBgo ;  
  482.    MAgo;
  483.    startCPA  ;
  484.    startCPB  ;
  485.    
  486.      
  487.      SEI( );  
  488. /*****************************************************
  489.  当两个传感器都在线上时开启寻线功能
  490. *****************************************************/
  491.    while(find)  
  492.    {
  493.      if( PIND.2==1 )  
  494.         find=0;  
  495.         
  496.       if(PIND.3==1)  
  497.          find=0;  
  498.    } ;
  499.     //while( (P vula_adcD.6|P vula_adcD.7)==0 );
  500. TCCR2  = 0x0A;
  501.  
  502. /*****************************************************
  503. 一定时间后,减速找平衡
  504. *****************************************************/   
  505.     //while( Timer[0]!=0X40  );
  506.    while ( get_ad( ) < 0X75 ) ;  //xiu gai
  507.        TCCR2  = 0x00;
  508. /****************************************************
  509. 找到后,给出平衡指示,
  510. *****************************************************/   
  511.    CLI( );
  512.    OCR1AH=0x06;
  513.    OCR1AL =0xFF;                                                       //new
  514.    OCR1BH=0x06;
  515.    OCR1BL=0xFF;
  516.    SEI( );  
  517.    Findbenlen(  );
  518.    PORTC.2=0;
  519.    flage+=0x80;
  520.      
  521.         
  522.    CLI( );
  523.    LCD_write_str( 6 ,  1 , "Balan:"  );
  524.    flage+=0x04;
  525.    SEI( );
  526. /******************************************************
  527. 检测平衡状态,不平衡时继续寻找
  528. *******************************************************/   
  529.     while( get_ad( ) < 0X82 &&  get_ad( )>  0X7B );
  530. /*******************************************************
  531. 找到后,给出平衡指示
  532. *******************************************************/     
  533.    Findbenlen(  );
  534.    PORTC.2=0;
  535.    flage+=0x80;  
  536.         
  537.    CLI( );
  538.    LCD_write_str( 6 ,  1 , "Balan:"  );
  539.    flage+=0x04;
  540.    SEI( );  
  541.      
  542.     MBgo ;
  543.     MAback ;
  544.     OCR1AH=0x01;
  545.     OCR1AL =0xFF;                                                       //new
  546.     OCR1BH=0x01;
  547.     OCR1BL=0xFF;
  548.     startCPA  ;
  549.     startCPB  ;
  550.     delay_ms( 1000 );   
  551.      find=1;
  552.      
  553.      while(find)  
  554.    {
  555.      if( PIND.2==1 )  
  556.         find=0;  
  557.         
  558.       if(PIND.3==1)  
  559.          find=0;  
  560.    } ;   
  561.     MBgo ;
  562.     MAgo;
  563. }         
  564. unsigned char  output( void )
  565. {
  566.   if( vula_adc>=0X7D &&  vula_adc<=0X80 )
  567.                 return 0;
  568.    if(  vula_adc>=0X7C && vula_adc<=0X81 )
  569.                   return 1 ;
  570.     if(  vula_adc>=0X7B &&  vula_adc<=0X82 )
  571.                    return  2 ;
  572.       if(  vula_adc>=0X7A &&  vula_adc<=0X83)
  573.                     return 3 ;   
  574.        if(  vula_adc>=0X79 &&  vula_adc<=0X84)
  575.                      return  4 ;   
  576.           if(  vula_adc>=0X78 &&  vula_adc<=0X85)
  577.                       return  5 ;   
  578.             if(  vula_adc>=0X77 &&  vula_adc<=0X86)
  579.                         return  6 ;     
  580.           if(  vula_adc>=0X76 &&  vula_adc<=0X87)
  581.                           return  7  ;  
  582.        if(  vula_adc>=0X75 && vula_adc<=0X88)
  583.                             return  8 ;  
  584.       if(vula_adc <=0X74 )                     
  585.                            return 9;  
  586.      if( vula_adc >= 0X89 )      
  587.                           return 10;                                                                                                         
  588. }   
  589.  
  590. /**************************************************************************************************
  591. 平衡驱动控制函数
  592. **************************************************************************************************/
  593. void  mortorgo( unsigned char high , unsigned char low, unsigned int  go_time, unsigned int  back_time )
  594. {
  595.       OCR1AH=high;
  596.       OCR1AL = low;                                                      //new
  597.       OCR1BH=high;
  598.       OCR1BL= low;   
  599.       
  600.        if( vula_adc<0x7F)
  601.       {
  602.         MAgo;
  603.         MBgo;
  604.       }
  605.       else
  606.       {
  607.        MAback;
  608.        MBback;
  609.       }
  610.      
  611.       startCPA ;
  612.       startCPB ;
  613.       
  614.       delay_ms( go_time ) ;
  615.      
  616.       stopCPA ;
  617.       stopCPB;
  618.       
  619.        if( vula_adc<0x7F)
  620.       {
  621.        MAback;
  622.        MBback;
  623.       }
  624.       else
  625.       {
  626.         MAgo;
  627.         MBgo;
  628.       }
  629.       
  630.       startCPA ;
  631.       startCPB ;
  632.       
  633.       delay_ms( back_time ) ;   
  634.       
  635.       stopCPA ;
  636.       stopCPB;
  637. }
  638. void main ( void )
  639. {
  640. /*******************************************************
  641. 变量定义
  642. *******************************************************/
  643.   unsigned char  key;      
  644.   unsigned char  temp_key;
  645.   
  646. /********************************************************
  647. 初始化设备
  648. *********************************************************/
  649.   Init_IO( );
  650. // Init_T0(  );  
  651.   Init_T1(  );
  652.   //Init_T2(  );
  653.   Init_TWI( );
  654.   Init_device( ) ;      
  655.   LCD_init( );
  656.   
  657.   delay_ms( 10 );
  658.   LCD_clear( );   
  659.   delay_ms(1);
  660.     MBgo ;  
  661.     MAgo;
  662.     startCPA  ;
  663.     startCPB  ;
  664.   /********************************************************
  665.   模式选择
  666.   ********************************************************/
  667.   do{
  668.        vula_adc = get_ad ( );
  669.      
  670.      
  671.       temp_key=vula_adc/16;
  672.       LCD_write_char( 1 , 0 ,  temp_key+'0' );   
  673.       temp_key=vula_adc%16;
  674.       LCD_write_char( 2 , 0 ,  temp_key+'0' );  
  675.        temp_key= vula_adc;
  676.          key = output(  ) ;
  677.       switch ( output(  ) ) {
  678.                       case 0 :
  679.                                     
  680.                                   stopCPA ;
  681.                                   stopCPB;
  682.                                  break;
  683.                       case 1 :  
  684.                                  
  685.                                   mortorgo( 0x03,0xFF , 400, 350 ) ;
  686.                                  break;
  687.                       case 2 :   
  688.                                    
  689.                                   mortorgo( 0x02,0xFF , 800, 700 ) ;
  690.                                  break;
  691.                       case 3 :
  692.                                  
  693.                                  mortorgo( 0x02,0xFF , 900, 800 ) ;
  694.                                  break;
  695.                       case 4 :   
  696.                                 
  697.                                 mortorgo( 0x02,0xFF , 900, 700 ) ;
  698.                                  break;
  699.                       case 5 :
  700.                               
  701.                                 mortorgo( 0x02,0xFF , 900, 650 ) ;
  702.                                  break;
  703.                       case 6 :  
  704.                               
  705.                                 mortorgo( 0x02,0xFF , 900,600 ) ;
  706.                                  break;  
  707.                        case 7 :
  708.                                  
  709.                                  mortorgo( 0x02,0xFF , 1000, 700 ) ;
  710.                                  break;   
  711.                        case 8 :
  712.                              
  713.                                 mortorgo( 0x02,0xFF , 1000,600 ) ;
  714.                                 break;   
  715.                        case 9 :
  716.                                    MAgo;
  717.                                    MBgo;
  718.                                    OCR1AH=0x02;
  719.                                    OCR1AL = 0XFF;                                                      //new
  720.                                    OCR1BH=0x02;
  721.                                    OCR1BL= 0XFF;  
  722.                                    startCPA ;
  723.                                    startCPB ;
  724.                                 break;  
  725.                        case 10:
  726.                                    MAback;
  727.                                    MBback;
  728.                                    OCR1AH=0x02;
  729.                                    OCR1AL = 0XFF;                                                      //new
  730.                                    OCR1BH=0x02;
  731.                                    OCR1BL= 0XFF;  
  732.                                    startCPA ;
  733.                                    startCPB ;                                                                           
  734.                     default:  LCD_clear();  
  735.                                 LCD_write_char( 10 , 1 , 'E' );  
  736.                                  break;
  737.     };
  738.        delay_ms(200);
  739.   }
  740.  
  741. while( 1 );
  742.    
  743.    // SEI();   
  744.   // TCCR2  = 0x00;
  745.    
  746.    
  747.  
  748.   /*do
  749.     {
  750.     MBgo ;  
  751.     MAgo;
  752.     startCPA  ;
  753.     startCPB  ;
  754.    
  755.     delay_ms(500);
  756.     MBback ;  
  757.     MAback;   
  758.      delay_ms(500);
  759.     MBgo ;  
  760.     MAgo;  
  761.     }
  762.     while(1);    */
  763. }
  764.  
复制代码

 

文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-208696-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值