红外的一些小程序_第1页
红外的一些小程序_第2页
红外的一些小程序_第3页
红外的一些小程序_第4页
红外的一些小程序_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上红外专题讲解 昵 称: 一个人行走 制作日期:2011-7-12制作目的:由于我刚开始学红外的时候,什么都不懂,在网上到处找资料,可是在这些找到的资料中,很多都是没有用的,找到的程序,大多都是拷贝的某某公司提供的示例源程序,大多都是千篇一律,看过很多的百度提问,可是基本上都没有从根本上解决问题,也上过豆丁之类的,看看东西还要积分,我郁闷了,当时我就立志等我学会红外红一定做个红外的专题,免费的分享给大家,以方便苦苦探索的莘莘学子。苦恼了好一阵后,幸好认识一位嵌入的大哥,给我了帮助,给我资料,功夫不负有心人,今天我终于学了红外的一些知识,为了谢谢帮助过我的大哥,我只能将他

2、交给我的分享给大家,以此回报他,因此在这里将我所学到的免费的分享给大家,供大家交流学习。至于程序,它是灵活多变,大家不要习惯性的CTRl+A,CTRL+C,要读懂它的意思,根据程序的思想,然后自己发挥,从而真正掌握它的原理。大家如有疑问的可以和我交流,我的QQ:,在此祝福所有在学习道路上孜孜不倦的可敬可佩的学子们,学业大成!对于经济窘迫的我来说,习惯了拿不收费的资料,并对变相收费有一种深恶痛绝的感觉;让更多的人来(更容易)了解红外,贡献自己的一点力量。也希望大家有好资料的多分享一下,不要那么小气,还要什么积分什么的。1硬件连接:P0口为数码管的段选段,P2口的高四位为数码管的位选端,红外接连在

3、P3.2端,即连接在外部中断0处2.主要功能:用数码管显示接收到的红外按键的键码3.程序如下:/硬件连接#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit hongwai = P32;/此表为 数码管的字模, 共阴数码管 0-9 - ucharcodetable=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71;uchar r

4、ecieve3;/储存用户码、用户反码与键数据码、键数据反码 uchar a=0,0,0,0;void delay(uint i) char j; for(i; i > 0; i-) for(j = 200; j > 0; j-);void IRdelay(uchar x) /x*0.14MS uchar i; while(x-) for (i = 0; i<13; i+); void display(uchar keyno) uchar i,j; a0=keyno%10000/1000; a1=keyno%1000/100; a2=keyno%100/10; /十位 a3=

5、keyno%10; /个位 j=0xfe; /对数码管进行逐位扫描显示 for(i=0; i<=3; i+) j=_cror_(j,1); P2=j; P0 = tableai; delay(50); P0 = 0; void IR_IN(void) interrupt 0 /外部中断0,即红外接收P3.2 uchar j,k,count=0; EX0 = 0; /关闭外部中断0,即停止接收红外 IRdelay(5); if (hongwai=1) EX0 =1; return; /确认IR信号出现 while (!hongwai) /等IR变为高电平,跳过9ms的前导低电平信号。 IR

6、delay(1); for (j=0;j<4;j+) /收集四组数据 for (k=0;k<8;k+) /每组数据有8位 while (hongwai) /等 IR 变为低电平,跳过4.5ms的前导高电平 信号。 IRdelay(1); while (!hongwai) /等 IR 变为高电平 IRdelay(1); while (hongwai) /计算IR高电平时长 IRdelay(1); count+; if (count>=30) EX0=1; return; /0.14ms计数过长自动离开。 /高电平计数完毕 recieve j= recieve j >>

7、; 1; /数据最高位补"0" if (count>=8) recieve j = recieve j | 0x80; /数据最高位补"1" count=0; /end for k /end for j if (recieve 2!= recieve 3)/校验键值码与键值反码的值, EX0=1; /如果键值码与键值反码取反后相等,则开外部中断中断0,开始接收下一个红外信号 return; EX0 = 1; void main() EA=1;/开放全局中断EX0=1;/开外部中断0IT0=1;/触发方式为脉冲负边沿触发hongwai=1;while

