基于PIC8位单片机实现红外遥控器的设计

发布者:甜美瞬间最新更新时间:2020-08-02 来源: elecfans关键字:PIC  8位单片机  红外遥控器 手机看文章 扫描二维码
随时随地手机看文章

1 设计理念和原理

1.1 设计理念

随着数字家庭等领域技术的迅速发展,在多媒体终端上的增值业务将越来越多,浏览网页、搜索、短信等都需要遥控器进行输入。但作为连接用户和终端之间的重要外设,遥控器的设计理念还停留在模拟电视时代,体验感较差。目前用户输入的解决方式是呼出终端的内置输入法,这样就带来了两个问题:一,不同厂家的终端都需要内置自己的中英文输入法,占用资源,而且必须搭配自己的遥控器使用,通用性不高;二,用户在输人时必须一边看遥控器输入一边看屏幕确认输入,如果文字较多会造成频频抬头和低头的麻烦,难以忍受。基于以上缺点,本文提出将输入法内置于遥控器的理念,在遥控器上输入文字后再统一将文字编码用红外线发给终端,终端接收后将编码译成文字显示在输入区中。


1.2 红外遥控器工作原理

遥控码是一串二进制数字信号,通过脉冲编码形成脉冲序列,被调制到一个固定频率载波上,最后通过红外发射管,以光脉冲的形式发射出去。脉冲编码就是将“1”和“0”用一个脉冲来标识。本设计使用NEC红外协议,用脉宽560us,周期4x560us代表二进制“1”;用脉宽560us,周期2x560us代表二进制“0”(如图1所示,密集竖线表示38KHz载波)。

基于PIC8位单片机实现红外遥控器的设计

图1 NEC协议红外遥控信号的调制


2 硬件设计

2.1 总体设计原则

遵循嵌入式系统高性能、低功耗、小体积的设计思想,总体设计原则是:元器件采用低功耗芯片;尽量用软件实现硬件功能,减少器件数量;键盘采用中断方式,一旦系统空闲超时立即使其进入休眠状态,再次按键予以唤醒。


2.2 硬件组成

硬件组成如图2所示。其中:主芯片为Microchip公司PIC18F系列高档单片机66J11,性价比极高;液晶屏控制器为Sitronix公司的ST7565R,分辨率128x64;汉字点阵字库用Atmel公司的262KB Flash制作,它和LCD与单片机的接口均为SPI接口;键盘有49个按键.采用7x7矩阵方式,7根行线连到单片机B口的RBI~RB7外部中断脚,列线连到单片机的E口的RE1-RE7,作为数字输出口。

基于PIC8位单片机实现红外遥控器的设计

图2 基于PIC单片机的红外遥控器硬件组成


3 软件设计

3.1 系统运行流程

遥控器无开关机过程,因此放入电池时系统硬件即初始化,进入休眠。按键中断时,进入主程序,系统运行流程如图3所示,分为两种模式:普通遥控和文本输入。单片机内部的看门狗负责对空闲状态(没有键被按下)计时,超时后系统复位重新进入休眠状态。

基于PIC8位单片机实现红外遥控器的设计

图3 系统运行流程图


3.2 功耗管理设计

PIC18F系列器件提供了三种主要的工作模式:运行模式、空闲模式和休眠模式,实际中只使用运行模式和休眠模式。根据遥控器的运行流程,看门狗(WDT:Watchdog Timer)负责实现空闲时间的计时。4ms的WDT超时溢出周期与16位的后分频比值相乘。可以通过在MPLABIDE中配置寄存器2H中的WDTPS位控制一个多路开关以对WDT后分频器的输出进行选择,可获得的超时溢出周期范围为4ms至135秒(2.25分钟)。在代码中需要在每次按键后喂狗,保证看门狗重新计时。


3.3 驱动程序设计

3.3.1 键盘驱动

PIC单片机的B口是外部中断口,有四个INT中断和四个KBI中断。本设计将RB0留做扩展备用,RBl/INTl、RB2/INT2和RB3/INT3都设置为下降沿触发中断;KBl4个口(RB4-RB7)为电平变化中断(双沿),在程序里只对下降沿中断有处理。


