完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大致是这样的,将接收头凸面向着自己,从左到右的引脚分别是OUT、GND、VCC。我试过的一种接法是将OUT接单片机的中断引脚,例如51单片机接P3.2,PIC16F877接RB0,其余两脚就分别接GND和VCC了。我想说明的一点,IR1308好像是不用接什么电阻的,接起来简单,用起来也方便,就是现在在网上可找到的资料很少,不知道货源是不是也很少。希望以上内容对你有所帮助吧。给你一个电路参考一下:
最佳答案
|
|
|
|
在来一段程序:
给段红外解码,1602显示参考程序: #include #include #include #define TURE 1 #define FALSE 0 ***it IR=P3^2; //红外接口标志 ***it RS = P2^4;//Pin4 ***it RW = P2^5;//Pin5 ***it E = P2^6;//Pin6 #define Data P0//数据端口 unsigned int hour,minute,second,count; char code Tab[16]="0123456789ABCDEF"; char data TimeNum[]=" "; char data Test1[]=" "; /******************************************************************/ /* 变量声明 */ /******************************************************************/ unsigned char irtime;//红外用全局变量 bit irpro_ok,irok; unsigned char IRcord[4]; //处理后的红外码,分别是 客户码,客户码,数据码,数据码反码 unsigned char irdata[33]; //33个高低电平的时间数据 /******************************************************************/ /* 函数声明 */ /******************************************************************/ void Ir_work(void); void Ircordpro(void); void ShowString (unsigned char line,char *ptr); /******************************************************************/ /* 定时器0中断服务函数 */ /******************************************************************/ void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数 { irtime++; //用于计数2个下降沿之间的时间 } /******************************************************************/ /* 外部中断0函数 */ /******************************************************************/ void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数 { static unsigned char i; //接收红外信号处理 static bit startflag; //是否开始处理标志位 if(startflag) { if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms i=0; irdata=irtime;//存储每个电平的持续时间,用于以后判断是0还是1 irtime=0; i++; if(i==33) { irok=1; i=0; } } else {irtime=0;startflag=1;} } /******************************************************************/ /* 定时器0初始化 */ /******************************************************************/ void TIM0init(void)//定时器0初始化 { TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值 TH0=0x00; //重载值 TL0=0x00; //初始化值 ET0=1; //开中断 TR0=1; } /******************************************************************/ /* 外部中断初始化 */ /******************************************************************/ void EX0init(void) { IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2) EX0 = 1; //使能外部中断 EA = 1; //开总中断 } /******************************************************************/ /* 红外键值处理 */ /******************************************************************/ void Ir_work(void) //红外键值散转程序 { TimeNum[5] = Tab[IRcord[0]/16]; //处理客户码并显示 TimeNum[6] = Tab[IRcord[0]%16]; TimeNum[8] = Tab[IRcord[1]/16]; //处理客户码并显示 TimeNum[9] = Tab[IRcord[1]%16]; TimeNum[11] = Tab[IRcord[2]/16]; //处理数据码并显示 TimeNum[12] = Tab[IRcord[2]%16]; TimeNum[14] = Tab[IRcord[3]/16]; //处理数据反码并显示 TimeNum[15] = Tab[IRcord[3]%16]; ShowString(1,TimeNum);//显示处理过后的码值 irpro_ok=0; //处理完成后清楚标志位 } /******************************************************************/ /* 红外解码函数处理 */ /******************************************************************/ void Ircordpro(void)//红外码值处理函数 { unsigned char i, j, k; unsigned char cord,value; k=1; for(i=0;i<4;i++) //处理4个字节 { for(j=1;j<=8;j++) //处理1个字节8位 { cord=irdata[k]; if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差 { value=value|0x80; } else { value=value; } if(j<8) { value=value>>1; } k++; } IRcord=value; value=0; } irpro_ok=1;//处理完毕标志位置1 } /******************************************************************/ /* 微秒延时函数 */ /******************************************************************/ void DelayUs(unsigned char us)//delay us { unsigned char uscnt; uscnt=us>>1;/* Crystal frequency in 12MHz*/ while(--uscnt); } /******************************************************************/ /* 毫秒函数声明 */ /******************************************************************/ void DelayMs(unsigned char ms)//delay Ms { while(--ms) { DelayUs(250); DelayUs(250); DelayUs(250); DelayUs(250); } } /******************************************************************/ /* 写入命令函数 */ /******************************************************************/ void WriteCommand(unsigned char c) { DelayMs(5);//操作前短暂延时,保证信号稳定 E=0; RS=0; RW=0; _nop_(); E=1; Data=c; E=0; } /******************************************************************/ /* 写入数据函数 */ /******************************************************************/ void WriteData(unsigned char c) { DelayMs(5); //操作前短暂延时,保证信号稳定 E=0; RS=1; RW=0; _nop_(); E=1; Data=c; E=0; RS=0; } /******************************************************************/ /* 写入字节函数 */ /******************************************************************/ void ShowChar(unsigned char pos,unsigned char c) { unsigned char p; if (pos>=0x10) p=pos+0xb0; //是第二行则命令代码高4位为0xc else p=pos+0x80; //是第二行则命令代码高4位为0x8 WriteCommand (p);//写命令 WriteData (c); //写数据 } /******************************************************************/ /* 写入字符串函数 */ /******************************************************************/ void ShowString (unsigned char line,char *ptr) { unsigned char l,i; l=line<<4; for (i=0;i<16;i++) ShowChar (l++,*(ptr+i));//循环显示16个字符 } /******************************************************************/ /* 初始化函数 */ /******************************************************************/ void InitLcd() { DelayMs(15); WriteCommand(0x38); //display mode WriteCommand(0x38); //display mode WriteCommand(0x38); //display mode WriteCommand(0x06); //显示光标移动位置 WriteCommand(0x0c); //显示开及光标设置 WriteCommand(0x01); //显示清屏 } /******************************************************************/ /* 主函数 */ /******************************************************************/ void main(void) { EX0init(); //初始化外部中断 TIM0init();//初始化定时器 InitLcd(); //初始化液晶 DelayMs(15); sprintf(Test1," www.haotun.com "); //显示第一行固定信息 ShowString(0,Test1); sprintf(TimeNum,"Code ");//显示第二行固定信息 ShowString(1,TimeNum); while(1)//主循环 { if(irok) //如果接收好了进行红外处理 { Ircordpro(); irok=0; } if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等 { Ir_work(); } } } |
|
|
|
还有提醒,操作这类类似LED,发光二极管器件的时候一定要开电源限流保护,一般我是将电流限定在10ma以内,然后电压往上加,这样一般不容易烧坏。
|
|
|
|
通用的红外接收管是正面看:out(内部上拉) GND VCC(5V,也有3.3V的)
但也有不是这样的,反着来的,你可串个电阻来测,反了也不会烧,用个遥控器有反应就对了. |
|
|
|
唐辉电子,深耕晶振行业15年,非常专业,行业公认!
唐辉电子 官网上,有很多晶振使用、搭配、常见故障分析等方面的技术文档,欢迎分享。 真诚地希望和各位研发工程师长期互动、交友、携手进步。 32.768KHZ晶振,直插,贴片各种型号的,8M的,11.0592M,我司手里有现货, 少许样品,可免费给您。 |
|
|
|
32.768晶振,请找 唐辉电子,天天现货。月吞吐量高达一亿只。 唐辉电子,深耕晶振行业15年,非常专业,行业公认! 唐辉电子 官网上,有很多晶振使用、搭配、常见故障分析等方面的技术文档,欢迎分享。 真诚地希望和各位研发工程师长期互动、交友、携手进步。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
偏置电路与宽带偏置电路(Bias-Tee)-----电感器比较与选择
2101 浏览 0 评论
5719 浏览 0 评论
3310 浏览 2 评论
6320 浏览 2 评论
4162 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 18:23 , Processed in 0.702912 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号