OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5064|回复: 5

各位大神,帮帮忙,求有关红外传感器的

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-3-13
在线时间
1 小时
发表于 2014-3-19 20:12:26 | 显示全部楼层 |阅读模式
我想用单片机遥控电机正反转,但对于遥控方面一点也不知道.....求各位大神帮忙,只要红外遥控按键一按,单片机就接受到高电平信号这样的程序。。。另外,请问下要实现这样的功能,我应该在淘宝里买啥元器件?接收端插入单片机,然后控制器在手里遥控给单片机接收信号?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-19 21:06:26 | 显示全部楼层
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-3-13
在线时间
1 小时
 楼主| 发表于 2014-3-20 10:29:07 | 显示全部楼层
我不大懂....hs0038不是只有接收头,发信器用啥?....而且程序应该怎样编写
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-3-13
在线时间
1 小时
 楼主| 发表于 2014-3-20 10:29:26 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
我不大懂....hs0038不是只有接收头,发信器用啥?....而且程序应该怎样编写
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-3-20
在线时间
5 小时
发表于 2014-3-20 11:19:23 | 显示全部楼层
回复【4楼】178327552:
---------------------------------
发射器可以用空调的遥控器
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-3-20
在线时间
5 小时
发表于 2014-3-20 11:22:08 | 显示全部楼层
回复【楼主位】178327552:
---------------------------------
/*红外线接收程序,本程序运行在NEC制下的遥控器下,市面上的遥控器大部份都是NEC制的,运行程序,按遥控器
在数码管上显示相应的地址码-控制码(以16进制显示)分四段,前两段是地址码,后两段为控制吗,根据NEC编码不同,
有的是前8位为数据码,后8位为数据据码的反码,有的是16位编码,就没有反码了
在运行本例子时,先将插针J11短接1、2两脚,把红外数据脚引入P33*/

#include <reg51.h>
#include <intrins.h>

sbit hwx=P3^3; //定义红外接收脚,

code unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
//共阴数码管 0-9 a-f - 表
unsigned char l_tmpdate[8]={0,0,0,0,0,0,0,0};//显示管数据

unsigned char l_lhj[66]; //定义66位数组变量来存储接收的时间参数
void delay();//延时子函数
void display(unsigned char *lp,unsigned char lc);//数字的显示函数;lp为指向数组的地址,lc为显示的个数

void main(void)     //入口函数
{
EA=1; //首先开启总中断
EX1=1;   //开启外部中断 1
IT1=1;        // 设置成 下降沿触发方式
while(1){ //循环显示,接收都由
display(l_tmpdate,8);
}

}
void display(unsigned char *lp,unsigned char lc)//显示
{
unsigned char i; //定义变量
P2=0; //端口2为输出
P1=P1&0xF8; //将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管
for(i=0;i<lc;i++){ //循环显示
P2=table[lp&0x7f]; //查表法得到要显示数字的数码段
if(lp>0x7f)
P2+=0x80;
delay(); //延时
P2=0; //清0端口,准备显示下位
if(i==7) //检测显示完8位否,完成直接退出,不让P1口再加1,否则进位影响到第四位数据
break;
P1++; //下一位数码管
}
}
void delay(void) //空5个指令
{
unsigned char i=13;
while(i)
i--;
}
void hongwai(void)   interrupt 2     //外部中断 1 ,INT1(P3^3)连接红外线接收IC数据脚
{
unsigned char i,j,tmp;
unsigned int tmp2;
EX1=0;
// hwx=1;
j=33; //传送一组数包括引导码1位,地址码8位加反码8位,指令码8位加反码8位,总共33位
i=0; //从第一维数组开始
tmp2=0;
while(!hwx){ //NEC制红外波形引导码低电平开始
tmp2++; //低电平延时记数
if(tmp2==1000) //NEC制引导码判断,防止其它干扰波形进入
break;
}
if(tmp2<1000){ //小于1000个记数的判断为干扰退出接收
EX1=1;
return;
}
//P2=0x76; //数码管输出显示H,作为红外接收的指示

while(j){ //循环接收33位数据,为何我们用到66位数组,我们可以不接收高电平时间常数,只接低电平常数就
//可以判断1或0了,在这里我们都接收
//还有一点要知道,接收波形是反向,在没有接收时端口为高电平
tmp=0;
l_lhj=1; //时间量从1开始
while(!hwx){ //检测高低电平的变化
l_lhj++; //没变继续加1
delay(); //加入延时,是因为我们采用8位二进来存储,如果不加延时,时间量将计满
tmp++; //此变量为防止干扰带来的死循环
if(tmp==250)
break;
}
i++;
tmp=0;
l_lhj=1; //时间量从1开始
while(hwx){ //检测高低电平的变化
l_lhj++; //没变继续加1
delay(); //同上
tmp++;
if(tmp==250)
break;
}
i++;
j--;
}
i=255; //加入循环延时,处理数据
while(i){
tmp=255;
while(tmp){
P2=0XF0;
tmp--;
}
i--;
}
tmp=0;
//这里显示了全部的四段码,包括地址位两段,控制位两段,每段用点分开
for(i=3;i<19;i++,i++){ //处理地址位前8位,这是3是因为去掉前面的引导码。对低电平时间数据的数理,
tmp>>=1; //右移一位,接收低电平在前
if(l_lhj>30) //检测低电平时间超过30就确认为1
tmp+=0x80;
}
l_tmpdate[0]=tmp/16; //分开2位以16进制显示
l_tmpdate[1]=tmp%16+0x80; //0x80为加入小数点,目的是分开四段好看些
tmp=0;
for(i=19;i<35;i++,i++){ //同上,这里处理地址位后8位
tmp>>=1;
if(l_lhj>30)
tmp+=0x80;
}
l_tmpdate[2]=tmp/16;
l_tmpdate[3]=tmp%16+0x80;
tmp=0;
for(i=35;i<51;i++,i++){ //同上,这里处理控制位前8位
tmp>>=1;
if(l_lhj>30)
tmp+=0x80;
}
l_tmpdate[4]=tmp/16;
l_tmpdate[5]=tmp%16+0x80;
tmp=0;
for(i=51;i<67;i++,i++){ //同上,这里处理控制位后8位
tmp>>=1;
if(l_lhj>30)
tmp+=0x80;
}
l_tmpdate[6]=tmp/16;
l_tmpdate[7]=tmp%16+0x80;
EX1=1;
}
//朋友们,到这里,你是否有想过用遥控接收的指令码当键盘码来处理别的呢!
//比如按下了某个键的指令码去处理继电器的打开、关闭,哈哈,这个就你们自己来发辉下了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 22:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表