00 读题
功能:
1.硬件设置:使用51单片机连接红外遥控、步进电机和速度控制模块。
2.红外控制:通过红外遥控获取按键信息,识别不同的控制命令。
3.步进电机控制:实现步进电机的顺时针和逆时针旋转,支持正反转、加速减速和五种不同速度。
4.界面反馈:使用LCD1602显示当前电机状态和速度。
实现步骤:
1.初始化51单片机、红外遥控、步进电机和速度控制。
2.使用中断或轮询方式获取红外遥控信号。
3.根据红外遥控命令,调整步进电机的状态和速度。
4.在LED或LCD1602上显示电机状态和速度。
01 程序
void main()
{
EA = 1; //开总中断
InitInfrared(); //初始化红外功能
ConfigTimer0(1); //配置T0定时2ms
InitLcd1602(); //初始化液晶
LcdShowStr(0,0,"direct:",7);//电机方向状态
LcdShowStr(0,1,"speed:",6);//速度状态
LcdShowStr(9,0,"OFF ",6);//状态
while (1)
{
if (irflag) //接收到红外数据时刷新显示
{
irflag = 0;
switch(ircode[2])
{
case 0x45: //0x45为开关键码
Mode = 0; //可关
Speed = 0;
LcdShowStr(7,0," ",6);//清空原来状态
break;
case 0x09:
Mode = 10; //0x09为+键码,正转
LcdShowStr(7,0," ",6);//清空原来状态
break;
case 0x15:
Mode = -10; //0x15为-键码,反转
LcdShowStr(7,0," ",6);//清空原来状态
break;
case 0x43: //0x43为>>|键码,速度加快
LcdShowStr(7,1," ",3);//清空原来状态
Speed+=10;
if(Speed > 50)
Speed = 50;
break;
case 0x40: //0x40为|<<键码,速度减慢
Speed -=10;
LcdShowStr(7,1," ",3);//清空原来状态
if(Speed < 0)
Speed = 0;
break;
default:break;
}
}
/* LCD显示刷新部分 */
if( LCD_paly ==1 )
{
LCD_paly = 0;
switch(Mode)
{
case 0:
LcdShowStr(9,0,"OFF ",6);//状态
break;
case 10:
LcdShowStr(9,0,"Left ",6);//状态
break;
case -10:
LcdShowStr(9,0,"Right ",6);//状态
break;
case 3:
//LcdShowStr(9,0,"OFF ",4);//状态
break;
default:break;
}
LCD_ShowNum(9,1,Speed,3);//速度
}
StartMotor(Mode);
delay_ms(Speed);
StopMotor();
delay_ms(50-Speed);
}
}
/* T0中断服务函数,执行数码管扫描显示 */
void InterruptTimer0() interrupt 1
{
static unsigned char num = 0;
TH0 = T0RH; //重新加载重载值
TL0 = T0RL;
num++;
TurnMotor(); //执行电机驱动
if (num >= 100) //500ms标志,用于刷新LCD模式显示,直接刷新,LCD显示易出错
{
LCD_paly=1;
num = 0 ;
}
}
如果需要指导帮助,可以添加我的QQ或者加入我的新建的交流群
2796920378