主程序:
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 */