当前位置:文档之家› 51单片机红外接收解码程序(详细解析)

51单片机红外接收解码程序(详细解析)

51单片机红外接收解码程序(详细解析)
51单片机红外接收解码程序(详细解析)

51单片机红外接收解码程序

接收以S52单片机作为接收系统。以S52的P3.3口作为接收端口,该端口是外部中断1。

这个接受程序是以XC866作为红外发送控制系统,接收程序如下:#include //头文件

#include

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit HWRx=P3^3; //位声明

code uchar Table[]= //共阴数码管0-9 a-f - 表

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};

uchar Table_Data[8]={0,0,0,0,0,0,0,0};//用于显示的数组uchar Table_Rx[67];//用于存储判断接收是1或0的参数void Delay();//延时子函数

void Display(uchar *lp,uchar lc)//显示

{

uchar i; //定义变量

P2=0; //端口2为输出,关闭

P1=P1&0xF8; //将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管

for(i=0;i

{

P2=Table[lp[i]]; //查表法得到要显示数字的数码段

if(lp[i]>0x7f)

P2+=0x80;

Delay(); //延时

P2=0; //清0端口,准备显示下位

if(i==7) //检测显示完8位否,完成直接退出,不让P1口再加1,

否则进位影响到第四位数据

break;

P1++; //点亮下一位数码管

}

}

void main() //主函数

{

EA=1; //首先开启总中断

EX1=1; //开启外部中断1

IT1=1; //设置成下降沿触发方式

while(1) //一直显示,其它由中断处理

{

Display(Table_Data,8);

}

}

void Delay() //延时时间大约为31us,晶振12M

{

uchar i=13;

while(i)

i--;

}

void Delay_ms(uint z) //延时时间约为1ms*X 晶振为12M {

uint x=0,y=0;

for(x=z;x>0;x--)

for(y=54;y>0;y--);

}

void hongwai() interrupt 2 //外部中断1 ,INT1(P3^3)连接红外线接收IC数据脚

{

uchar i,j,tmp;

EX1=0; //关闭中断

j=33; //传送一组数包括引导码1位,4个八位数据,总共33位

i=0; //从第一维数组开始

Delay_ms(10);

if(HWRx)

{ //然后再检测红线接收脚是有数据招收,有继续,没有则退出EX1=1;

return;

}

while(j--)

{ //循环接收33位数据,为何我们用到66位数组,我们可以不接收高电平

时间常数,只接低电平常数就

//可以判断1或0了,在这里我们都接收,还有一点要知道,接收波形是反向,在没有接收时端口为高电平

tmp=0;

Table_Rx[i]=1; //时间量从1开始

while(!HWRx) //检测高低电平的变化,这里检测的是高电平

{

Table_Rx[i]++; //没变继续加1

Delay(); //家一个延时防止,计数值一下子就加满了

tmp++; //加1

if(tmp==250)

break;

}

i++;

tmp=0;

Table_Rx[i]=1; //时间量从1开始

while(HWRx) //检测高低电平的变化,这里检测的是低电平

{

Table_Rx[i]++; //没变继续加1

Delay(); //同上

tmp++; //加1,用于判断是1还是0的,低电平来了

if(tmp==250)

break;

}

i++;

}

P1=0xf8;

i=200; //加入循环延时,抗干扰

while(i) //在有接收数据的时候显示一个H

{

tmp=255;

while(tmp)

{

tmp--;

P2=0x76;

}

i--;

}

tmp=0;

for(i=3;i<19;i++,i++) //处理发送的数据

{

tmp>>=1; //右移一位,接收低位在前

if(Table_Rx[i]>30) //检测低电平时间超过30就确认为1

tmp+=0x80;

}

Table_Data[0]=tmp/16; //分开2位以16进制显示,用显示发送的数据

Table_Data[1]=tmp%16;

tmp=0;

for(i=19;i<35;i++,i++) //同上

{

tmp>>=1;

if(Table_Rx[i]>30)

tmp+=0x80;

}

Table_Data[2]=tmp/16; Table_Data[3]=tmp%16;

tmp=0;

for(i=35;i<51;i++,i++) {

tmp>>=1;

if(Table_Rx[i]>30)

tmp+=0x80;

}

Table_Data[4]=tmp/16; Table_Data[5]=tmp%16;

tmp=0;

for(i=51;i<67;i++,i++) {

tmp>>=1;

if(Table_Rx[i]>30)

tmp+=0x80;

}

Table_Data[6]=tmp/16;

Table_Data[7]=tmp%16;

EX1=1; //刚进中断时关闭了分控,现在要打开}

51单片机中断程序大全

//实例42 :用定时器T0 查询方式 P2 口8 位控制LED 闪烁 //#include单片机寄存器定义的头文件 51包含 /******************************************************* *******函数功能:主函数 ******************************************************** ******/void main(void){ // EA=1;开总中断// 中断允许T0 // 定时器// ET0=1; 1的模式TMOD=0x01;// 使用定时器T0 位赋初值定时器T0 的高8 TH0=(65536-46083)/256; // 位赋初值的高8 TL0=(65536-46083)%6; // 定时器T0 T0启动定时器TR0=1;// TF0=0;P2=0xff; 无限循环等待查询while(1)// {while(TF0==0); TF0=0;P2=~P2; 位赋初值的高8 定时器TH0=(65536-46083)/256; // T0 位赋初值T0 TL0=(65536-46083)%6; //

定时器的高8 }} 1KHzT1:用定时器43 实例// 音频查询方式控制单片机发出 #include 单片机寄存器定义的头文件51 // 包含sbit sound=P3^7;将// 引脚sound P3.7 位定义为 /********************************************************** **** 函数功能:主函数 ******************************************************** ******/void main(void){// EA=1;开总中断// 中断允许ET0=1;// // 定时器T0 1的模式使用定时器// T1 TMOD=0x10; 位赋初值// TH1=(65536-921)/256; T1 定时器的高8 TL1=(65536-921)%6; // 定时器T1 的高8 位赋初值 TR1=1;// 启动定时器T1TF1=0; while(1)// 无限循环等待查询{while(TF1==0); TF1=0;