按键扫描采取行列扫描方式获取键值。配置行线均弱上拉,列线均输出为0;当有键(行列交叉点)按下时,此键所在行线即出现下降沿;进入中断处理后,依次令每根列线输出为0,其余为1,扫描行线看哪根行线输入为0,从而得到按键的位置。


3.3.2 SPI驱动

PIC单片机有两个主控同步串行端口模块,它们都可以用软件配置为SPI方式,使用非常方便.数据读写只需读写其缓存即可,不需要像51单片机那样模拟时序。本设计使用了两个SPI接口器件:LCD和FLASH字库,他们是从设备,单片机是主设备。在配置好与SPI时钟频率等有关的寄存器后,主从设备就可以通信了。当主设备从从设备读数据时,SSPxlF(x=1,2)标志寄存器为0说明正在接收数据,为1时说明已收到一个字节;当主设备往从设备写数据时,SSPxlF为1说明已发完—个字节。


3.3.3PWM驱动

发射用的红外载波口』用标准脉宽捌制模块(PWM)来实现,载波频率是38KHz,因此PWM的周期就是1/38KHz,PWM周期的计算公式是:

PWM周期=[(_PR2)+1].4.TOSC(TMR2预分频值).

本设计中晶振是12MHz.即TOSC=1/12MHz,经过计算,PR2寄存器设置为78。TMR2预分频值为1可得到频率为38Km的方波。

也可以设置方波的占空比为1:3来减小功耗,占空比有10位,寄存器CCPRxL保存占空比高8位,CCPxCON《5:4》保存低2位。CCPRxL:CCPxCON《5:4》代表这个10位值。计算占空比的公式是:

PWM占空比=(CCPRxL:CCPxCON《5:4》).TOSC.(TMR2预分频值)

设置好频率和占空比.开启PWM功能,TMR2(定时器2)开始计时,PWM输出高电平,计时到周期的1,3时PWM输出低电平,计时到一个周期时PWM重新开始另一个周期,TMR2从0开始计时。所以要停止载波的输出很简单,只需令占空比为0或TMR2停止计时。因此,很容易就可得到图1所示的输出。


3.4 输入法设计

3.4.1 功能

用遥控器输入中英文、数字、符号,功能类似于手机短信,其中中文输入是类似手机T9输入法的拼音输入法,英文输入法是只需按两次键(第一次调出候选字符,第二次选择字符)即可输入一个字母。按“输入法”键从遥控模式切换进输入模式,操作同手机,“切换键”用来切换中/英输入,“1”用来输入标点,“0”用来呼出数字输入法。输入完毕按“发射键”发射LCD上所有文字的编码,汉字是机内码,英文、数字及符号是ASCII码。如果想回到遥控模式,再次按“输入法”键。


3.4.2 拼音输入法设计原理

拼音输入法是本设计的核心内容,它负责将键盘输入的数字序列转换为汉字,汉字的搜索采用查表算法。拼音输入法大体可以分为两个步骤:把数字序列转换为拼音编码,然后搜索到该拼音编码对应的汉字编码。选中的汉字将显示在LCD的文本区,其编码记录在待发射的文本数组中。


3.4.3 索引表的重要结构体

1.拼音编码以索引表的形式保存在PY_Index.h中,每个拼音编码的数据结构为:

eonst struct T9PY_IDX

{

const unsigned char *t9://按键数字序列

const unsigned char *PY://拼音编码字符串

coast unsigned char *pY_mb;//该拼音对应的汉字码表地址

};

所有的拼音编码组成一个数组常量T9PY_index[],每个拼音编码作为数组中的一个元素存在,如:const struct T9PY_IDX

PY_index[]{“9468”、 “zhou”,PY_mb_zhou},

2. 拼音输入法拼音组合查询码表,T9数字字母索引结构如下:

const struct PY_arrange

{

cormt unsigned char *nums;

const unsigned char *arra;

};

例如:const struct PY_arrange PY_arr []={“726”,“pan pao ran rao san sao”}


3.汉字码表举例:

const unsigned char PY_mb_zhou[]={“舟周州洲诌粥轴肘帚咒皱宙昼骤??”}

