欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

51 微控制器 STC89C52RC - 17.2 红外线遥控 数字加减,电机速度调节

最编程 2024-07-16 18:30:36
...

目的/效果

1:按VOL-键数字减、按VOL+加数字加

2:按键 0,1,2,3,4 电机调速

一,STC单片机模块

二,红外遥控 

详细了解红外遥控控制原理请参考《51单片机STC89C52RC——17.1 红外线遥控器

2.1 控制数字加减

2.1.1 红外遥控键码


#define IR_POWER		0x45
#define IR_MODE			0x46
#define IR_MUTE			0x47
#define IR_START_STOP	0x44
#define IR_PREVIOUS		0x40
#define IR_NEXT			0x43
#define IR_EQ			0x07
#define IR_VOL_MINUS	0x15
#define IR_VOL_ADD		0x09
#define IR_0			0x16
#define IR_RPT			0x19
#define IR_USD			0x0D
#define IR_1			0x0C
#define IR_2			0x18
#define IR_3			0x5E
#define IR_4			0x08
#define IR_5			0x1C
#define IR_6			0x5A
#define IR_7			0x42
#define IR_8			0x52
#define IR_9			0x4A

按键VOL-=0x15,VOL+=0x09

2.1.2 收到信号处理


			if(Command==IR_VOL_MINUS)		//如果遥控器VOL-按键按下
			{
				Num--;						//Num自减
			}
			if(Command==IR_VOL_ADD)			//如果遥控器VOL+按键按下
			{
				Num++;						//Num自增
			}

2.2 电机调速

 有关直流电机详细介绍请参考《51单片机STC89C52RC——14.1 直流电机调速

红外遥控0,1,2,3  按键 对应hex为

0x16 、0x0C、0x18、0x5E

电机的运转速度需要用到

PWM《51单片机STC89C52RC——10.1 LED呼吸灯

模数数模AD/DA《51单片机STC89C52RC——15.1 AD/DA(模数数模

中断《51单片机STC89C52RC——6.1 中断系统

定时器《51单片机STC89C52RC——6.2 定时器

三,创建Keil项目

详细参考:51单片机STC89C52RC——创建Keil项目-****博客

 

四,代码 

完整代码参考《https://gitee.com/oopxiajun/STC89C52

4.1 按VOL-键数字减、按VOL+加数字加

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "IR.h"
 
unsigned char Address;
unsigned char Command;
unsigned char Num;

void main()
{
	LCD_Init();
	LCD_ShowString(1,1,"Addr  Cmd  Num");
	LCD_ShowString(2,1,"              ");
	
	IR_Init();
	
	while(1)
	{
		if(IR_GetDataFlag() || IR_GetRepeatFlag())	//如果收到数据帧或者收到连发帧
		{
			Address=IR_GetAddress();		//获取遥控器地址码
			Command=IR_GetCommand();		//获取遥控器命令码
			
			LCD_ShowHexNum(2,1,Address,2);	//显示遥控器地址码
			LCD_ShowHexNum(2,7,Command,2);	//显示遥控器命令码
			
			
			if(Command==IR_VOL_MINUS)		//如果遥控器VOL-按键按下
			{
				Num--;						//Num自减
			}
			if(Command==IR_VOL_ADD)			//如果遥控器VOL+按键按下
			{
				Num++;						//Num自增
			}
			
			LCD_ShowNum(2,12,Num,3);		//显示Num
		}
	}
}

 2:按键 0,1,2,3 电机调速

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "IR.h"
#include "Motor.h" 
unsigned char Address;
unsigned char Command;
unsigned char Num;
unsigned char Command,Speed;
/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{	
	LCD_Init();
	LCD_ShowString(1,1,"Addr  Cmd  Speed");
	LCD_ShowString(2,1,"                ");
	
	Motor_Init();
	IR_Init();
	
	while(1)
	{
		if(IR_GetDataFlag() || IR_GetRepeatFlag())	//如果收到数据帧或者收到连发帧
		{
			Address=IR_GetAddress();		//获取遥控器地址码
			Command=IR_GetCommand();		//获取遥控器命令码
			
			LCD_ShowHexNum(2,1,Address,2);	//显示遥控器地址码
			LCD_ShowHexNum(2,7,Command,2);	//显示遥控器命令码
			
			
			
			if(Command==IR_0){Speed=0;}		//根据遥控器命令码设置速度
			if(Command==IR_1){Speed=1;}
			if(Command==IR_2){Speed=2;}
			if(Command==IR_3){Speed=3;}
			
			if(Speed==0){Motor_SetSpeed(0);}	//速度输出
			if(Speed==1){Motor_SetSpeed(50);}
			if(Speed==2){Motor_SetSpeed(75);}
			if(Speed==3){Motor_SetSpeed(100);}
			
			LCD_ShowNum(2,12,Speed,3);		//显示Speed
		}
	}
}

五,代码编译、下载到51单片机

代码编译请参考

51单片机STC89C52RC——代码编译-****博客

代码下载请参考

《51单片机STC89C52RC——STCAI-ISP代码下载-****博客