单片机定时器-遥控器解码程序分析

发布者:变形金刚最新更新时间:2012-08-31 来源: 51hei关键字:单片机  定时器  遥控器解码 手机看文章 扫描二维码
随时随地手机看文章

一、前言

利用STC公司1T内核的STC12C08S2 单片机对一款遥控器进行解码,将解码的数据转换为以us为单位的时间通过单片机串口通讯发送到STC下载软件自带的串口调试工具接收框进行显示。

本文主要对测试结果进行展示与分析并对单片机控制程序进行分析,以此起到抛砖引玉的作用,希望读者理解程序以后可以利用单片机对身边的任意一款遥控器进行解码并将遥控器与单片机的实际应用联系在一起。

二、测试结果展示

1、实验材料介绍

点击浏览下一页 
点击浏览下一页


实验材料硬件部分 软件部分 为KEIL V2 编程软件 和 单片机程序下载软件STC_ISP_V479

为了高效率学习程序编写,本实验平台采用单片机教程网的51hei-5单片机开发板。控制芯片为 STC12C08S2,红外通讯传感器为sm0038与单片机的P3.2引脚连接。大家用一根杜邦线将j7的3脚 连到顶部的p3.2口的排针处即可。程序下载器采用usb转串口线。遥控器采用如上图(对于NEC标准的遥控器都适用,比如电视遥控器等)。

2、遥控器按下数字1,PC所接收的数据码

点击浏览下一页 

显示的数据:数字1: 02456 00206 00205 00202 00204 00207 00202 00206 00206 00407 00408 00412 00407 00408 00412 00407 00408 00206 00206 00407 00408 00206 00205 00203 00204 00409 00411 00202 00204 00410 00410 00407 00410

3、遥控器按下数字2,PC所接收的数据码

点击浏览下一页 

数字2:2456 00206 00200 00206 00206 00202 00205 00206 00202 00412 00407 00410 00410 00407 00408 00412 00407 00206 00205 00202 00410 00410 00203 00204 00205 00408 00409 00410 00205 00202 00408 00412 00407

4、遥控器按下数字3,PC所接收的数据码

点击浏览下一页 

数字3:02457 00206 00198 00208 00206 00198 00209 00206 00200 00413 00407 00406 00414 00407 00405 00415 00408 00206 00410 00405 00417 00407 00206 00407 00206 00408 00206 00200 00208 00208 00407 00206 00408

三、测试数据分析

下载程序在硬件电路正常的情况下,遥控器按下数字1,PC机可以接收到以下数据数字1: 02456 00206 00205 00202 00204 00207 00202 00206 00206 00407 00408 00412 00407 00408 00412 00407 00408 00206 00206 00407 00408 00206 00205 00203 00204 00409 00411 00202 00204 00410 00410 00407 00410

那这些数据代表什么意思呢?

单片机向PC机每发送一次都是5位数据,这5位数据是单片机内部定时器以5us循环一次对temp变量从0开始自加所得到的数据。也就是说这些数据可以理解为一个时间值,这个时间值就是遥控器每个数据码高电平和低电平所持续时间的值。[page]

从数据可以看出每个按键按下去PC机都接收到33个数据,这33个数据仔细观察可以发现都有以下规律:

第一个数据 在2456和2460之间。

第二个数据到第九个数据 在200和210之间。

第十个数据到第十八个数据 在400和410之间。

第十九个数据到第三十二个数据在200和210之间和在400和410之间都有。

继续分析:如果将在2456和2460之间的数据定义为字符‘h’,将在200和210之间的数据定义为字符‘0’,将在400和410之间的数据定义为字符‘1’。那么以上33个数据可以表达为:h 1111 1111 0000 0000 0011 0000 1100 1111 那么这个数据就是按键1按下的用0和1来表示的编码。

相同道理可以推测出数字2和数字3用0和1来表示的编码如下:

数字 2 : h  0000 0000 1111 1111 0001 1000 1110 0111

数字 3 : h  0000 0000 1111 1111 0111 1010 1000 0101

好了,到了这里我们可以下结论了,因为已经有了3个对比。

我们的结论是:如上图的遥控器编码原理为每个按键都有33个编码其中第一个编码都相同时间比较长,接着16编码分别可以用我们所定义的0和1表示即前八个为0后八个为1。其实这个我们可以理解为遥控器的地址编码,就好比电话号码的区号一样的,浙江衢州的区号是0570而武汉的区号是027,在本区域里的所有的座机号码都是以这个开头固定不变的。

接着再仔细观察可以发现原来后面16个数据码也是有规律的,那就是前8个和后8个是相互取反的的编码。

好了,更多的思维留个大家,下面我们要分享程序了,希望大家下载程序以后可以得出我以上的结论,如果复制到keil上有乱码,大家可从这里下载源程序:http://www.51hei.com/f/hwykjm1.rar 哈哈,这也是学习单片机的趣味所在哦。因为我将分享的程序涵盖了单片机外部中断、内部定时器、串口通讯的三个结构的应用。

四、程序分享

