8.12什么星座| 怀孕感冒了有什么好办法解决| 怀孕掉头发厉害是什么原因| 黔驴技穷什么意思| 静脉炎吃什么药好得快| 为什么会想吐| 加湿器加什么水最好| 为什么会口臭的原因| cc代表什么意思| 饱胀是什么意思| 尿毒症吃什么最好| 阴道瘙痒吃什么药| 孟子姓什么| 六月十六是什么星座| 补充电解质喝什么水| 剖腹产后可以吃什么食物| 阑尾有什么作用| mir是什么检查| 2月3日什么星座| 颈动脉挂什么科| 老年人头晕挂什么科| 藏族信仰什么教| 侍郎是什么官| 阴道杆菌是什么意思| 夏天适合种什么蔬菜| 药学是什么| rpl是什么意思| 冰冻三尺非一日之寒是什么意思| 海市蜃楼为什么可怕| 牙疼吃什么药最管用| 金生水是什么意思| 每天吃一个鸡蛋有什么好处| 什么人不能吃猪肝| 为什么不能摸猫的肚子| 摩羯座跟什么星座最配| 小孩拉肚子吃什么食物| 角瓜念什么| 组胺过敏是什么意思| 奸诈是什么意思| package什么意思| 什么不什么干| 瓷娃娃什么意思| 一片狼藉是什么意思| 手舞足蹈是什么生肖| 手脚冰凉吃什么药| 脑卒中什么意思| 一厢情愿是什么生肖| 一天吃一个苹果有什么好处| 放疗跟化疗有什么区别| 急性腮腺炎吃什么药| 维生素b2吃多了有什么副作用| 莅临什么意思| 耳顺是什么意思| ysy是什么意思| 左眼皮一直跳什么预兆| 肺不好的人吃什么好| 什么东西好消化| 眼睛疼吃什么药| 小儿疳积是什么意思| 凝血常规是查什么的| 皮肤挂什么科| 视力模糊什么原因| 小孩耳鸣是什么原因引起的| 生男孩女孩取决于什么| 老舍被誉为什么| 单亲是什么意思| 草莓的花是什么颜色| 什么饮料好喝又健康| robinhood是什么牌子| 天蝎配什么星座| 细菌感染是什么原因| 鲨鱼是什么动物| 亥时右眼跳是什么预兆| 犹豫的反义词是什么| 慢脚是什么| 五年是什么婚| 食欲不振吃什么药| 睡觉流口水是什么情况| 严字五行属什么| 黑皮肤适合穿什么颜色的衣服| 平肝潜阳是什么意思| 四月二十八什么星座| 佐匹克隆是什么药| 高冷是什么意思| 抑郁吃什么药可以缓解情绪| 鲤鱼喜欢吃什么| mri检查是什么| 白带黄是什么原因| 溢水是什么意思| 什么是感恩| 老舍被誉为什么称号| 潘字五行属什么| 乙肝15阳性是什么意思| 舌头尖发麻是什么原因| 梦见娃娃是什么意思| 小孩摇头是什么原因| 高位截瘫是什么意思| 6.21什么星座| 药店为什么不让卖高锰酸钾| 12月21日是什么星座| galaxy是什么牌子| 鲈鱼是什么鱼| 婴儿胀气是什么原因| 鹅肝为什么那么贵| 三叶香是什么菜| 孕酮低吃什么可以补| 立秋当天吃什么| kitchen什么意思| 优甲乐过量有什么症状| 人流后吃什么最补子宫| dfi是什么意思| 马齿苋与什么食物相克| 阴唇为什么会长痘痘| cpr什么意思| 吃什么能补雌激素| 释迦牟尼是什么意思| apm是什么| 家里为什么有蜈蚣| 感染性腹泻吃什么药| pbc是什么| 属鼠的幸运色是什么颜色| 二级烫伤是什么程度| 空调数显是什么意思| 丙肝抗体阳性是什么意思呢| 血小板压积偏低是什么意思| 早上左眼跳是什么预兆| 女人梦见狗是什么预兆| 什么药一吃就哑巴了| 海柳什么颜色最贵的| 三点水弘读什么| 尿素测定是查什么| 癫痫病是什么症状| 空气炸锅什么牌子好| 女人吃秋葵有什么好处| 东南五行属什么| 蒺藜是什么意思| 上睑下垂是什么原因造成的| 腱鞘炎用什么药最好| phicomm是什么牌子| bmd是什么意思| 小排畸主要检查什么| 盆腔积液是什么意思| 6月9号什么星座| 血糖高喝什么豆浆好| 什么的长城| pt代表什么| 吃什么清理血管| 更年期有什么症状| 肾低密度灶是什么意思| 国色天香是什么生肖| 市政协秘书长是什么级别| 老虎菜是什么菜| 胸口闷闷的有点疼是什么原因| 舌头变肥大什么原因| 时光荏苒是什么意思| 太阳穴长痘是什么原因| 14岁属什么| 荨麻疹吃什么药效果好| 布病什么症状| 脚磨破了涂什么药| 白癜风是什么症状| 田七配什么煲汤最好| 女性夜尿多吃什么调理| 介质是什么| 年检是什么意思| 中国的母亲河是什么河| 2月29号是什么星座| 直肠炎有什么症状| 四月初一是什么星座| 花中皇后是什么花| edifice是什么牌子手表| 鞑靼是什么意思| 男性尿路感染有什么症状| 反酸水是什么原因| 果酱样大便见于什么病| 纯棉是什么面料| 种植牙有什么风险和后遗症| doosan挖掘机是什么牌子| 腋下疼痛挂什么科| 什么病不能吃鲤鱼| dha什么时候吃最好| orange是什么颜色| 7月30号什么星座| 双侧筛窦粘膜增厚是什么意思| 三里屯有什么好玩的地方| 情趣什么意思| 痔疮复发的原因是什么| 脚底出汗什么原因| 资产负债率高说明什么| 花枝鼠吃什么| 吃什么补脾| 粉玫瑰花语是什么意思| 尿次数多是什么原因| 经常流眼泪是什么原因| 大小脸挂什么科| 对偶句是什么意思| 阴道口痛什么原因| 接龙是什么意思| 什么地摇动| 吃什么治失眠| 骨质增生吃什么药好| 豆浆什么人不能喝| 叫姑姑是什么关系| 笃定什么意思| 嗓子有黄痰是什么原因| 什么叫人彘| npv是什么病毒| 什么是命运| 什么什么不平| 花木兰代表什么生肖| 黄盖代表什么生肖| 宫腔分离是什么意思| 被老鼠咬了有什么预兆| 鼻咽炎有什么症状| 今年74岁属什么生肖| 转移酶偏高是什么原因| 青皮是什么皮| 值神天刑是什么意思| 做爱时间短吃什么药好| 接触性皮炎用什么药| 性激素六项什么时候查最准确| 一个月一个非念什么| 手术拆线挂什么科| 女人排卵是什么时候| 月经不规律是什么原因| 9月三号是什么日子| 蒙氏结节是什么| 血常规wbc是什么意思| 什么是结核病| 男鸡配什么属相最好| 色散是什么意思| NT是什么钱| 槑是什么意思| 罗字五行属什么| 入殓师是做什么的| 排尿困难吃什么药| 势如破竹什么意思| 医院面试一般会问什么| 代言人是什么意思| 六尘不染的生肖是什么| 熠熠生辉是什么意思| 三氧化硫常温下是什么状态| 颈椎痛吃什么药| 有何指教是什么意思| 喝什么茶养肝护肝| 心脏早搏吃什么药| 鼻头发红是什么原因| 蟊贼是什么意思| 备孕需要注意些什么| 脾气虚吃什么中成药| 妹妹的女儿叫什么| 晚上吃什么不长肉| 肠道感染用什么抗生素| 胸闷是什么病的前兆| 85年属于什么生肖| 心影稍大是什么意思| 冬虫夏草补什么| 血管狭窄吃什么药| hpv45型阳性是什么意思| mk包包属于什么档次| 四维什么时候做最佳| 阑珊什么意思| 5月30号是什么星座| 什么治疗咽炎效果好| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 【原创】红外遥控--fromSummerDreamer

