红外51单片机控速代码
时间: 2023-11-11 18:06:32 浏览: 80
红外控制电机转速的代码一般分为两部分:红外接收部分和电机控制部分。
红外接收部分:
1. 首先需要定义红外接收引脚和电机控制引脚的端口号,例如:
```
sbit IRIN=P3^2; //红外接收引脚
sbit ENA=P1^0; //电机使能引脚
sbit ENB=P1^1;
sbit IN1=P1^2; //电机控制引脚
sbit IN2=P1^3;
```
2. 然后需要编写红外接收函数,例如:
```
void IR_receive()
{
unsigned char i=0;
unsigned char j=0;
unsigned char k=0;
unsigned char IR_data[4]={0};
while(IRIN==1); //等待低电平
while(IRIN==0); //等待高电平
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(IRIN==1); //等待低电平
while(IRIN==0); //等待高电平
delay_us(1);
if(IRIN==1)
{
IR_data[i]|=(0x01<<(7-j));
while(IRIN==1); //等待低电平
}
}
}
if(IR_data[2]==(~IR_data[3]))
{
switch(IR_data[2])
{
case 0x18: //按键1
IN1=1;
IN2=0;
break;
case 0x08: //按键2
IN1=0;
IN2=1;
break;
case 0x1C: //按键3
IN1=1;
IN2=1;
break;
case 0x5A: //按键4
ENA=0;
ENB=0;
break; case 0x52: //按键5
ENA=1;
ENB=1;
break;
}
}
}
```
这个函数的作用是接收红外信号,并根据不同的按键控制电机的转速和方向。
电机控制部分:
1. 首先需要定义电机控制函数,例如:
```
void motor_control(unsigned char speed)
{
TH0=256-speed; //设置定时器初值
TL0=256-speed;
TR0=1; //启动定时器
}
```
这个函数的作用是根据传入的速度值控制电机的转速。
2. 然后需要编写定时器中断函数,例如:
```
void timer0() interrupt 1
{
static unsigned char count=0;
count++;
if(count>=10) //每10个定时器中断周期改变一次电机状态
{
count=0;
IN1=!IN1;
IN2=!IN2;
}
}
```
这个函数的作用是定时改变电机的状态,从而控制电机的转速和方向。
最后,在主函数中需要启动定时器和红外接收功能,例如:
```
void main()
{
TMOD=0x01; //定时器0工作在模式1
TH0=0;
TL0=0;
ET0=1; //允许定时器0中断
EA=1; //开启总中断
while(1)
{
IR_receive(); //接收红外信号
motor_control(100); //控制电机转速
}
}
```
这样就完成了红外控制电机转速的代码。如果需要更详细的代码实现,可以参考一些相关的开源项目。
阅读全文