婴儿老打嗝是什么原因| 电导率是什么意思| 男孩小名叫什么好听| 肺部玻璃结节是什么病| 铋剂是什么药| 疟原虫是什么生物| 嘴巴里长泡是什么原因| 狗头军师什么意思| 记吃不记打的下一句是什么| 剖腹产什么时候可以洗澡| 茜字五行属什么| 什么的池水| 老是腹泻是什么原因导致的| 63年属什么| 插入阴道什么感觉| 调养是什么意思| 3.9是什么星座| 鼠的三合生肖是什么| 浑身疼是什么原因| 肝是干什么用的| 邮箱抄送是什么意思| 头皮痒用什么洗头好| 孟夏是什么意思| 堃怎么读什么意思| 阴阳互补什么意思| 茶苯海明片是什么药| 外痔是什么样子的| 正常人突然抽搐是什么原因| 炎症反应性细胞改变是什么意思| 移动迷宫到底讲的什么| 宝宝什么意思| 外阴瘙痒用什么药膏| fredperry是什么牌子| 脸上不停的长痘痘是什么原因| acs是什么病| 欢子真名叫什么| 米酒和黄酒有什么区别| 114是什么意思| 什么时间喝牛奶最佳| hpvhr阳性什么意思| 男士去皱纹用什么好| 插入是什么感觉| 膝关节疼痛用什么药效果最好| 如期是什么意思| 五谷指的是什么| 小孩发烧流鼻血是什么原因| cea是什么检查项目| 西米露是什么材料做的| 武松的性格特点是什么| ca19-9偏高是什么意思| 手上为什么会有小水泡| 腰间盘突出用什么药好| 乌冬面是什么做的| crf是什么意思| 风疹病毒是什么病| 右肺中叶纤维灶是什么意思| 拉肚子是什么原因导致的| 红景天有什么功效| bh是什么意思| 宫颈炎吃什么药好得快| 海是什么生肖| 骨折吃什么恢复的快| 嗓子哑吃什么药| 12月20日什么星座| 为什么会长鸡眼| 山五行属什么| 人工虎骨粉是什么做的| 20岁属什么的生肖| 稀奶油是什么| 什么故事| 阳上人是什么意思| buns是什么意思| 早上眼屎多是什么原因| 宝宝为什么老是吐奶| 女人梦到蛇是什么意思| 睡觉打鼾是什么原因| 萎缩性胃炎什么意思| 瘟疫是什么病| 竖心旁与什么有关| 乾隆是什么生肖| 敢是什么意思| z世代是什么意思| 什么钙片补钙效果好| 腮帮子长痘痘是什么原因| 尖嘴猴腮什么意思| 田可以加什么偏旁| 日柱华盖是什么意思| 什么是门户网站| 过期的牛奶有什么用途| 偶尔什么意思| 什么是红斑狼疮| 浙江大学校长什么级别| 钢笔刻字刻什么好| 羹什么意思| hdl是什么意思| 什么姿势| 灵芝泡水喝有什么好处| 墓志铭什么意思| 巡查是什么意思| 龙年是什么年| 国安局是干什么的| 纵欲是什么意思| 手指发白是什么原因| 河粉是什么| 虎眼石五行属什么| 淋球菌阳性是什么病| 非那根又叫什么| 家庭养什么狗最干净| 这些是什么| 梦到捡菌子是什么意思| 企鹅吃什么| 永加一个日念什么| 积食是什么症状| 岁月从不败美人什么意思| 子非鱼什么意思| 外耳道耵聍什么意思| 介石是什么意思| 虎父无犬子什么意思| 治疗幽门螺旋杆菌的四联药是什么| 没有高中毕业证有什么影响| 避孕药有什么副作用| 1月9号是什么星座| hla一b27阳性是什么意思| 小苏打和柠檬酸反应产生什么| 太阳什么的什么的| 青岛属于什么气候| 血稠有什么症状| 什么是对食| 麦粒肿吃什么药| l表示什么单位| 一什么鱼| 92是什么意思| md是什么材质| 幻肢是什么| 副科级是什么级别| 继承衣钵是什么意思| 吃什么补蛋白| 用盐袋子热敷小肚子有什么功效| qy是什么意思| 小孩牙疼吃什么药| 手麻是什么原因引起| 什么是尘肺病| 颠三倒四是什么意思| 为什么月经期有性冲动| 例假提前半个月是什么原因造成的| 肺结节钙化是什么意思| 18岁属什么生肖| 孕妇不能吃什么食物| 德不配位是什么意思| 手足是什么意思| 属相是什么| 微信上面有个耳朵是什么意思| 6月28什么星座| 手指关节发黑是什么原因| 便秘吃什么中成药| 前面有个豹子是什么车| 脑梗什么原因导致的| 奥利司他是什么药| 喝什么汤下奶最快最多| 舌头麻是什么病的前兆| 互为表里是什么意思| 阴道放气是什么原因| 1956年属什么生肖| 肚子不舒服是什么原因| 黄芪可以和什么一起泡水喝| bart是什么意思| 梦见捡钱是什么意思| 右肺结节是什么意思| 血糖高喝什么茶| 手术后为什么要平躺6小时| 根管治疗是什么| 用盐水泡脚有什么好处| 喉结是什么| 4月4日是什么星座| 静脉曲张有什么危害吗| 生肖本命带红花是什么生肖| 办身份证的地方叫什么| 跑路什么意思| 得不到的永远在骚动什么意思| 东方为什么红| exp是什么日期| 古人的婚礼在什么时候举行| 指甲缝疼是什么原因| 美满霉素又叫什么名字| al是什么意思| 胆结石吃什么药可以化掉结石| 长脚气是什么原因引起的| hcg值低是什么原因| 男性睾丸疼痛什么原因| 为什么外阴老是长疖子| 什么人容易得心理疾病| 女人腿肿是什么原因引起的| 口腔溃疡吃什么维生素| 朱元璋为什么杀蓝玉| mico是什么意思| 8月8是什么星座| 与世无争是什么意思| 膝盖发软无力是什么原因| 辜负什么意思| 噤若寒蝉是什么意思| 中医治未病是什么意思| 喉咙有白痰是什么原因| 肝脏检查挂什么科| 牛乳是什么| 团委书记是什么级别| 黄子韬爸爸是干什么的| 铜钱癣用什么药| 脚后跟疼是什么原因引起的| 金牛座女和什么星座最配| 什么叫窝沟封闭| 涂素颜霜之前要涂什么| 正太是什么意思| 泄泻什么意思| 茭白不能和什么一起吃| 什么食物胆固醇含量高| 男性阴囊潮湿是什么病| 肛门瘙痒用什么药好| 婆婆是什么意思| 腿麻是什么病的前兆吗| 细菌感染吃什么药| 韩语阿西吧是什么意思| 嘶哑什么意思| 早晨起来手肿是什么原因| 孝顺的真正含义是什么| 失物招领是什么意思| 七点半是什么时辰| 男人喝劲酒有什么好处| 灵芝孢子粉有什么功效| 第三代身份证什么时候开始办理| 日光性皮炎用什么药膏| 孕晚期吃什么好| 冠脉钙化是什么意思| 村支书是什么级别| 化疗后吃什么补白细胞| 耳蜗是什么| 手指肿胀是什么原因| 为什么我| 胳膊上的肌肉叫什么| 失去理智什么意思| 由加页念什么| 炖鱼都放什么调料| 云的五行属性是什么| 自欺欺人是什么意思| 黄花梨树长什么样| 剪不断理还乱是什么意思| 性激素检查是查什么| 神经衰弱是什么| 产褥热是什么病| 钓鲈鱼用什么饵最好| 晚上睡觉手麻是什么原因| 颈椎骨质增生吃什么药效果好| 痨病是什么病| 胳膊出汗是什么原因| 拔冗是什么意思| 九月十号是什么星座| 什么肉不能吃| 托孤是什么意思| 心肌缺血用什么药效果最好| 脑供血不足吃什么| 独家记忆是什么意思| 医师是什么意思| 头皮屑特别多是什么原因| 肠胃不好吃什么水果比较好| 13数字代表什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 【原创】红外遥控--fromSummerDreamer