共2条 1/1 1 跳转至

【原创】红外遥控--fromSummerDreamer

工程师
2025-08-04 11:14:20     打赏
百度 赵震直言:说句玩笑话,就现在中国足球这水平您是不是太高看自己了?赵宇表示:如果连球员身上的文身都要限制,这将是一个多么不自由的足球环境。

51单片机红外遥控是一种基于红外通信技术的遥控系统,通过红外光线传输信息来实现控制目标设备的功能。使用51单片机作为控制核心,通过编程控制红外****管和红外接收器等外部元器件,使其能够识别并处理接收到的遥控信号,并完成相应的控制操作。

51单片机红外遥控需要用到以下方面:

1. 红外通信技术:51单片机红外遥控采用红外线作为信号传输媒介,具有不受射频干扰、安全可靠等优点。其通信范围一般在5-10米之间。

2. PWM技术:红外遥控系统中,为了在红外****管上生成特定的信号脉冲序列,需要采用脉冲宽度调制(PWM)技术。51单片机内部具有定时器及其相关的寄存器,可实现PWM信号的输出。

3. 红外编码技术:在红外遥控系统中,将遥控器按键操作转化为红外光信号的信号编码是关键的技术之一。常用的编码方式有NEC编码、RC-5编码等。

红外遥控电机转动的速度挡位:(主要代码如下)

