单片机红外接受解码程序成功版

发布者:美丽的1号最新更新时间:2015-05-19 来源: 51hei关键字:单片机  红外接受  解码程序 手机看文章 扫描二维码
随时随地手机看文章
    1、效果图

    2、发射码格式
    3、38KH载波发射(完整的发射图)
    4、 0 与 1的区别
    5、 载 波
    6、小结
    7、代码 
    


   发射码格式


                            
  38KH载波发射(完整的发射) 


                                                

  0与1的区别




   载 波
                         




                                                小  结
1、发射端发射出来的是高电平。但是接收到的是低电平。(接收到的数据与发射的相反) 
2、我这里用的外部下降沿触发的中断                                                
3、使用12M的晶振完
4、整源码下载地址:http://www.51hei.com/f/hongc.rar
            


                            代码

#include
sbit IR=P3^2;  //红外接口标志
sbit dm = P2^2; //段码
sbit wm = P2^3; //位码
[page]
 
unsigned char hc[8]; //数码管显示缓存
unsigned char DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F
unsigned char WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码。显示的位置
unsigned char sj[33]; //接收脉冲时间数组
char w=0; //数码管显示缓存指针(0~7)
unsigned char i; //脉冲个数记录
unsigned char mcsj; //脉冲时间(大于0.56ms小于1.125ms为0,大于1.125ms小于2.25ms)
bit MC=0; //接收红外脉冲开始标志(0:脉冲已经结束,1:脉冲刚开始)
bit JS=0; //脉冲接收结束标志位(1标志接收结束)
bit JM=0; //解码完成标志位(1:解码完成)
void Delay(unsigned char f);
void dsq_0() interrupt 1 using 1 //定时器T0中断服务函数
{
mcsj++; //256
}
void wbzd_0() interrupt 0  //外部中断服务函数
{
 
if(MC)
{
if(mcsj>32) //判断是不是引导码。(如果是i=0)
i=0;
sj[i]=mcsj; //把脉冲时间存入sj这个数组里
mcsj=0; //清空脉冲时间准备接收下一个脉冲时间
i++;
if(i==33) //判断是否接收完脉冲时间
{
 
i=0;
JS = 1; //接收完成标志位置1
MC=0; //红外脉冲结束
}
 
}
else
{
MC=1; //红外脉冲开始
mcsj=0; //清空脉冲时间
}
 
}
void csh_dsq_0() //初始化定时器0
{
TMOD = 0x02;
TH0=0x00; //定时器0的重装数据
TL0=0x00; //初始化
ET0=1; //打开定时器0中断
TR0=1; //启用定时器0
 
}
 
void csh_wbzd_0() //初始化外部中断0
{
IT0=1; //外部中断0下降沿触发
EX0=1; //启用外部中断0
EA=1; //打开总中断
}
void hwjm(unsigned char *p) //红外解码函数
{
unsigned char i,j,k=1;
 
for(i=0;i<4;i++) //4组数据的计数
{
for(j=0;j<8;j++) //每组数据中的8位数据计算
{
p[i] >>= 1; //数据右移一位
if(sj[k]>7) //脉冲时间大于7的就是1
p[i] |= 0x80;
k++;
}
}
JS = 0; //分析完成清零JS
JM = 1; //解码完成JM置1
 
}
unsigned char xhc(unsigned char *p) //红外按键匹配函数
{
/*
hc[0]=DM[p[1]/16]; //客户码
hc[1]=DM[p[1]%16]; //客户码
hc[2]=0x40;
hc[3]=DM[p[2]/16]; //数据
hc[4]=DM[p[2]%16]; //数据
hc[5]=0x40;
hc[6]=DM[p[3]/16]; //数据反码
hc[7]=DM[p[3]%16]; //数据反码
以上注释的代码是显示
红外解码后的原始数据
*/
 
switch(p[2]) //匹配按键
{
case 0x16:hc[w]=DM[0];break; //按键0
case 0x0c:hc[w]=DM[1];break; //按键1
case 0x18:hc[w]=DM[2];break; //按键2
case 0x5e:hc[w]=DM[3];break; //按键3
case 0x08:hc[w]=DM[4];break; //按键4
case 0x1c:hc[w]=DM[5];break; //按键5
case 0x5a:hc[w]=DM[6];break; //按键6
case 0x42:hc[w]=DM[7];break; //按键7
case 0x52:hc[w]=DM[8];break; //按键8
case 0x4a:hc[w]=DM[9];break; //按键9
case 0x09: //熄灭所有数码管(清零)
{
hc[0]=0x00; //熄灭所有数码管
w=7; //准备清空数码管显示缓存(不是真的清空)
break;
}
default: return 0; //如果没有匹配的按键就结束函数
}
if(w<7) //数码管显示缓存写入指针不能大于7
{
w++; //显示缓存指针加一
hc[w]=0x00; //设置数码管扫描结束标志
}
else
w=0;//显示缓存指针清零
   JM=0;
 
}
void Delay(unsigned char f) //延时
{
while(f--);
}
void main()
{
unsigned char k=0; //数码管扫描的位置
unsigned char jmsj[4]; //红外接收解码后的所有数据
csh_dsq_0(); //初始化定时器0
csh_wbzd_0(); //初始化外部中断0
while(1)
{
if(JS) //脉冲接收结束后调用解码函数解码
{hwjm(jmsj);}
if(JM) //解码完成后调用按键匹配函数
{xhc(jmsj);} 
//下面的代码是数码管扫描
P1 = 0; //消影
dm = 1;
dm = 0;
 
P1 = WM[k]; //写入位码
wm = 1;
wm = 0;
 
P1 = hc[k]; //写入段码
dm = 1;
dm = 0;
if( k<7 && hc[k]!=0 ) //控制数码管显示的位数
k++;
else
k=0;
Delay(50);
}
}
 
 
关键字:单片机  红外接受  解码程序 引用地址:单片机红外接受解码程序成功版