单片机的红外遥控器解码设计

第1章红外解码系统分析 第1节设计要求 整个控制系统的设计要求:被控设备的控制实时反应,从接收信号到信号处理及对设备控制反映时间应小于1s;整个系统的抗干扰能力强,防止误动作;整个系统的安装、操作简单,维护方便;成本低。 红外载波、编码电路设计要求:单片机定时器精确产生38KHz红外载波;根据控制系统要求能对红外控制指令信号精确编码并迅速发送。 红外解码电路设计要求:精确接收红外信号,并对所接收信号进行解码、放大、整形、解调等处理,最后输出TTL电平信号;对非红外光及边缘红外光抗干扰能力强。 设备扩展模块设计要求:直流控制交流;抗干扰能力强;反应迅速不产生误动作;能承受大电流冲击。 第2节总体设计方案 2.1方案论证 驱动与开关 方案一:采用晶闸管直接驱动。 其优点是体积小,电路简单,外围元件少。但控制电流小,大电流晶闸管成本高,并且隔离性能差。 方案二:采用三极管驱动继电器。 其体积大,外围元件多。优点是控制电流大,隔离性能好。 根据实际情况,拟采用方案二。 2.2总体设计框图 经过上述方案的分析选择,得出系统硬件由以下几部分组成:电视红外遥控器,51单片机最小系统,接收放大于一体集成红外接收头,1602液晶显示驱动电路。 整体设计思路为:根据扫描到不同的按键值转至相对应的ROM表读取数据。确认设备及菜单选择键后AT89S2将从ROM读取出来的值,按照数据处理要求从P2.5输出控制脉冲与T0产生的38KHz的载波(周期是26.3μs)进行调制,经NPN三极管对信号放大驱动红外发光管将控制信号发送出去。红外数据接收则是采用HS0038一体化红外接收头,内部集成红外接收、数据采集、解码的功能,只要在接收端INT0检测头信号低电平的到来,就可完成对整个串行的信号进行分析得出当前控制指令的功能。然后根据所得的指令去操作相应的用电器件工作,如图1-1所示。

基于单片机的红外遥控小车设计

单片机系统设计实例 红外遥控小车 专业:信息对抗技术 姓名:吴志飞 学号:1411050121 指导教师:张东阳

目录 1 绪论 (1) 2 系统分析 (2) 2.1系统框架 (2) 2.2电机驱动模块 (3) 2.3 LCD显示模块 (4) 3 系统硬件设计 (5) 3.1主控模块的电路设计 (6) 3.1.1AT89C51单片机的简介 (8) 3.1.2AT89C51管脚功能 (8) 3.2红外遥控模块的电路设计 (9) 3.2.1红外遥控的实现原理 (10) 3.2.2红外发射器 (11) 3.2.3红外接收器 (12) 3.3电机驱动模块的电路设计 (12) 3.4显示模块的电路设计 (13) 4 系统软件设计 (14) 4.1程序代码 (14) 4.2软件流程图 (17) 5 调试与仿真 (18) 5.1在keil中进行调试 (18) 5.2在Proteus中进行仿真 (19) 6 总结 (21) 参考文献 (22) I