/*

测试方案_07 

程序设计:胡琴

电话:15886684881

设计时间:2010-12-1                              

测试方法:用定时器计算33位红外信号持续时间

测试原理:在测试方案_01的结论上,记录一组红外信号33位中各编码持续时间

测试结果:前导码:约 2457,持续时间为 2457 * 0.005 = 12.285ms (NEC标准为13.5)

         编码 0:约 206, 持续时间为  206 * 0.005 = 1.03ms   (NEC标准为1.125)

         编码 1:约 408, 持续时间为  408 * 0.005 = 2.04ms   (NEC标准为2.25)

*/

  #include
sbit IR = P3^2;                     // 红外信号感应引脚
unsigned int time;
unsigned int dat[33] ={ 0 };
bit flag = 0;
void Send( void )  //将32位数据对应的时间发送到PC上显示
{
       char i;
       for(i = 0;i < 33;i ++)
       { 
              TI = 0;
              SBUF = dat[i] / 10000 + 48;
              while( !TI );
              TI = 0;
              SBUF = dat[i] / 1000 % 10 + 48;
              while( !TI );
              TI = 0;
              SBUF = dat[i] / 100 % 10 + 48;
              while( !TI );
              TI = 0;
              SBUF = dat[i] / 10 % 10 + 48;
              while( !TI );
              TI = 0;
              SBUF = dat[i] % 10 + 48;
              while( !TI );  
              TI = 0;
              SBUF = \' \';
              while( !TI );
       }
}
void Init( void )             //定时器、外部中断初始化
{
       TMOD = 0x22;             // 定时器0、1方式2
       SCON = 0x40;              // 串行口方式1,不允许接收   
       TH1 = TL1 = 0xfd;       // 串行口方式2,Fosc=11.05926,BPS=9600
       TH0 = TL0 = 0xfb;       // 中断频率 0.005ms
       TR1 = 1;               // 开启与串行口相关的定时器1
       IT0 = 1;                // 边沿式触发
       ET0 = 1;               // 开启定时器0中断
       EX0 = 1;               // 外部中断0中断允许
       IP  = 0x02;                  // 定时器0优先级高
       EA  = 1;
}
void main( void )     //主程序
{
       Init( );                   //中断 定时器 初始化
       while( 1 );                    //等待遥控信号
}
void Xint0( void ) interrupt 0 //外部中断0复位子程序
{
       char i;
       for(i = 0;i < 33;i ++)
       {    
              time = 0;
              TR0 = 1;
              while( !IR );          // 前导信号检测
              while( IR );  
              TR0 = 0;
              dat[i] = time;
       }
       Send( );
       flag = 1;
       EX0 = 0;
}
void Timer0( void ) interrupt 1 //5us中断一次 变量加1
{
       time ++;
}


五、最后的话

  真正入门单片机的学习者应该是已经掌握了单片机内部定时器、外部中断、串口通讯的工作原理及编程方法,所以对于这个程序我想很多人都可以马上体会并变为自己的程序。

  希望在这个程序的引导下结合自己的C语言编程能力,可以拿起自己身边的遥控器为单片机边学边用所应用。修改程序实现每个按键按下单片机对应控制一个LED亮并且蜂鸣器报警器一次。

  如今中国和日本的矛盾不断,很多技术人都在抱怨,但是我想其实我们也是可以为国家出点力的。因为我们所使用的大部分遥控器的编码与标准都是日本人技术所制定。

  同学们,中国的智能电子爱好者,我们也可以制定出这个标准哦。希望更多的同仁能设计出自己的家用红外遥控器。

 

关键字:单片机  定时器  遥控器解码 引用地址:单片机定时器-遥控器解码程序分析

上一篇:c语言数据运算超范围要注意
下一篇:在远程通信中实现89LPC932的ISP功能

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

