主程序:
void  main(void)
{
 /* Start user code. Do not edit comment generated here */
     KEY_Enable();
     AD_ComparatorOn();
     AD_Start();
//     TAU0_Channel0_Start();
     LCD_init();
     LCD_back_lightoff();  
     LCD_back_lighton();
     LCD_clear();
     LCD_putstr(0,0,"Hello EEPW !");
     delay_1s(2);  
     LCD_putstr(0,2,"The speed is:");
     delay_1s(2);
     TAU0_Channel3_Start();
     
 while (1U)
 {
         if(forward_flag==1|reversal_flag==1)
         {
           TAU0_Channel0_Start();
           
           if(forward_flag==1)
           {
            motor_forward();
           }
         if(reversal_flag==1)
           {
            motor_reversal();
           }
         }
         if(stop_flag==1)
           {
            motor_stop();
           }
 }
        
 /* End user code. Do not edit comment generated here */
}
/* Start user code for adding. Do not edit comment generated here */
void motor_forward(void)
{
  UCHAR motor_speed_forward=0;
  motor_speed_forward=(UCHAR)motor_speed;
  
    
    TAU0_Channel2_ChangeDuty(0);
    delay_ms(3);
    TAU0_Channel1_ChangeDuty(motor_speed_forward);
//    TAU0_Channel0_Start();
}
void motor_reversal(void)
{
  UCHAR motor_speed_reversal;
  motor_speed_reversal=(UCHAR)motor_speed;
 
    TAU0_Channel1_ChangeDuty(0);
    delay_ms(3);
    TAU0_Channel2_ChangeDuty(motor_speed_reversal);
//    TAU0_Channel0_Start();
}
void motor_stop(void)
{
 //   TAU0_Channel0_Stop();
 //   delay_ms(3);
    TAU0_Channel1_ChangeDuty(0);
    TAU0_Channel2_ChangeDuty(0);
  
//    TAU0_Channel0_Start();
}
AD转换中断函数(AD数据读取<10,>1010是了为了设置对应0%-100%)
#pragma vector = INTAD_vect
__interrupt void MD_INTAD(void)
{
 /* Start user code. Do not edit comment generated here */
    AD_Read(&AD_Reg_Value);
    if(AD_Reg_Value<10)
    {
      AD_Reg_Value=10;
    }
    if(AD_Reg_Value>1010)
    {
      AD_Reg_Value=1010;
    }
    motor_speed=(AD_Reg_Value-10)/10;
 /* End user code. Do not edit comment generated here */
}
显示函数,得宜chanel13内部定时器更新速度显示,定时时间为100ms
#pragma vector = INTTM03_vect
__interrupt void MD_INTTM03(void)
{
 /* Start user code. Do not edit comment generated here */
        motor_speed_display();
 /* End user code. Do not edit comment generated here */
}
/* Start user code for adding. Do not edit comment generated here */
 void motor_speed_display(void)
 {
     speed_display[1]=(UCHAR)((motor_speed%10)+0x30);
     speed_display[0]=(UCHAR)((motor_speed/10)+0x30);
     if(forward_flag==1|reversal_flag==1)
     {
     if(forward_flag==1)
     {
      LCD_putstr(0,3,"Forward "); 
     }
     if(reversal_flag==1)
     {
      LCD_putstr(0,3,"Reversal "); 
     }
     P7_bit.no7 =~ P7_bit.no7;
     }
     if(stop_flag==1)
     {
      LCD_putstr(0,3,"STOP     ");
     P7_bit.no7 =0;
     }
     LCD_putstr(0,4,speed_display);
     delay_ms(2);
     
 }
/* End user code. Do not edit comment generated here */