8、(1) /显示红外键码display(recieve 2); 2 主要功能:当遥控器上的数字键被按下时,让八个数码管同时显示按下的数字 硬件连接:P0口为数码管的段选段,P2口为数码管的位选端,默认位选端全部开放0x00,P3.2接红外接收头 程序如下:#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit hongwai = P32;ucharcodetable= 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0

9、x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71;uchar recieve3;/储存用户码、用户反码与键数据码、键数据反码 uchar a=0,0,0,0;void IRdelay(uchar x) /x*0.14MSuchar i; while(x-) for (i = 0; i<13; i+); void main() EA=1;/开放全局中断EX0=1;/开外部中断0IT0=1;/触发方式为脉冲负边沿触发hongwai=1;while(1) P2=0x00;switch(recieve2) case 22:P0=table0;break;/不

10、同的遥控器可能键值不一样,可以根据程序1测出键值,在修改case后面的值即可case 12:P0=table1;break;case 24:P0=table2;break;case 94:P0=table3;break;case 8:P0=table4;break;case 28:P0=table5;break;case 90:P0=table6;break;case 66:P0=table7;break;case 82:P0=table8;break;case 74:P0=table9;break;case 68:P2=0xff;P0=0x00;break; void IR_IN(void)

11、 interrupt 0 /外部中断0,即红外接收P3.2 uchar j,k,count=0; EX0 = 0; /关闭外部中断0,即停止接收红外 IRdelay(5); if (hongwai=1) EX0 =1; return; /确认红外信号出现 while (!hongwai) /等红外变为高电平,跳过9ms的前导低电平信号。 IRdelay(1); for (j=0;j<4;j+) /收集四组数据 for (k=0;k<8;k+) /每组数据有8位 while (hongwai) /等 IR 变为低电平,跳过4.5ms的前导高电平信号。 IRdelay(1); whil

12、e (!hongwai) /等 IR 变为高电平 IRdelay(1); while (hongwai) /计算IR高电平时长 IRdelay(1); count+; if (count>=30) EX0=1;/高电平时间过长则开外部中断,并返回 return; /0.14ms计数过长自动离开。 /高电平计数完毕 recievej=recievej >> 1; /各数据位右移一位,因为先读出的是高位数据 if (count>=8) /如果是高电平则将高位变为1,反之则为0,不做修改recievej = recievej | 0x80; count=0; if (reci

13、eve2!=recieve3)/校验键值码与键值反码的值, EX0=1; /如果键值码与键值反码取反后相等,则开外部中断中断0,开始接收下一个红外信号 return; EX0 = 1; 3.红外控制蜂鸣器,硬件连接很简单,P3.2接红外接收头,蜂鸣器接在P1.5端#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit hongwai = P32;sbit beep=P15;uchar recieve3;/储存用户码、用户反码与键数据码、键

14、数据反码 uchar a=0,0,0,0;void delay(uchar x) /x*0.14MSuchar i; while(x-) for (i = 0; i<13; i+); void main() EA=1;/开放全局中断EX0=1;/开外部中断0IT0=1;/触发方式为脉冲负边沿触发hongwai=1;beep=1;while(1) if(recieve2=69)beep=beep;recieve2=98; void hongwaizhongduan(void) interrupt 0 /外部中断0,即红外接收P3.2 uchar j,k,count=0; EX0 = 0;

15、/关闭外部中断0,即停止接收红外 delay(5); if (hongwai=1) EX0 =1; return; /确认红外信号出现 while (!hongwai) /等红外变为高电平,跳过9ms的前导低电平信号。 delay(1); for (j=0;j<4;j+) /收集四组数据 for (k=0;k<8;k+) /每组数据有8位 while (hongwai) /等 红外 变为低电平,跳过4.5ms的前导高电平信号。 delay(1); while (!hongwai) /等 红外 变为高电平 delay(1); while (hongwai) /计算红外高电平时长 delay(1); count+; if (count>=30) EX0=1;/高电平时间过长则开外部中断,并返回 return; /0.14ms计数过长自动离开。 /高电平计数完毕 recievej=recievej &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论