沈阳理工大学课程设计说明书 1 绪论 随着计算机、微电子、信息技术的快速进步,智能化技术的开发速度越来越快,,智能化程度越来越高,应用范围也越来越广,包括海洋开发、宇宙探测、工农业生产、军事、社会服务、娱乐等各个领域。智能电动小车系统以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科。主要由路径识别、角度控制及车速控制等功能模块组成。同时,当今机器人技术发展的如火如荼,其在国防等众多领域的应用广泛开展。神五、神六升天、无人飞船等等无不得益于机器人技术的迅速发展。一些发达国家已把机器人制作比赛作为创新教育的战略性手段,参加者多数为学生,目的在于通过大赛全面培养学生的动手能力、创造能力、合作能力和进取精神,同时也普及智能机器人的知识。从某种意义上来说,机器人技术反映了一个国家综合技术实力的高低,而智能电动小车是机器人的雏形,它的控制系统的研制将有助于推动智能机器人控制系统的发展,同时为智能机器人的研制提供更有利的手段。 本次课设设计的红外遥控智能小车可以分为四大组成部分:红外遥控部分、显示部分、执行部分、控制部分。智能小车可以实现按遥控指示前行,后退,左转和右转。该设计主要通过对系统硬件电路的设计,软件设计和程序的编写,然后通过后期软硬件调试达到设计初衷。 1

单片机中断程序大全

单片机中断程序大全公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-

//实例42:用定时器T0查询方式P2口8位控制L E D闪烁#include // 包含51单片机寄存器定义的头文件void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 TF0=0; P2=0xff; while(1)//无限循环等待查询 { while(TF0==0) ; TF0=0; P2=~P2; TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 //实例43:用定时器T1查询方式控制单片机发出1KHz音频

#include // 包含51单片机寄存器定义的头文件sbit sound=P3^7; //将sound位定义为P3.7引脚 void main(void) {// EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%256; //定时器T1的高8位赋初值 TR1=1; //启动定时器T1 TF1=0; while(1)//无限循环等待查询 { while(TF1==0); TF1=0; sound=~sound; //将P3.7引脚输出电平取反 TH1=(65536-921)/256; //定时器T0的高8位赋初值 TL1=(65536-921)%256; //定时器T0的高8位赋初值 } } //实例44:将计数器T0计数的结果送P1口8位LED显示 #include // 包含51单片机寄存器定义的头文件sbit S=P3^4; //将S位定义为P3.4引脚

基于51单片机的红外发射接收温度传感装置

2015年高校联盟电子制作大赛题目 (数字类) 技术报告 队长:黄文杰 学号:2014212652 学院:自动化学院 队员:李嘉伟 学号:2014212650 学院:自动化学院 唐泓 学号:2014212640 学院:自动化学院

题目名称:简易红外光数字通信装置 1、设计题目:单片机应用系统设计 基于单片机的——简易红外光数字通信装置 2、总体要求: 本次大赛设计内容从主办方所给的题目出发,参赛者应了解单片机实际的应用系统,并自学红外信号编码,弄清结构和功能,结合单片机课程知识及其他相关课程知识,充分发挥自己的想象力和创造力,实现主办方题目要求并适当发挥,团队合作完成本次比赛。 3、具体要求: 1)确定应用系统功能参数 2)设计合理的电路原理图 3)Proteus仿真原理图 4)制作电路板并检测 5)设计程序 6)电路板调试运行 7)技术报告

单片机技术报告 一、项目简介 单片机被广泛应用于仪器仪表、工业自动控制、家用电器、医用设备、办公自动化设备、安全监控等领域,涵盖了人类生活的方方面面。 二、系统功能描述 这是一款基于STC89C52RC单片机的简易红外光数字通信装置。它可以分为六个部分: (1)红外功能,可以红外传送数据 (2)音阶功能,在发射板上按动七个音阶,在接收板上可以响出duo rai mi fa suo nai xi 七个音阶 (3)温度检测,在发射板上可以检测温度,在接收板上可以显示温度,每隔0.5秒更新一次温度。 三、设计思路 红外模块设计思路: 1:对输入的数据进行编码。 2:对编码进行脉冲调制。

3:信号放大后,通过发射管发送38khz信号。 4:接收信号,进行解码。 5:让51 对信号进行处理(显示,统计,分析)。 音阶模块设计思路: 1:计算音阶响应相应延时 2:建立延时数组,按键控制取数组里的值。 3:用延时控制发出不同声音 温度模块设计: 1:温度测出数据,读取温度感应数据,计算成十进制数。 2:在数码管上显示十进制数 3:延时控制发射更新温度数据 四、程序部分 1.红外部分,红外部分分为,发射和接收部分,发射部分,通过定时器0 产生38k载波,通过定时器1发送信号。接收部分,通过外部中断(下 降沿触发)接收信号,通过定时器计算两个下降沿之间的时间来确定收 到的是0还是1。 2.音阶部分:按键1~7,每次按键按下,发送控制数据,控制接收蜂鸣器 根据不同频率发出不同声音。 3.温度部分:发射端温度传感器,测出温度,通过计算得到温度具体数值, 发送数据,接收端,根据接收的数据,显示在数码管上。

