- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
红外专题讲解
昵 称: 一个人行走
制作日期:2011-7-12
制作目的:
由于我刚开始学红外的时候,什么都不懂,在网上到处找资料,可是在这些找到的资料中,很多都是没有用的,找到的程序,大多都是拷贝的某某公司提供的示例源程序,大多都是千篇一律,看过很多的百度提问,可是基本上都没有从根本上解决问题,也上过豆丁之类的,看看东西还要积分,我郁闷了,当时我就立志等我学会红外红一定做个红外的专题,免费的分享给大家,以方便苦苦探索的莘莘学子。
苦恼了好一阵后,幸好认识一位嵌入的大哥,给我了帮助,给我资料,功夫不负有心人,今天我终于学了红外的一些知识,为了谢谢帮助过我的大哥,我只能将他交给我的分享给大家,以此回报他,因此在这里将我所学到的免费的分享给大家,供大家交流学习。
至于程序,它是灵活多变,大家不要习惯性的CTRl+A,CTRL+C,要读懂它的意思,根据程序的思想,然后自己发挥,从而真正掌握它的原理。
大家如有疑问的可以和我交流,我的QQ:925171906,在此祝福所有在学习道路上孜孜不倦的可敬可佩的学子们,学业大成!对于经济窘迫的我来说,习惯了拿不收费的资料,并对变相收费有一种深恶痛绝的感觉;让更多的人来(更容易)了解红外,贡献自己的一点力
量。也希望大家有好资料的多分享一下,不要那么小气,还要什么积分什么的。
1硬件连接:P0口为数码管的段选段,P2口的高四位为数码管的位选端,红外接连在P3.2端,即连接在外部中断0处
2.主要功能:用数码管显示接收到的红外按键的键码
3.程序如下:
//硬件连接
#include reg51.h
#include intrins.h
#define uchar unsigned char
#define uint unsigned int
sbit hongwai = P3^2;//此表为 数码管的字模, 共阴数码管 0-9 -
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
uchar recieve[3];//储存用户码、用户反码与键数据码、键数据反码
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; i13; i++);
}
}
void display(uchar keyno)
{
uchar i,j;
a[0]=keyno%10000/1000;
a[1]=keyno%1000/100;
a[2]=keyno%100/10; //十位
a[3]=keyno%10; //个位
j=0xfe; //对数码管进行逐位扫描显示
for(i=0; i=3; i++)
{
j=_cror_(j,1);
P2=j;
P0 = table[a[i]];
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的前导低电平信号。
{
IRdelay(1);
}
for (j=0;j4;j++) //收集四组数据
{
for (k=0;k8;k++) //每组数据有8位
{
while (hongwai) //等 IR 变为低电平,跳过4.5ms的前导高电平 信号。
{
IRdela
文档评论(0)