3.4.4 汉字字模库的使用

汉字的显示在LCD上用点阵来表示:有笔划(I)、无笔划(O)。描述点阵信息的二进制代码集称为字模,所有点阵信息就组成了字模库。GB2312—80规定了汉字的信息交换码,简称国标码,其用两个字节代码来表示一个汉字。微机中还有区位码和机内码两个概念,区、位各94(1-94),用先区后位的两个2位十进制数表示;机内码是计算机内部存储汉字的代码。


在本设计中,每个汉字的显示采用16x16图形点阵方式显示,在UCDOS等汉字操作系统中可以找到HZK16.DAT二进制文件,这是一个标准的16x16点阵的字模库。以94个汉字为一组。共87组,8178个字。以16x16点阵的汉字计算,每个汉字实际占用的空间为32Bytes,总容量为8178x32=262KB,用烧片器将HZK16.DAT烧进FLASH中。


以汉字“电”为例,其机内码为OxB5E7,在单片机系统中需要的是其在存储器中的绝对位置,则需要先将其转换为区位码。总结公式为:

((机内码的高位字节-OxA1)x94 + 机内码的低位字节 - 0xAl)x32

那么“电”在字库中的地址就是((OxB5-OxAl)x94+0xE7-0xAl)x32。AT45DB021B是分页存储的,每页有264Bytes,所以上述地址除以264的商是指定对哪一页读取,余数指定从这一页的哪一字节开始读取。


4 结束语

未来的多媒体终端给消费者带来的是集信息、娱乐、学习、购物于一体的享受。此遥控器通用性强,应用范围广,可支持搜索、短信等多种增值业务,带给用户革命性的体验感。遥控器BOM成本不到100元,普通遥控器为20元,差价80元,如果用于高端VOD业务的捆绑销售.假设包月资费为20元,仅用不到4个月就可收回投资,经济效益极好,市场潜力巨大。

本文作者创新点:针对多媒体终端输入中用户体验较差等缺点,介绍了一种可向终端发送文本信息的新型红外遥控器,给出了基于PIC8位单片机实现的解决方案,其设计理念比较符合数字家庭领域未来发展的方向,有一定的借鉴意义。

关键字:PIC  8位单片机  红外遥控器 引用地址:基于PIC8位单片机实现红外遥控器的设计

上一篇:PIC单片机的多路AD切换程序设计
下一篇:PIC单片机开发环境_PIC单片机引脚的三种状态

推荐阅读最新更新时间:2024-11-02 15:11

PIC8位8脚单片机12C5××和12CE5××系列的特点
  Microchip公司生产的8位单片机PIC12C508(A)/509(A)型和PIC12CE518/519型产品,仅有8个引脚,其管脚排列如下图所示。该产品是PIC基本级之一,其特点是低功耗、多功能、高性能、体积小和售价低廉。因该产品体积小,所以它们可以嵌入几乎任何一种电子产品中,特别是便携式电子产品,如各种IC卡、电子身份牌、照相机、充电器、计时器、智能传感器、灯光调节器、儿童玩具等等,都已得到了广泛的应用。   PIC12CE5××与12C5××系列单片机的区别仅仅是前者带有E2PROM的数据存储器,而后者的数据区为RAM。其余特性和管脚排列、性能几乎完全相同,它们都属于OTP单片机(一次写入不可擦除),适于批量的电