main.c:

#include <REGX52.H>
#include "Delay.h"
#include "Nixie.h"
#include "Motor.h" 
#include "IR.h"


unsigned char Command,Speed;

void main()
{
	Motor_Init();
	IR_Init();
	while(1)		
	{
		if(IR_GetDataFlag())	//如果收到数据帧
		{
			Command=IR_GetCommand();    //获取遥控器命令码
			
			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);}
		}
		Nixie(1,Speed);//数码管显示速度
	}		
}

IR.C:

#include <REGX52.H>
#include "Timer0.h"
#include "Int0.h"

unsigned int IR_Time;
unsigned char IR_State;

unsigned char IR_Data[4];
unsigned char IR_pData;

unsigned char IR_DataFlag;
unsigned char IR_RepeatFlag;
unsigned char IR_Address;
unsigned char IR_Command;

/**
  * @brief  红外遥控初始化
  * @param  无
  * @retval 无
  */
void IR_Init(void)
{
	Timer0_Init();
	Int0_Init();
}

/**
  * @brief  红外遥控获取收到数据帧标志位
  * @param  无
  * @retval 是否收到数据帧,1为收到,0为未收到
  */
unsigned char IR_GetDataFlag(void)
{
	if(IR_DataFlag)
	{
		IR_DataFlag=0;
		return 1;
	}
	return 0;
}

/**
  * @brief  红外遥控获取收到连发帧标志位
  * @param  无
  * @retval 是否收到连发帧,1为收到,0为未收到
  */
unsigned char IR_GetRepeatFlag(void)
{
	if(IR_RepeatFlag)
	{
		IR_RepeatFlag=0;
		return 1;
	}
	return 0;
}

/**
  * @brief  红外遥控获取收到的地址数据
  * @param  无
  * @retval 收到的地址数据
  */
unsigned char IR_GetAddress(void)
{
	return IR_Address;
}

/**
  * @brief  红外遥控获取收到的命令数据
  * @param  无
  * @retval 收到的命令数据
  */
unsigned char IR_GetCommand(void)
{
	return IR_Command;
}