51单片机中断程序大全

//实例42:用定时器T0查询方式P2口8位控制LED闪烁#include // 包含51单片机寄存器定义的头文件 /************************************************************** 函数功能:主函数 **************************************************************/ void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 TF0=0; P2=0xff; while(1)//无限循环等待查询 { while(TF0==0) ; TF0=0; P2=~P2; TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 } } //实例43:用定时器T1查询方式控制单片机发出1KHz音频#include // 包含51单片机寄存器定义的头文件 sbit sound=P3^7; //将sound位定义为P3.7引脚 /************************************************************** 函数功能:主函数 **************************************************************/ void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值

c51、c52单片机红外线遥控接收解码c程序(可直接使用)

/ 亲,此程序以经过测试,可直接使用!!!/ #include #define uchar unsigned char #define uint unsigned int void delay(uchar x); sbit IRIN = P3^2; uchar IRCOM[4]; void main() { IE = 0x81; TCON = 0x01; IRIN=1; /* 此处可以根据按键码自由编写程序 /以下为3*7遥控按键码/ /(也可以应用与其他类型遥控,本程序只以3*7遥控为例)/ / 0x45 0x46 0x47 / / 0x44 0x40 0x43 / / 0x07 0x15 0x09 / / 0x16 0x19 0x0d / / 0x0c 0x18 0x5e / / 0x08 0x1c 0x5a / / 0x42 0x52 0x4a / 例如: while(1) {switch(IRCOM[2]) {case 0x45: P2=0x7f; break; case 0x44: P2=0xbf; break; case 0x07: P2=0xdf; break; case 0x16: P2=0xef; break; case 0x0c: P2=0xf7; break; case 0x08: P2=0xfb; break; case 0x42: P2=0xfd; break; case 0x52: P2=0xfe; break; case 0x4a: P2=0xff; break; case 0x5a: P2=0x00; break;} } */ while(1); } //end main /**********************************************************/ void IR_IN(void) interrupt 0 //外部中断服务程序 {unsigned char j,k,N=0; EX0 = 0; delay(15); if (IRIN==1) { EX0 =1;

基于51单片机的红外遥控器设计

天津职业大学 二○一五~二○一六学年第1学期 电子信息工程学院 通信系统综合实训报告书 课程名称:通信系统综合实训 班级:通信技术(5)班 学号:1304045640 1304045641 1304045646姓名:韩美红季圆圆陈真真指导教师:崔雁松 2015年11月17日

一、任务要求 利用C51单片机设计开发一套红外线收发、显示系统。 具体要求: ●编写相关程序(汇编、C语言均可); ●用Proteus绘制电路图并仿真实现基本功能; ●制作出实物 二、需求分析(系统的应用场景、环境条件、参数等) 现在各种红外线技术已经源源不断进入我们的生活中,在很多场合发挥着作用。 机场、宾馆、商场等的自动门,会在人进出时自动地开启和关闭。原来,在自动门的一侧有一个红外线光源,发射的红外线照射到另一侧的光电管上,红外线是人体察觉不到的。当人走到大门口,身体挡住红外线,电管接收不到红外线了。根据设计好的指令,触发相应开关,就把门打开了。等人进去后,光电管又可以接到红外线,恢复原来的线路,门又会自动关闭。因此这种光电管被称为“电眼”,在许多自动控制设备中大显身手。 在家庭中,许多电子设备如彩色电视、空调、冰箱和音响等,都使用了各种“红外线遥控器”。利用它我们可以非常方便的转换电视频道或设定空调的温度档次。 三、概要设计(系统结构框图/系统工作说明流程图) 红外线收发、显示系统硬件由以下几部分组成:红外遥控器,51单片机最小系统,接收放大器一体集成红外接收头,LED灯显示电路。 红外线接收是把遥控器发送的数据(已调信号)转换成一定格式的控制指令脉冲(调制信号、基带信号),是完成红外线的接收、放大、解调,还原成发射格式(高、低电位刚好相反)的脉冲信号。这些工作通常由一体化的接收头来完成,输出TTL兼容电平。最后通过解码把脉冲信号转换成数据,从而实现数据的传输。 红外遥控系统电路框图

51单片机定时中断C语言的写法步骤

