//
/***************************************************************/ void keyscan() { if(IRCOM[6]== '0' && IRCOM[5]== '6' ) //当K1按
下时
正转
{
delay_ms(50); //延时消抖
if(IRCOM[6]== '0' && IRCOM[5]== '6' ) 按下了
{ IN1 = 1; //正转 IN2 = 0; on = 1;
ENA = 1; //使能电机运转
}
}
if(IRCOM[6]== '0' && IRCOM[5]== '0' )
时 电机停止
{
delay_ms(50); //延时消抖
if(IRCOM[6]== '0' && IRCOM[5]== '0' )
第 41 页 共 50 页
//K1真的
//当 K2按下
{ ENA = 0 ;
//停止
on=0;
}
}
if(IRCOM[6]== '0' && IRCOM[5]== 'A' ) //当 K3按下时 {
delay_ms(50); //延时消抖
if(IRCOM[6]== '0' && IRCOM[5]== 'A' )
{
IN1 = 0; //反转 IN2 = 1;
on=1 ; //使能电机运转
ENA = 1;
}
}
if(IRCOM[6]== '0' && IRCOM[5]== 'E' && kz==0) //当 K4按下时 电机加速
第 42 页 共 50 页
电机反转
{
delay_ms(250); //延时消抖
if(IRCOM[6]== '0' && IRCOM[5]== 'E' )
{
tt++; //脉宽加
kz=1;
if(tt>=20) //加到最大时
{
tt = 20;
}
PWM = 20-tt;
} }
else if(IRCOM[6]== '0' && IRCOM[5]== 'D' && kz==0)
//当K3按下时 电机减速 {
//延时消抖
delay_ms(250); if(IRCOM[6]== '0' && IRCOM[5]== 'D' ) //真的按下时
{ tt--; //脉宽减
kz=1;
第 43 页 共 50 页
当K5
if(tt<=0) {
tt = 0; }
PWM = 20-tt; } }
else if((IRCOM[6]!= '0' && IRCOM[5]!= 'D' && kz==1) ||( IRCOM[6]!=
//当K3按下时
'0' && IRCOM[5]!= 'E' && kz==1)) 电机减速
}
kz=0;
/***************************************************************/ //
// 函数名称:delay_ms(uchar n) //
//功能描述: 延时函数 n值为ms //
//入口参数: uchar n //
//出口参数: 无
第 44 页 共 50 页
//
/******************************************************************/
void delay_ms(uchar n) {
uchar i,j; for(i=n;i>0;i--) for(j=110;j>0;j--); }
/******************************************************************/
//
// 函数名称: 定时器0中断函数
/******************************************************************/
void timer0 () interrupt 1 using 2 {
TH0=0xfe; //0.5ms
第 45 页 共 50 页