上一篇:51单片机中断号与定时器的工作方式
下一篇:矩阵键盘反转扫描(中断触发)数码管新认识

推荐阅读最新更新时间:2024-03-16 14:02

一种基于C8051单片机的SPWM波形实现方案
1 引言   正弦脉宽调制(SPWM)技术已在交流调速、直流输电、变频电源等领域得到广泛应用,为了提高整个系统的控制效果,高性能SPWM脉冲形成技术一直是人们不断探索的问题。采用模拟电路和数字电路等硬件电路来产生SPWM波形是一种切实可行的方法,但是这种实现方法控制电路复杂、抗干扰能力差、实时调节较困难。近年来,人们提出了由单片机、DSP等微控制器来实现SPWM波形的数字控制方法 ,由于微控制器内部集成了很多控制电路,比如定时器、PWM电路、可编程计数器阵列等,所以使得这种实现SPWM的方法具有控制电路简单、运行速度快、控制精度高、抗干扰能力强等优点。本文介绍了一种利用C8051单片机实现输出频率可变SPWM波形的方法,并将由C8
[电源管理]
一种基于C8051<font color='red'>单片机</font>的SPWM波形实现方案
初步认识51单片机-2.3单片机控制DS18B20温度传感器模块
通过前面LCD1602的例子我相信对IO口的控制和延时基本有所了解,下面再来一个例子温度传感器,同样只需要IO口操作和延时。先来个DS18B20温度传感器的简介。既然是温度传感器,那么一定有个感知温度的感应器。这个感应器能把它周围的温度直接转成数字并存储在scratchpad存储器中。这个感知温度和转换成数字信号的过程我们可以不用理解。我们要做的事情就是读存储器的内容及其他一些配置。其原理图如下: 图1 DS18B20温度传感器概述 在DS18B20中有一个温度传感器(如上图所示),它能感知周围环境温度,并能将温度的结果直接转成数字信号存储起来。温度信号转成数字信号的过程我们可以不用关心。那么数字信号存在哪里了?DS18B
[单片机]
初步认识51<font color='red'>单片机</font>-2.3<font color='red'>单片机</font>控制DS18B20温度传感器模块
单片机程序跑飞现象及解决--看门狗电路
1、程序跑飞现象 随着单片机在能源领域中的广泛应用,单片机的抗干扰问题越来越突出,煤矿井下环境一般比较恶劣,这便会为单片机控制系统带来各种干扰,以致系统不能正常工作。单片机应用系统的抗干扰性能主要取决于硬件的抗干扰设计,但软件抗干扰设计作为硬件抗干扰的完善和补充,作用也非常重要,因为大量的干扰通常并不能影响系统内硬件的运作,却常会使系统的软件无法正常运行,单片机应用的一个突出问题,便是单片机运行过程中经常出现的程序跑飞现象。 在单片机系统中,因为干扰的原因,在非预期的情况下,使得程序计数器PC 的值发生随机的变化,从而使得程序的流向指向不确定区域,这便是程序的跑飞。程序跑飞后或者会使指令的地址码和操作码发生改变,PC 把操作数当作
[单片机]
<font color='red'>单片机</font><font color='red'>程序</font>跑飞现象及解决--看门狗电路
8-基于51单片机的羽毛球计分器
具体实现功能 系统由STC89C52单片机+超声波测距传感器(HC-SR04)+DS18B20温度传感器+LCD1602液晶显示屏+按键+蜂鸣器+电源构成 具体功能:1、LCD1602液晶显示测量的距离和温度; 2、测量范围0.02m~4m,精度为0.01m; 3、可以设置距离报警上下限值;按键功能:加键,减键,设置键 4、超过设定的报警上下限值则开始声光报警。 设计分析 根据功能要求及设计成本,控制系统选用AT89C51芯片。采用按钮开关实现功能控制,按照设计的功能模块共选用8个按钮开关,分别实现启动、A队加分、A队减分、B队加分、B队减分、暂停、停止、清零功能。时钟电路由晶体振荡器、晶振控制芯片和电容组成,
[单片机]
8-基于51<font color='red'>单片机</font>的羽毛球计分器
基于小型MCU的LED照明的色彩控制
  在大趋势下, LED 用于通用 照明 指日可待。LED在通用照明中优势很多,如寿命更长以及效率更高。然而, LED技术还面临着一些挑战。其中一个挑战就是如何产生高品质的白光。白光LED的构成包含了蓝光LED和能将光输出移至光谱的其他波段的一种荧光粉。许多白光LED都无法产生高显色指数(Color Rendering Index,CRI),该参数用于衡量光源真实重现色彩的能力。   通过混合两种或两种以上颜色的LED光,可以获得品质更高的白光系统。在这些多色系统中,每种色源的光输出会随时间和温度而漂移。光传感器和小型单片机(MCU)可用于维持特定颜色和相关色温(CorrELated Color Temperature,CCT)