51单片机定时中断C语言的写法步骤 程序说明:51单片机定时器0工作于方式一,定时50ms中断一次 晶振为12M #include void main { TOMD = 0X01;//配置定时器0工作于方式一 TH1 = (65536-50000)/256; //高八位装入初值 TL1 = (65536-50000)%256; //低八位装入初值 ET0 = 1; //开定时器0中断 EA = 1; //开总中断 TR0 = 1; //启动定时器0 while(1) { ; } } void Timer0_int() interrupt 1 { //重新装初值 TH1 = (65536-50000)/256; //高八位装入初值 TL1 = (65536-50000)%256; //低八位装入初值 } /****************************************************************************** *********************************/ 上面是比较好理解的。如果实在要求简洁的话,看下面的,跟上面功能一样 #include void main { TOMD = 0X01;//配置定时器0工作于方式一 TH1 = 0x3c; //高八位装入初值 TL1 = 0xb0; //低八位装入初值 IE = 0x82;//开总中断并开定时器0中断 TR0 = 1; //启动定时器0 while(1) { ; } }

void Timer0_int() interrupt 1 { //重新装初值 TH1 = 0x3c; //高八位装入初值TL1 = 0xb0; //低八位装入初值}

红外遥控编码原理及C程序,51单片机红外遥控

红外遥控解解码程序 #include #include #define uchar unsigned char #define uint unsigned int sbit lcden=P1^0; sbit rs=P1^2; sbit ir=P3^2; sbit led=P1^3; sbit led2=P3^7; unsigned int LowTime,HighTime,x; unsigned char a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u; unsigned char flag;//中断进入标志位 uchar z[4]; uchar code table[]={"husidonghahahah"}; uchar code table1[]={"User Code:"}; void delay(uint x) { uint i,j; for(i=x;i>0;i--) //i=xms即延时约xms毫秒for(j=100;j>0;j--); } void write_com(uchar com) {//写液晶命令函数 rs=0; lcden=0; P2=com; delay(3); lcden=1; delay(3); lcden=0; } void write_date(uchar date) {//写液晶数据函数 rs=1; lcden=0; P2=date; delay(3); lcden=1;

delay(3); lcden=0; } void init_anjian() //初始化按键 { a=0;b=0;c=0;d=0; e=0;f=0;g=0;h=0; i=0;j=0;k=0;l=0; m=0;n=0;o=0;p=0; q=0;r=0;s=0;t=0; u=0; } void init_1602() {//初始化函数 uchar num; lcden=0; rs=0; write_com(0x38);//1602液晶初始化 write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num<14;num++)//写入液晶固定部分显示{ write_date(table[num]); delay(3); } write_com(0x80+0x40); for(num=0;num<9;num++) { write_date(table1[num]); delay(3); } } void write_dianya(uchar add,char date) {//1602液晶刷新时分秒函数4为时,7为分,10为秒char shi,ge; shi=date%100/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); }

单片机红外电视遥控器C51程序代码单片机程序

单片机红外电视遥控器C51程序代码单片机程序 //************************************************************** //名称:单片机红外电视遥控器C51程序代码() /*-------------------------------------------------------------- 描述: 一般红外电视遥控器的输出都是用编码后串行数据对38~40kHz的方波进行 脉冲幅度调制而产生的.当发射器按键按下后,即有遥控码发出,所按的键 不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”。上述“0”和“1”组成的32位二进制码经38kHz 的载频进行二次调制,然后再通过红外发射二极管产生红外线向空间发射。 一般电视遥控器的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后16位 为8位的操作码和8位的操作反码,用于核对数据是否接收准确。 根据红外编码的格式,发送数据前需要先发送9ms的起始码和4.5ms的结果码。接收方一般使用TL0038一体化红外线接收器进行接收解码,当TL0038接收到38kHz红外信号时,输出端输出低电平,否则为高电平。 所以红外遥控器发送红外信号时,参考上面遥控串行数据编码波形图,在低 电平处发送38kHz红外信号,高电平处则不发送红外信号。 ----------------------------------------------------------------*/ //编辑: //日期: //**************************************************************** #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include //包括一个51标准内核的头文件 static bit OP; //红外发射管的亮灭 static unsigned int count; //延时计数器 static unsigned int endcount; //终止延时计数 static unsigned char flag; //红外发送标志 char iraddr1; //十六位地址的第一个字节 char iraddr2; //十六位地址的第二个字节 void SendIRdata(char p_irdata); void delay(); //************************************************************** void main(void) {

基于89C51单片机的红外线通信接口电路