[单片机]
PIC单片机驱动LCD模块的设计
偏置电压是通过使用外部梯形电阻网络(电路见下图)而产生。因为梯形电阻网络连接在VDD和Vss之间,所以会有电流通过梯形电阻网络,电流大小与电阻成反比。也就是说,电阻越大,通过梯形电阻网络的电流就越小。如果使用10kΩ电阻,且VDD=5V,则梯形电阻网络将不断消耗166μA的电流。这对于一些使用电池供电的应用来说是很大的电流。 如何最大程度增大电阻,而又不会对显示质量产生负面影响?一些基本的电路分析可以帮助确定梯形网络中电阻增大的程度。 LCD模块实际上就是一个模拟多路开关,它交替地将LCD电压连接到各个段和公共引脚(段电极和公共电极交叉于每一个LCD像素点)。LCD像素可用电容进行模拟。梯形电阻网络中的每个分接点可以用戴维
[单片机]
<font color='red'>PIC</font>单片机驱动LCD模块的设计
PIC16模拟串口以及采样正弦波
最近两周用了两个IC(PIC16系列与STM8S系列)做了个产品,首次接触,遇到些问题,总结如下: 1:PIC16模拟串口发送数据,一定要在中断服务函数中执行 static void interrupt SystemISR(void) { if(TMR0IE && TMR0IF) //32MHz 104us { if(txCount) //检测数据是否发送完毕 { TXD=(txData&0x01); //输出数据 txData=(txData 1); //移位数据 --txCount; } else //发送完毕后进行停止位发送 { if(txFlag) { TXD=1
[单片机]
PIC单片机写的交通灯程序
#include pic.h #include stdio.h #define uint unsigned int #define uchar unsigned char uchar H_time=0,L_time=0; const uchar tab ={0x0a,0x22,0x11,0x14}; extern uchar code ={0x00,0x00,0x00,0x00}; void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=5;y 0;y--); } void light(uchar n) { uchar i,top,temp; for(;n 0;n--) { P
[单片机]
<font color='red'>PIC</font>单片机写的交通灯程序
pic单片机的ad转换(实例解析)
AD转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号。主要包括积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。 PIC单片机如何表示电压 PIC用十位二进制位的数来表示电压,也就是数值0~1023来表示电压。那比如现在这个数值是400那这代表多少的电压?这就要根据参考电压来确定了。 比如我们设置正参考电压为3.3V ,当输入的电压为0时,数值就为0。当输入
[单片机]
<font color='red'>pic</font>单片机的ad转换(实例解析)
基于PIC单片机直流电压表的汇编程序分享
定义用户寄存器 WEI1EQUH’0C’;BIT0=MODS:选择模式位0:模式11:模式2 ;BIT1=BREK:断路判别位0:无断路1:有断路 ;BIT2= ;BIT3= ;BIT4= ;BIT5=慢响 ;BIT6=快响 ;BIT7=长响 WEI2EQUH’0D’;“百位值运算”的启始值 WEI3EQUH’0E’;“十位值运算”的启始值 WEI4EQUH’0F’;个位值 WEI5EQUH’10’;百位值 WEI6EQUH’11’;十位值 WEI7EQUH’12’; WEI8EQUH’13’; WEI9EQUH’14’; WEIAEQUH’15’; WEIBEQUH’16’ WEICEQUH’17’ WEIDEQUH’1
[单片机]
基于<font color='red'>PIC</font>单片机直流电压表的汇编程序分享
PIC单片机led灯左移右移
程序介绍:每隔100ms,移动一个灯亮 //** Date: Wednesday, November 21, 2012 21:26:32 #define MX_PIC //Defines for microcontroller #define P16F690 #define MX_EE #define MX_EE_SIZE 256 #define MX_SPI #define MX_SPI_BCB #define MX_SPI_SDI 4 #define MX_SPI_SDO 7 #define MX_SPI_SCK 6 #define MX_UART #define MX_UART_B #define
[单片机]
<font color='red'>PIC</font>单片机led灯左移右移
红外遥控器软件解码及其应用
摘要:通过对红外遥控器各按键发送冲波形的分析可以识别码型,从而为软件解码提供依据。本文以实例介绍红外遥控器与单片机的硬件接口,并从原理出发给出软件解码的方法。这是一个可以直接引用的成功例子,同时也为各类红外遥控器在单片机控制产品中的开发应用提供了一个非常实用的参考。 关键词:遥控器 软件解码 单片机 在单片机控制产品的开发应用中,为了向控制系统软件控制命令,键盘往往是不可缺少的。传统方法是利用并行输入/输出接口芯片扩展一个键盘接口,或者直接利用单片机的并行端口进行扩展。在某些应用环境下,这种方式2个弊端:①键盘和控制系统连在一起,不灵活,环境适应性差;②浪费单片机的端口,且硬件成本较高。 使用红外遥控器作为控制系统的输入设备
[网络通信]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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