共1条 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文件,对外部数据的接收进行判断,进而实现对于不同红外的命令码设置不同的速度,为了方便观察这里加入了数码管显示速度挡位。

 




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
1978年属什么生肖 凉面用的是什么面条 男人吃什么补身体 十指不沾阳春水是什么意思 吃什么水果对肝好
五味是什么 miracle是什么意思 受精卵发育成什么 四月二十六是什么星座 晚上为什么睡不着
宝珀手表属于什么档次 肾阳不足吃什么中成药 宫颈糜烂是什么原因引起的 焱字五行属什么 梦见两口子吵架是什么意思
自采暖是什么意思 没事找事是什么意思 什么是偶数 ad是什么病的简称 %是什么意思
明天是什么日子liaochangning.com 勃起不坚硬吃什么药chuanglingweilai.com 猫咪掉胡子是什么原因hcv9jop7ns4r.cn 什么是纳氏囊肿hcv9jop2ns8r.cn 息怒是什么意思hcv8jop9ns6r.cn
经常吃蜂蜜有什么好处cj623037.com 大便干燥拉不出来是什么原因hcv9jop6ns6r.cn 5.6是什么星座hcv9jop2ns1r.cn 尿液中有白色沉淀物是什么原因hcv9jop5ns9r.cn 创客是什么意思hcv8jop1ns3r.cn
睾丸上长毛意味着什么hcv8jop8ns3r.cn 重丧是什么意思clwhiglsz.com 淡淡的什么hlguo.com 射手座属于什么星象hcv8jop4ns0r.cn 血清谷丙转氨酶偏高是什么意思hcv9jop1ns3r.cn
飞机下降时耳朵疼是什么原因hcv8jop8ns9r.cn 男人小便刺痛吃什么药hcv8jop8ns0r.cn 看好你是什么意思hcv8jop6ns1r.cn 属马本命佛是什么佛hcv7jop5ns4r.cn 人生观价值观世界观是什么意思hcv7jop4ns7r.cn
百度