基于89C51单片机的红外线通信接口电路 简介:在通信系统中,常利用非电信号来传递控制信号和数 ... 关键字:红外线 在通信系统中,常利用非电信号来传递控制信号和数据,以实现遥控或遥测的功能红外通信,具有控制简单、实施方便,传输可靠性高的特点,是一种较为常用的通信方式。红外通信利用950 nm近红外波段的红外线作为传递信息的媒体,发送端采用脉时调制方式,将二进制数字信号调制成某一频率的脉冲序列,并驱动红外发射管以光脉冲的形式发送,接收端将收到的光脉冲转换成电信号。再经过放大、滤波处理后送给解调电路,还原为二进制 数字信号后输出。 1 系统的总体构成 红外通信系统采用红外光传输及无限工作机制,其组成结构主要包括:红外发射器,通 信信道,红外接收器三大部分组成。 (1)完成信号的电光变换并向空间发射红外脉冲 红外发射器的关键是红外发光二极管和响应的驱动电路。红外发光耳机光首先要满足其调制带宽大于信号的频谱宽度,保证通信线路畅通。此外发光二极管的发射波长应与接收端的光电探测器(选用硅光二极管)的峰值响应相匹配,最大程度地抑制背景杂散光干扰,现阶段一般选用780nm~950 nm的红外波段进行数字信号传输。由于红外无线通信系统的信噪比与发射功率的平方成正比,所以适当提高红外发射器的发射功率,并采用空间分集、全息漫射片等可使发射端的光功率在空间均匀分布的措施来降低误码率,提高通信质量。其原 理图如图1所示。 (2)红外接收器 红外接收器包括红外接收部分以及后续的信号采滤波、判决、量化、均衡和解码等其原 理框图如图2所示。

红外接收端的工作过程,首先进行光电转换,将红外脉冲信号变为电信号,经过适当的频域均衡后进行码元判决,码元判决电路是接收器设计的核心部分。由于信号采用红外无线进行穿社,其电平变化范围较大,所以码元判决电路必须是自适应的。接收的信号经自适应码元判决后变成数字信号,再进行适当的解码转换为差分信号进入计算机网卡的信号输入端。 (3)通信信道 红外无线数字通信的信道泛指发射器与接收器之间的空间。由于自然光及人工光源等背景光信号的介入,信号源以及发射、接收设备中电学或光学噪声的影响,红外无线数字通信在某些场合的通信质量较差,需要采用信道编码技术来提高抗干扰能力。 在红外线通信系统中,由于红外发射器的发射功率较小,而且信号采用红外线进行传输,易受外界环境的影响,这些因素导致了红外接收器的信号很弱,并且电平变化范围较大。因此,低噪声的前置放大器设计和自适应的码元判决电路是必须的。低噪声的前置放大器一般选用输入阻抗较高的场效应管放大器,并要求带宽大,增益高,噪声低,干扰小,频率响应与信道脉冲响应匹配。自适应的码元判决电路能自动跟踪输入信号电平的变化,得到最佳的阈值电平,并根据此阈值电平对信号进行判决,将其变换为数字电平之后进行解码,恢复原始信号。同时,为了滤去低频噪声及人为干扰采用带通滤波器,为了与调制特性匹配并消除码间干扰常采用均衡技术,为了获得较大的光接收器工作范围及瞬时视场采用球形光学透镜。这些措施都是将有利于红外无线通信质量的提高。 2 红外串行通信接口电路设计 单片机控制的红外通信系统主要有红外发射器,红外接收器,以及单片机89C51三部分组成,单片机本身并不具备红外通信接口,可以利用单片机的串行接口与片红外发射和接收电路,组成一个单片机控制系统的红外串行通信接口。 2.1 发射部分设计 红外发送电路包括脉冲振荡器、三极管和红外发射管等部分。其中脉冲振荡器有NE55

单片机红外发射(原理与设计程序)

用AT89S51单片机制作红外电视遥控器 一般红外电视遥控器的输出都是用编码后串行数据对38~40kHz的方波进行脉冲幅度调制而产生的。 当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”。 上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制,然后再通过红外发射二极管产生红外线向空间发射。一般电视遥控器的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后16位为8位的操作码和8位的操作反码,用于核对数据是否接收准确。 根据红外编码的格式,发送数据前需要先发送9ms的起始码和4.5ms的结果码。 遥控串行数据编码波形如下图所示: 接收方一般使用TL0038一体化红外线接收器进行接收解码,当TL0038接收到38kHz红外信号时,输出端输出低电平,否则为高电平。所以红外遥控器发送红外信号时,参考上面遥控串行数据编码波形图,在低电平处发送38kHz红外信号,高电平处则不发送红外信号。 单片机红外电视遥控器电路图如下:

C51程序代码: #include static bit OP; //红外发射管的亮灭 static unsigned int count; //延时计数器static unsigned int endcount; //终止延时计数static unsigned char flag; //红外发送标志char iraddr1; //十六位地址的第一个字节 char iraddr2; //十六位地址的第二个字节 void SendIRdata(char p_irdata); void delay(); void main(void) { count = 0;

51单片机中断程序大全