//外部中断0中断函数,下降沿触发执行
void Int0_Routine(void) interrupt 0
{
	if(IR_State==0)				//状态0,空闲状态
	{
		Timer0_SetCounter(0);	//定时计数器清0
		Timer0_Run(1);			//定时器启动
		IR_State=1;				//置状态为1
	}
	else if(IR_State==1)		//状态1,等待Start信号或Repeat信号
	{
		IR_Time=Timer0_GetCounter();	//获取上一次中断到此次中断的时间
		Timer0_SetCounter(0);	//定时计数器清0
		//如果计时为13.5ms,则接收到了Start信号(判定值在12MHz晶振下为13500,在11.0592MHz晶振下为12442)
		if(IR_Time>12442-500 && IR_Time<12442+500)
		{
			IR_State=2;			//置状态为2
		}
		//如果计时为11.25ms,则接收到了Repeat信号(判定值在12MHz晶振下为11250,在11.0592MHz晶振下为10368)
		else if(IR_Time>10368-500 && IR_Time<10368+500)
		{
			IR_RepeatFlag=1;	//置收到连发帧标志位为1
			Timer0_Run(0);		//定时器停止
			IR_State=0;			//置状态为0
		}
		else					//接收出错
		{
			IR_State=1;			//置状态为1
		}
	}
	else if(IR_State==2)		//状态2,接收数据
	{
		IR_Time=Timer0_GetCounter();	//获取上一次中断到此次中断的时间
		Timer0_SetCounter(0);	//定时计数器清0
		//如果计时为1120us,则接收到了数据0(判定值在12MHz晶振下为1120,在11.0592MHz晶振下为1032)
		if(IR_Time>1032-500 && IR_Time<1032+500)
		{
			IR_Data[IR_pData/8]&=~(0x01<<(IR_pData%8));	//数据对应位清0
			IR_pData++;			//数据位置指针自增
		}
		//如果计时为2250us,则接收到了数据1(判定值在12MHz晶振下为2250,在11.0592MHz晶振下为2074)
		else if(IR_Time>2074-500 && IR_Time<2074+500)
		{
			IR_Data[IR_pData/8]|=(0x01<<(IR_pData%8));	//数据对应位置1
			IR_pData++;			//数据位置指针自增
		}
		else					//接收出错
		{
			IR_pData=0;			//数据位置指针清0
			IR_State=1;			//置状态为1
		}
		if(IR_pData>=32)		//如果接收到了32位数据
		{
			IR_pData=0;			//数据位置指针清0
			if((IR_Data[0]==~IR_Data[1]) && (IR_Data[2]==~IR_Data[3]))	//数据验证
			{
				IR_Address=IR_Data[0];	//转存数据
				IR_Command=IR_Data[2];
				IR_DataFlag=1;	//置收到连发帧标志位为1
			}
			Timer0_Run(0);		//定时器停止
			IR_State=0;			//置状态为0
		}
	}
}

主要是先根据红外的NEC协议进行编码,将时序图上的规定进行相应的代码上的实现,分别定义好相应的各部分的功能函数,在红外的.C文件中使用定时器中断判断不同的情况进行不同的操作:空闲状态,等待Start信号或Repeat信号,接收数据,转存数据。在main.c函数中调用红外的.C文件,对外部数据的接收进行判断,进而实现对于不同红外的命令码设置不同的速度,为了方便观察这里加入了数码管显示速度挡位。

 




高工
2025-08-04 12:37:03     打赏
2楼

感谢楼主的分享,很实用了。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
肌酸激酶高是什么病 螺蛳粉为什么那么臭 耳朵聋是什么原因 胃火重口臭吃什么药好 补气血吃什么食物最好
亚历山大王什么档次 儿童吃什么钙片补钙效果好 根管治疗是什么 大便很细是什么原因 才高八斗什么意思
指奸是什么意思 吃什么药可以延长射精 皮肤偏黄适合穿什么颜色的衣服 尿黄是因为什么 波菜不能和什么一起吃
什么鱼清蒸最好吃 出的汗是凉的什么原因 有什么软件可以赚钱 双肺纹理粗重什么意思 当兵苦到什么程度
下体瘙痒用什么药hcv8jop4ns3r.cn 喝咖啡有什么好处和坏处dajiketang.com 眼眶发青是什么原因hcv7jop9ns0r.cn 割包皮属于什么科hcv8jop2ns3r.cn 猫咪的胡子有什么作用xinmaowt.com
双花红棍什么意思hcv8jop6ns2r.cn 九王念什么wzqsfys.com 孤品是什么意思hcv8jop5ns9r.cn 狐狸吊坠有什么寓意hcv8jop5ns9r.cn 大人有大量是什么意思hcv9jop3ns7r.cn
积德是什么意思hcv9jop1ns6r.cn 黄皮是什么adwl56.com 投喂是什么意思hcv9jop6ns0r.cn 什么是潮吹hcv9jop1ns4r.cn 三羊开泰是什么意思hcv8jop2ns3r.cn
三不伤害是指什么hcv8jop6ns2r.cn 什么是早搏hcv9jop2ns2r.cn 多读书有什么好处qingzhougame.com 黄花苗泡水喝有什么作用hcv8jop3ns1r.cn 马牙是什么原因引起的hcv8jop9ns8r.cn
百度