基于 SPCE061A单片机采集语音信号的设计与实现
随着单片机集成化程度的不断提高,现代单片机已经具备了数字信号处理功能,使语音信号处理用单片机实现成为可能。台湾凌阳科技公司(SunPlus)推出的一款SPCE061A就是这样的产品。SPCE061A是以μ nSP TM16位微控制器及信号处理器芯片为内核的16位单片机,采用模块式集成结构,片内集成了2KB RAM、32KB Flash、ADC、DAC、并行I/O等,特别适合语音信号处理。本文介绍如何实现用SPCE061A单片机采集语音信号,并传送到PC机中的方法。 1 硬件系统结构 1.1 SPCE061A结构 SPCE061A的内部结构如图1,其特点如下: *16位μ nSP TM微控制器; *工作电
[单片机]
基于51单片机的带时间显示和紧急控制的交通灯的设计
;特别说明,本程序仅供单片机爱好者自己学习使用, ;不得做为其它商业用途 ;此程序在硬件上调试通 ;晶振频率为11.0592MHZ ;用定时器1延时,外部中断0接紧急控制 ;R0为100MS延时常数,R2为状态延时常数 ;8279控制数码管显示时间 ;用P1口控制双色灯 ;此程序写于2007-7-6,作者:徐学军 Z8279 EQU 0FF82H ;8279 状态/命令口地址 D8279 EQU 0FF80H ;8279 数据口地址 LEDMOD EQU 00H ;左边输入
[单片机]
怎么样学好单片机
很多想学单片机的人问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机,如何开始上手,如何开始熟练这个过程给大家讲讲。 先说说单片机,一般我们现在用的比较多的的MCS-51的单片机,它的资料比较多,用的人也很多,市场也很大。就我个人的体会怎么样才能更快的学会单片机这门课。单片机这门课是一项非常重视动手实践的科目,不能总是看书,但是学习它首先必须得看书,因为从书中你需要大概了解一下,单片机的各个功能寄存器,而说明白点,我们使用单片机就是用软件去控制单片机的各个功能寄存器,再说明白点,就是控制单片机那些管脚的电平什么时候输出高,什么时候输出低。由这些高低电平的变化来控制你的系统板,实现我们需要的各个功能。至
[单片机]
解决EMC单片机多次烧录的办法
一般来说,EMC的OTP类型芯片是只能进行一次烧录的。但是如果在第一次烧录时,某一位为被烧为“1”,则该位可以再次被烧录成“0”;反之,如果已经被烧录成“0”了,则无法再次烧录成“1”。由此,有人发现了以下文章中介绍的这种多次烧录OTP芯片的方法。 在EMC单片机中,“ADD A,@0xFF”的机器码为全1。在下面这篇文章中,介绍的是用“ADD A,@0xFF”指令来预填,方便下次的改写。其实,还有更方便的办法: 文中提到的办法如下 ORG 0X000 ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF MAIN
[单片机]
基于68HC908MR16单片机的光伏正弦波逆变电源
1  引言   随着能源危机的日益加剧和人类环保意识的提高,新能源的开发利用越来越受到人们的重视。而太阳能作为取之不尽用之不竭的高效无污染的能源近来更受人们的青睐。本文介绍的光伏正弦逆变电源系统正是一种适于户用的、特别适于无电少电的西部边远地区用户的一种电源系统,随着我国西部大开发的进行其市场前景必将越来越广阔。    2  逆变系统结构及原理   2.1  系统基本结构   系统基本结构框图如图1所示。由图可知,首先太阳电池阵列经充电电路向蓄电池充电,从而得到一个基本稳定的直流电压,再经逆变电路将直流电逆变成高频交流电,最后经工频变压器升压和滤波电路滤波变成50Hz、220V正弦交流电压。整个
[电源管理]
基于68HC908MR16<font color='red'>单片机</font>的光伏正弦波逆变电源
Atmel推出汽车电机控制应用的微控制器
爱特梅尔公司 (Atmel ® Corporation) 现已推出面向汽车电机控制应用的 AVR® 8 位微控制器系列产品。其中首批面市的产品是 ATmega 16M 1 和 ATmega 32M 1 ,用于控制带传感器 , 及无传感器的无刷直流 (brushless DC, BLDC) 电机。 随着汽车中的电机数量越来越多,汽车制造商需要尺寸更小、重量更轻,并且扭矩大于有刷电机的电机产品。他们正逐步转用需要更复杂电子器件来精确控制速度和扭矩的无刷直流电机,这为汽车制造带来了一些新的挑战,其中包括高温问题 ── 某些引擎盖下的应用温度高达 150 ℃ 。 ATmeg
[单片机]
基于AT89C55单片机和PCA82C250实现分布式通信网络的设计
1 概述 用于多机间数据通信的通信物理层接口是分布式测控系统数据共享的工作基础,传统的以单片机为核心的分布式多机测控系统为简化通信物理层大多采用电流环或RS-485/RS-422总线。 电流环形式因较RS-485/RS-422总线形式连线复杂等原因已基本退出历史舞台。而RS-485总线接线形式较RS-422总线接线形式少了二极通信线且抗干扰能力增强,从而使接线形式更为简单、造价更低,因此,RS-485总线基本上独霸了以单片机为核心的分布式多机测控系统通信物理层的应用。但随着科技的发展,RS-485总线的总线效率低、系统实时性差、通讯可靠性低、后期维护成本高、网络工程调试复杂、传输距离不理想、单总线可挂接节点少、应用不灵活等缺点
[单片机]
基于AT89C55<font color='red'>单片机</font>和PCA82C250实现分布式通信网络的设计
解析8051单片机的三种数据传输方式
单片机CPU与外部设备交换信息通常有如下几种方式:无条件传送方式,查询传送方式和中断传送方式。我们以单片机与微型打印机接口为例讲述这三种方式。假定用户要打印三个数据,这三个数据保存在单片机的内部数据存储器10H,11H,和12H中,8051用并口P2与微型打印机的并行数据口DB进行数据交换。 (1)无条件传送方式 这种数据传送方式中没有联络信号,即CPU总是认为打印机在如何时候都是处于“准备好”的状态。这种传送方式中只需要在程序中加入数据送往P2的指令,数据传送便可以实现。但这种数据传送方式有一个致命弱点,数据易丢失,这是因为CPU的速度相当快,而打印机的速度相对来说较慢,其结果是在打印机打印一个数据的时间内,CPU已送来了多
[单片机]
解析8051<font color='red'>单片机</font>的三种数据传输方式
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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