项目二:使用金沙滩51单片机STC89C52实现红外遥控风扇

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值