//实例42 :用定时器TO查询方式P2 口8位控制LED闪烁#include // 包含 51 单片机寄存器定义的头文件/************************************************************** 函数功能:主函数 void main(void) { // EA=1; // 开总中断 // ETO=1; // 定时器 TO 中断允许 TMOD=OxO1; // 使用定时器 TO 的模式 1 THO=(65536-46O83)/256; // 定时器 TO 的高 8 位赋初值 TLO=(65536-46O83)%256; // 定时器 TO 的高 8 位赋初值 TRO=1; // 启动定时器 TO TFO=O; P2=Oxff; while(1)// 无限循环等待查询 { while(TFO==O) TFO=O; P2=~P2; THO=(65536-46O83)/256; // 定时器 TO 的高 8 位赋初值

TL0=(65536-46083)%256; // 定时器 T0 的高 8 位赋初值 } // 实例43 :用定时器T1 查询方式控制单片机发出1KHz 音频#include // 包含 51 单片机寄存器定义的头文件 sbit sou nd=P3^7; // 将 sound 位定义为 P3.7 引脚 /************************************************************** 函数功能:主函数 **************************************************************/ void main(void) { // EA=1; // 开总中断 // ET0=1; // 定时器 T0 中断允许 TMOD=0x10; // 使用定时器 T1 的模式 1 TH1=(65536-921)/256; // 定时器 T1 的高 8 位赋初值 TL1=(65536-921)%256; // 定时器 T1 的高 8 位赋初值 TR1=1; // 启动定时器 T1 TF1=0; while(1)// 无限循环等待查询 {

用单片机解码红外遥控器

用单片机解码红外遥控器 遥控器使用方便,功能多.目前已广泛应用在电视机、VCD、DVD、空调等各种家用电器中,且价格便宜,市场上非常容易买到。如果能将遥控器上许多的按键解码出来.用作单片机系统的输入.则解决了常规矩阵键盘线路板过大、布线复杂、占用I/O口过多的弊病。而且通过使用遥控器,操作时可实现人与设备的分离,从而更加方便使用。下面以TC9012编码芯片的遥控器为例。谈谈如何用常用的51系统单片机进行遥控的解码。 一、编码格式 1、0和1的编码 遥控器发射的信号由一串O和1的二进制代码组成.不同的芯片对0和1的编码有所不同。通常有曼彻斯特编码和脉冲宽度编码。TC9012的O和1采用PWM方法编码,即脉冲宽度调制,其O码和1码如图1所示(以遥控接收输出的波形为例)。O码由O.56ms低电平和0.56ms高电平组合而成.脉冲宽度为1.12ms.1码由0.56ms低电平和1.69ms高电平组合而成.脉冲宽度为2.25ms。在编写解码程序时.通过判断脉冲的宽度,即可得到0或1。 2、按键的编码

当我们按下遥控器的按键时,遥控器将发出如图2的一串二进制代码,我们称它为一帧数据。根据各部分的功能。可将它们分为5部分,分别为引导码、地址码、地址码、数据码、数据反码。遥控器发射代码时.均是低位在前。高位在后。由图2分析可以得到.引导码高电平为4.5ms,低电平为4.5ms。当 接收到此码时.表示一帧数据的开始。单片机可以准备接收下面的数据。地址码由8位二进制组成,共256种.图中地址码重发了一次。主要是加强遥控器的可靠性.如果两次地址码不相同.则说明本帧数据有错.应丢弃。不同的设备可以拥有不同的地址码.因此。同种编码的遥控器只要设置地址码不同,也不会相互干扰。图中的地址码为十六进制的0EH(注意低位在前)。在同一个遥控器中.所有按键发出的地址码都是相同的。数据码为8位,可编码256种状态,代表实际所按下的键。数据反码是数据码的各位求反,通过比较数据码与数据反码.可判断接收到的数据是否正确。如果数据码与数据反码之间的关系不满足相反的关系.则本次遥控接收有误.数据应丢弃。在同一个遥控器上.所有按键的数据码均不相同。在图2中,数据码为十六进制的0CH,数据反码为十六进制的0F3H(注意低位在前).两者之和应为0FFH。 二、单片机遥控接收电路

基于51单片机红外发射与接收C程序

基于51单片机红外发射与接收程序实验证明,效果非常好。

红外发射程序 #include #include #define uchar unsigned char #define uint unsigned int sbit key1=P3^3; sbit key2=P3^4; sbit key3=P3^5; sbit LED=P1^0; //发射指示灯sbit out=P3^7; uchar i,a,num1; void init()//初始化作用 { key1=1;