[电源管理]
基于小型<font color='red'>MCU</font>的LED照明的色彩控制
安全MCU为连网汽车实现先进网路安全功能
在公路上行驶的连网汽车数量预计于2020年达到1.5~2.5亿辆,连网汽车的资料安全将由晶片提供保护,意法半导体(ST)针对此一市场趋势与需求,推出新款安全微控制器。 在公路上行驶的连网汽车数量预计于2020年达到1.5~2.5亿辆,连网汽车的资料安全将由晶片提供保护,意法半导体(STMicroelectronics,ST)针对此一市场趋势与需求,推出新款安全微控制器。 连接网际网路将给汽车及其车主带来很多服务,例如软体更新、服务套装软体、适地性服务、社群媒体、串流媒体娱乐内容和紧急救援,而联网汽车必须能够防御网际网路攻击,防止窃盗个人资料或破坏汽车重要系统。 ST的新款安全微控制器ST32G512A和
[汽车电子]
基于单片机的等效采样示波器设计
摘要:介绍了基于单片机系统的精密时钟发生电路对高频信号(1MHz~80MHz)进行等效采样的方法,设计并实现一个模拟带宽为1Hz~80MHz的简易数字示波器。 关键词:单片机 等效采样 数字示波器 在数字示波器技术中,常用的采样方法有两种:实时采样和等效采样。实时采样通常是等时间间隔的,它的最高采样频率是奈奎斯特极限频率。等效采样(Equivalent Sampling)是指对多个信号周期连续样来复现一个信号波形,采样系统能以扩展的方式复现频率大大超过奈奎斯特极限频率的信号波形。 1 总体设计 由于所设计的示波器输入频率范围较宽, 本系统采用了等效和实时两种采样方式。若输入频率小于1.25MHz,选用实时采样;反之,选用等效采样。
[测试测量]
基于C8051F350单片机的气体流量计检测仪硬件设计
气体流量计是较为常用的仪表设备。钟罩式气体流量标准装置是以空气作为介质,对气体流量计进行检定、校准和检测的计量标准装置。主要适用于速度式、容积式和差压式等气体流量计的检定、校准和型式评价工作,也可用于气体流量测量的研究工作。本文基于C8051F350单片机,改造现有的钟罩装置,设计一种气体流量计检测仪。 气体流量计检定技术概述 目前,气体流量计的检定方法广义上可分为直接测量和间接测量两种。 直接测量法的是用实际流体进行计量检定,其具体定义为用标准装置(标准流量计或计量器具)与被测流量计串联,通过比较两者测得流体的累积流量值,得出被测流量计测量误差的方法。实流检测法具有检定环境与工况环境一致、流量值准确可靠和真实反映被测流量计计
[单片机]
基于C8051F350<font color='red'>单片机</font>的气体流量计检测仪硬件设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved