C语言写的红外遥控解码程序

发布者:平安幸福最新更新时间:2012-11-06 来源: 21ic 关键字:C语言  红外遥控  解码程序 手机看文章 扫描二维码
随时随地手机看文章

#include "STC89C51RC.H"

sbit DQ = P4^3;
sbit SPK = P1^0;


#include

#define seg1 XBYTE[0xffec]
#define seg2 XBYTE[0xffed]
#define seg3 XBYTE[0xffee]
#define seg4 XBYTE[0xffef]
unsigned char IRMcode[4];

unsigned char code ledmap[]= //共阴LED数码管译码表

 0x3f,0x06,0x5b,0x4f,0x66, //0,1,2,3,4,
 0x6d,0x7d,0x07,0x7f,0x6f, //5,6,7,8,9,  
 0x77,0x7C,0x39,0x5E,0x79, //A,b,C,d,E,
 0x71,      //F,
};

void delay(unsigned int);

void main()
{
 EA = 1;
 EX2 = 1;    
 while(1)
 {
 
  if (IRMcode[2]==~IRMcode[3]){  
   seg1 = ~ledmap[IRMcode[2]/100];
   seg2 = ~ledmap[IRMcode[2]/10%10];
   seg3 = ~ledmap[IRMcode[2]%10];
   seg4 = 0xff;//熄灭
  } 
 }
}

void Sound(void)
{
 SPK = 0;
 delay(10000);
 SPK = 1;
}

void IRMint(void) interrupt 6  using 2
{
 unsigned char count;
 unsigned int count1;
 unsigned char i,j; 
 EA = 0; 
 count = 9;
 while(--count)
 {
  delay(100);//440us
  if(DQ){EA = 1;return;}
 }
 while(DQ==0);//通过引导码余下的低电平
 //以上完成引导码4.5ms的低电平检测
 
 count = 9;
 count1 = 0;
 while(--count)
 {
  delay(100);//440us
  if(DQ==0){EA = 1;return;}
 }
 while(DQ==1)//通过引导码余下的高电平
 {
  if(count1++>1000) {
   P1=0x55;EA = 1;return;}
 }
 //以上完成引导码4.5ms的高电平检测
 
 count1 = 0;
 for(j=0;j<4;j++)//有效字节数设定
 {
  for(i=0;i<8;i++)//字节bit数
  {
   while(DQ==0);//通过编码低电平
   delay(200);//延时判断编码高电平维持长度
   IRMcode[j]<<=1;
   if(DQ)IRMcode[j]|=0x01;
   while(DQ==1){//通过编码余下的高电平
    if(count1++>2000){EA = 1;return;} 
   }
  }
 }
  
 Sound();  
 EA = 1;
}  

//通用延时函数
//22.1184,10 = 48.4 us (5us+43.4)
//22.1184,100 = 439 us (43.4*10+5)
//22.1184,1000 = 4345 us(43.4*100+5)
//22.1184,10000 = 43450 us(43.45*1000+5)
void delay(unsigned int t)
{     
 while(--t); 
}

关键字:C语言  红外遥控  解码程序 引用地址:C语言写的红外遥控解码程序

上一篇:单片机在应力磁测装置中的应用
下一篇:红外遥控解码器设计

推荐阅读最新更新时间:2024-03-16 13:12

矩阵键盘C语言程序+电路图
下面是51单片机驱动矩阵键盘的电路图 采用一位数码管显示 按键的结果 下面是c语言源程序: #include reg52.h #define uint unsigned int #define uchar unsigned char uint led ={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar a,b,c,temp; void delay7ms(void) //误差 -0.217013888891us { unsigned char a,b; for(b=208;b 0;b--
[单片机]
矩阵键盘<font color='red'>C语言</font><font color='red'>程序</font>+电路图
PLD器件在红外遥控解码中的应用
  摘 要: 介绍了红外遥控发射和接收的原理,提出了一种用PLD(可编程逻辑器件)进行解码的方案,并分别用EPROM和GAL实现。该方案思路新颖、原理简单、工作可靠,可用于各种以键盘扫描为输入方式的智能仪器系统中。 关键词: 红外遥控 可编程逻辑器件 遥控解码 键盘扫描 红外遥控技术已经在日常家用电器中得到了广泛应用,其使用方便、功耗低、抗干扰能力强的优点也越来越在智能仪器系统中受到重视。市场上的各种家电红外遥控系统技术成熟、成本低廉,但都是针对各自的遥控对象(彩电、冰箱、空调等),不能直接用于智能仪器。本文探讨了如何借鉴家电红外遥控系统的原理,自行设计解码电路,使智能仪器具有遥控功能。 1 红外遥控原
[应用]
C语言嵌入式系统编程修炼之三:内存操作!
数据指针   在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力。在嵌入式系统的实际调试中,多借助C语言指针所具有的对绝对地址单元内容的读写能力。以指针直接操作内存多发生在如下几种情况:   (1) 某I/O芯片被定位在CPU的存储空间而非I/O空间,而且寄存器对应于某特定地址;   (2) 两个CPU之间以双端口RAM通信,CPU需要在双端口RAM的特定单元(称为mail box)书写内容以在对方CPU产生中断;   (3) 读取在ROM或FLASH的特定单元所烧录的汉字和英文字模。   譬如: unsigned c
[单片机]
<font color='red'>C语言</font>嵌入式系统编程修炼之三:内存操作!
STC51入门笔记(郭天祥C语言)---第五节:A/D和D/A工作原理
一、模拟量与数字量概述: 如温度、压力、位移、图像等都是模拟量,电子线路中模拟量通常包括模拟电压和模拟电流,生活用电220V交流正弦波就属于模拟电压,随着负载大小的变化,其电流大小也跟着变化,这里的电流信号也属于模拟电流,图5.1.1和图5.1.2所表示的信号就属于模拟量。 像图5.1.1和图5.1.2所示信号的幅值随着时间变化而连续变化的量就是模拟量,模拟量有可能是标准的正弦波,有可能是不规则的任何波形,也有可能是规则的方波、三角波等,当我们用数值表示其大小时,通常用十进制数表示,如2.3V,5A,47N等。 单片机系统内部运算时用的全部是数字量,即0和1,因此对单片机系统而言,我们无法直接操作模拟量,必须
[单片机]
STC51入门笔记(郭天祥<font color='red'>C语言</font>)---第五节:A/D和D/A工作原理
多任务 多进程 51单片机C语言 完整版
*/ /* 1.本程序不使用任何汇编指令 2.由定时器T0产生中断,切换进程 3.由于中断或调用子程序,要把PC堆栈,故可以以SP为基址的地方找到PC 4.中断或子程序返回,要把SP出栈给PC,故可以操作SP改变程序入口 5.本程序经调试运行 电路图已上传 6.程序编译是会有一个警告提示,为正常现象,因为保存R0-R7时,重新定义地址, 出现地址覆盖的警告提示。 7.用户以此模板写程序只需写用户的进程子程序和用户初始化子程序,并把各进程参数 放在规定地方,各程序放在规定地方就可以;所有的任务调度已处理好。 */ //头文件 #include reg52.h //#include absacc.h //#incl
[单片机]
c51中断优先级c语言,51单片机的中断优先级及中断嵌套
说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。 中断的优先级有两个:查询优先级和执行优先级。 什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级: 外部中断0 定时/计数器0 外部中断1 定时/计数器1 串行中断 或 int0,timer0,int1,timer1,serial port 或 INT0、T
[单片机]
MSP430(f149)学习笔记——红外遥控发射
最近由于项目需求,研究了一下MSP430,总体感觉MSP430还是非常不错的单片机,不亏是TI的产品。项目中用MSP430实现了红外遥控功能,下面我们先来分析一下红外的发送原理。 红外发送原理 红外发送实际上是按照一定的时间间隔,断断续续的发送红外射线来进行数据传输,为了提高数据传输的准确定和降低功耗,红外一般是采用38K的红外调制信号,其中,38K允许上下浮动1K以内的误差。红外发送的开头需要一个引导位,引导位是发送9ms,然后停止4.5ms,如果发送完一个数据之后还需要再发数据的话还需要连发码,连发码是先发送9ms,然后停止4.5ms。引导码和连发码的波形如下: 引导码和连发码之后是32位数据位,这32位数据位实际上是
[单片机]
MSP430(f149)学习笔记——<font color='red'>红外遥控</font>发射
C语言编程操作SPMC75内部Flash的方法
1 引言   支持C语言几乎是所有微控制器程序设计的一项基本要求,当然SPMC75系列单片机也不例外。μ'nSPTM 指令结构的设计就着重考虑对C语言的支持,GCC就是一种针对μ'nSPTM 操作平台的ANSI-C编译器。但是在应用中对于程序的设计,特别是C和ASM混合使用的时候有些地方是需要注意的,在C中如何嵌入ASM也是一个不可回避的问题。 2 SPMC75单片机FLASH硬件资源分析   SPMC75系列微控制器Flash分为两区:信息区和通用区,在同一时间只能访问其中的一区。信息区包含64个字,寻址空间为0x8000 ~ 0x803F。地址0x8000为系统选项寄存器P_System_Option。其他地址空间可由用户自
[单片机]
用<font color='red'>C语言</font>编程操作SPMC75内部Flash的方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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