key2=1; key3=1; } void delay(uchar aa) { uchar bb,cc; for(bb=aa;bb>0;bb--) for(cc=200;cc>0;cc--); } void delayms(uchar aa)//延时程序 { for(a=aa;a>0;a--) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } } void khz(uchar aa)//是发射38KHZ的程序 { for(a=aa;a>0;a--) //这个for语句可以得到准确的26.3波特率{ out=0; i=7; //低了17us while(i>0)i--; // 38kHZ out=1; //高了9us 17+9=26us 比26.3快一点点} } //khz(116);//3.028ms 精确的时间 //khz(64);//2.006ms //khz(40); //1.052ms //delayms(125);//2.012ms 这里是一些时间的介绍 //delayms(65);//1.054ms //delayms(93);//1.5ms void fashu(uchar num) {

基于51单片机控制红外通信

红外通信原理 红外遥控有发送和接收两个组成部分。发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收完成对红外信号的接收、放大、检波、整形,并解调出遥控编码脉冲。为了减少干扰,采用的是价格便宜性能可靠的一体化红外接收头(HS0038,它接收红外信号频率为38kHz,周期约26μs) 接收红外信号,它同时对信号进行放大、检波、整形得到TTL 电平的编码信号,再送给单片机,经单片机解码并执行去控制相关对象。具体实现过程如下: (在这里特别强调:编码与解码是一对逆过程,不仅在原理上是一对逆过程,在码的发收过程也是互反的,即以前发射端原始信号是高电平,那接收头输出的就是低电平,反之亦然。因此为了保证解码过程简单方便,在编码时应该直接换算成其反码。)

1.红外发射部分: 下图为红外发射部分的电路拟图: 编码过程: (1) 二进制信号的调制 二进制信号的调制由单片机来完成,它把编码后的二进制信号调制成频率为38kHz的间断脉冲串(用定时器来完成),相当于用二进制信号的编码乘以频率为38kHz的脉冲信号得到的间断脉冲串,即是调制后用于红外发射二极管发送的信号。 (2)PPM编码

这种遥控编码具有以下特征: ○1遥控编码脉冲由前导码、16 位地址码(8位地址码、8 位地址码的反码)和16 位操作码(8 位操作码、8 位操作码的反码)组成。前导码:是一个遥控码的起始部分,由一个9ms的高电平( 起始码) 和一个4. 5ms的低电平( 结果码)组成,作为接受数据的准备脉冲。16位地址码:能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。 16 位操作码:用来执行不同的操作。 ○2采用脉宽调制的串行码,以脉宽为0.56ms、间隔0.56ms、周期为1.12ms的组合表示二进制的“0”;以脉宽为1.68ms、间隔0.56ms、周期为2.24ms的组合表示二进制的“1”。 (3)发送程序 #include

51单片机实现红外线编码检测

51单片机实现红外编码检测 通过51 单片机及外围电路实现对接受信号的处理(通过外部中断和计数器)获得信号的01编码,设备显示。 红外传感基础知识: ?红外发光管:红外发光二极管通常使用砷化镓(GaAs)、砷铝化镓(GaAlAs)等材料,采用全透明或浅蓝色、黑色的树脂封装。 产生的光波波长为940nm左右,为红外光 ?红外接收头:左图为一常用的红外接收模块。其内部含有高频的滤波电路,专门用来滤除红外线合成信号的载波信号(38KH),并送出接收到的信号。当红外线合成信号进入红外接收模块,在其输出端便可以得到原先发射器 发出的数字编码,只要经过单片机解码程序进行解码,便可以 得知按下了哪一个按键,而做出相应的控制处理,完成红外遥 控的动作。 ?红外发送协议:引导码+客户码1+客户码2+操作码 +操作反码 ***用户真正须要的只有操作码***

?调制:“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率(因红外接收头能接收的红外线为38KHz 左右),还可达到降低电源功耗的 目的。 主要内容: 通过51 单片机及外围电路实现对接受信号的处理(通过外部中断和计数器)获得信号的01编码,用设备显示,(lcd或数码管);这里管脚的对应P3.2接受红外对管信息,lcd接线:

主程序: #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include sbit IR=P3^2; //红外接口标志 /*------------------------------------------------ 全局变量声明 ------------------------------------------------*/ unsigned char irtime;//红外用全局变量 bit irpro_ok,irok; unsigned char IRcord[4]; unsigned char irdata[33]; /*------------------------------------------------ 函数声明 ------------------------------------------------*/ void Ircordpro(void); /*------------------------------------------------ 定时器0中断处理 ------------------------------------------------*/ void tim0_isr (void) interrupt 1 using 1 { irtime++; //用于计数2个下降沿之间的时间 } /*------------------------------------------------ 外部中断0中断处理 ------------------------------------------------*/ void EX0_ISR (void) interrupt 0 //外部中断0服务函数 { static unsigned char i; //接收红外信号处理 static bit startflag; //是否开始处理标志位 if(startflag) {

相关主题
文本预览
相关文档 最新文档