学习型红外遥控器设计(5) 万能学习型红外遥控器实现

学习型红外遥控器设计(0) 摘要   (1) 绪论  (2) 方案设计   (3) 遥控解码   (4) 编码还原  (5) 硬件实现   (6) 总结展望

如方案设计所述,制作万能学习型红外遥控器,该遥控器至少具有红外编码学习和还原功能,采用触屏和按键两种方式操作,彩色液晶屏显示,能够替代SAA3010遥控器使用。

5.1  基本原理

5.1.1  触屏校准

触屏操作处于绝对坐标系统(与当前位置坐标相关)。操作触摸屏时,触点坐标通过AD采样得到,同一点触摸多次采样数据会有偏差,这是触摸屏经常出现的问题:漂移。

对于触屏漂移最有效的办法是:系统启动后,进入应用程序前,执行校准程序,LCD中的点坐标是以像素为单位,触屏中读出的是点的物理坐标,由触屏坐标系到LCD坐标系的转化公式如下:

Xt = Kx × Xl + Ax

Yt = Ky × Yl + Ay

变量说明如表5.1所示:

表5.1  变量列表

变量 说明
Xt 触摸采样获得的横坐标
Kx: X方向比例因子
Xl: LCD的横坐标
Ax: X方向偏移量
Yt: 触摸采样获得的纵坐标
Ky: Y方向比例因子
Yl: LCD的纵坐标
Ay: Y方向偏移量

触屏校准的过程就是使用待定系数法确定XY方向的比例因子和偏移量,实验过程如下:

1、在LCD屏上显示四个定点,这四个定点的像素坐标分别为:
0(1,1)、1(1,176)、2(220,1)、3(220,176)。如图5.1所示:

图5.1  触屏测试点选取示意图

图5.1 触屏测试点选取示意图

2、触屏得到定点的触屏坐标,如表5.2所示:

表5.2  触屏测试数据列表

0   1   2   3  
x y x y x y x y
218 3590 3829 3573 422 524 3794 501
242 3500 3837 3580 422 525 3816 520
255 3569 3865 3576 422 600 3730 513
241 3560 3848 3574 419 523 3731 517
270 3552 3844 3592 364 524 3757 499
249 3534 3840 3602 424 524 3741 520
235 3558 3813 3613 368 539 3731 516
228 3560 3844 3592 398 523 3770 510
215 3585 3820 3601 422 470 3782 503
211 3573 3810 3594 421 524 3786 509
280 3582 3830 3601 417 522 3765 516
243 3538 3837 3589 394 519 3784 509

3、采用待定系数法确定触屏参数,本文利用matlab参数估计lsqcurvefit函数求得校正参数如表5.3所示,同时更新默认参数,达到校准目的:

表5.3  触屏校正参数

Kx 20.17045 Ax 250
Ky 13.90909 Ay 516

5.1.2  彩屏显示

计算机表示颜色使用二进制。16位色的发色总数是65536色;24位色被称为真彩色,发色数是1677万多色。32位色是1677万多色,增加了256阶颜色的灰度,各种RGB格式如表5.4所示:

表5.4  各种RGB格式对照[8]

RGB565 使用16位(一个字)表示一个像素,这16位中的5位用于R,

6位用于G,5位用于B。

高字节 低字节
R R R R R G G G G G G B B B B B
RGB555 使用16位(一个字)的RGB格式,RGB分量都用5位表示

(剩下的1位不用)。

高字节 低字节

X R R R R G G G G G B B B B B (X表示不用,可以忽略)

RGB24 使用24位来表示一个像素,RGB分量都用8位表示,

取值范围为0-255。

通常可以使用RGBTRIPLE数据结构来操作一个像素,

它的定义为:

typedef struct tagRGBTRIPLE {

BYTE rgbtBlue; // 蓝色分量

BYTE rgbtGreen; // 绿色分量

BYTE rgbtRed; // 红色分量

} RGBTRIPLE;

RGB32 使用32位来表示一个像素,RGB分量各用去8位,

剩下的8位用作Alpha通道或者不用。

通常可以使用RGBQUAD数据结构来操作一个像素,

它的定义为:

typedef struct tagRGBQUAD {

BYTE rgbBlue; // 蓝色分量

BYTE rgbGreen; // 绿色分量

BYTE rgbRed; // 红色分量

BYTE rgbReserved; // 保留字节

} RGBQUAD。

本设计选用液晶屏为2.0inch 176×220 65K色TFT LCD带触摸屏[9],该彩色液晶屏由国内知名的LCM模组提供商信利(Truly)提供。

采用创易电子提供的彩色图像转换软件Image2LCD_29得到图片logo的16位RGB格式数据如表5.5所示:

表5.5  R5G6B5数据

图片:logo 数据:R5G6B5
 

image107

 

高八位在前:低八位在后,

XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0X9F,0XE7,0X9F,0XE7,0X9F,0XE7,0X9F,0XEF,0XBF,0XEF,0XBF,0XEF,0XBF,0XEF,0XBF,0XEF,0XBF,0XF7,0XDF,0XF7,0XDF,0XEF,0XDF,0XEF,0XDF,0XEF,0XBF,0XEF,0XBF,0XEF,0XDF,0XE7,0X9F,0XE7,0X9F,0XE7,0X9F,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XE7,0XBF,0XEF,0XBF,0XEF,0X9F,0XEF,0X9F,0XEF,0X9F,0XEF,0XBF,0XEF,0X9F,0XEF,0X9F,0XEF,0XBF,…….

总共77440字节,将这些数据送至LCD模块数据线,配合控制总线,就可以显示图片。

5.2  万能学习型遥控器实现

由于本设计选用触屏仅支持BMP格式的16位真彩图片,一张176*220图片将会占用75.765K字节程序存储器,而STC89C52RC单片机用于程序存储的容量仅为8K字节,虽然可以采取外部扩展存储区的方式加载图片,但会造成较大的浪费,加大了系统设计的复杂度和成本,为此本文尝试设计一种适合本系统的图片压缩方式。

5.2.1  16位RGB图片压缩

如本章基本原理所述,每个像素对应一个16位双字节(R5G6B5),原有BMP数据是一个176*220数组,像素行列位置对应于元素在数组的行列位置,为此考率将相邻的相同颜色的像素合并:定义格式为:RGB+重复个数(小于256),实验过程如下:

选取五张BMP格式彩图,如表5.6所示:

 表5.6  测试图片列表

 image109  image111  image113
 image107  image115
       

2、按照本文设计的压缩方式压缩,得到的压缩数据如表5.7所示:

表5.7  压缩数据列表

序号 部分数据列举(前18个数)
1 11077    1    4769     1    4544      1

21189    1    21254    1    19236    1

23397    1    21317    1    15171    1

2 10533    1    10565    2    10532    1

8452     1    8419     1    6371     2

8419      1   10532    1    10565    2

3 55069    1    50876    1    52957    2

50877    5    50876    7    50844    1

50876    1    50844    1    50876    2

4 59327    32   59295    1    61375    2

61407    3    63455    1    63487    1

61407    2    61375    2    61407    1

5 65535    255  65535    255  65535    255

65535    255  65535    255  65535    255

65535    255  65535    70   65534    2

3、压缩效果对比,如表5.8所示:

表5.8  压缩效果对比

序号 1 2 3 4 5
原有大小 72.6KB 72.6KB 72.6KB 72.6KB 72.6KB
压缩后大小 104.5KB 101.1KB 74.6KB 79.5KB 36.0KB

由于本压缩方式保留了原有图像的全部信息,所以仅有序号为5的图片压缩效果比较理想,为此可以采取一定的策略,设计更为复杂的压缩方式,简要表述如下:由于图片176*220个像素,假设各个像素颜色各不相同,仍然能空余26816种颜色,可以把这些空余颜色对应的RGB字符定义为命令字(注意命令字是根据不同图片动态分配的),赋予不同的意义,这里仅提供一种压缩格式定义,格式如下:

压缩方式字 区位标志字 复制命令字 区起始命令字 区结束命令字 ……….. 数据 ……….

5.2.2  遥控仿真面板制作

通过图片压缩部分的实验发现,采用51系列8位的单片机控制彩色图像显示显然存在数据量大的问题,为此本文将遥控器的外观模拟部分通过PC机实现,结合matlab GUI编程,制作了遥控器仿真面板,主要用于显示遥控器的相关信息。下面按照两种方式操作面板:

1、控制码变化对照,按照RC-5协议编码要求,每按键一次,控制位就会反转,以开关键为例,连续两次按下,测试结果如表5.9所示:

表5.9  控制码变化对照表

按键:开关键 按键:开关键
 image117  image119

2、指令码对照,本仿真面板设计了两种状态显示方法:数字和图形,按照RC-5协议要求,按键与编码格式中的指令码一一对应,以按键1、2为例,测试如表5.10所示:

表5.10  指令码变化对照表

按键:1 按键:2
 image121  image123

由于SAA3010遥控器最主要的编码特点为:同一按键连按两次或者不同按键相继按下,编码格式的控制码(第2位)会反转;不同按键相继按下,编码格式的指令码(最后6位)会改变,故同一按键多次按下和不同按键相继按下会出现如表5.9、表5.10所示的情况。

5.2.3  红外编码还原实现:

本设计的红外学习硬件部分在第3章红外接收解码已经实现,红外编码硬件部分在第4章红外编码发射部分已经实现,触屏显示部分就是单片机控制触屏数据线和控制线,硬件部分比较简单(对应IO口相连),主要在于程序实现,软件流程如图5.2、图5.3所示:

图5.2  主程序流程示意图

图5.2 主程序流程示意图

图5.3  物理按键操作流程示意图

图5.3 物理按键操作流程示意图

1、虚拟按键操作与物理按键基本相同,却别仅在于判断按键类型时,物理按键通过单片机引脚判断,而虚拟按键需要判断通过触摸点坐标所在区域来判断。

2、触屏可视区仅有2.2inch,单片机的片程序存储器仅有8K,故系统仅设计上下左右四个方向键和一个确认键,通过设定全局变量来记录当前发射键的信息。

5.3  系统性能检测

在系统性能检测之前,先给出万能学习型红外遥控器实物图,如图5.4所示:

图5.4  万能学习型红外遥控器

图5.4 万能学习型红外遥控器

1、红外发射;2、LED检测;3、5V稳压电源;4、触摸屏;5、AT89C2051;6、STC89C52RC;7、功能键。

利用本章触屏校验得到的参数作为默认值,采用了两种方法来进行验证:

1、规定五个按键所在区域为有效区,有效区以外的操作均被忽略,按键按下时显示按下状态,弹起时显示弹起状态。

2、虚拟双数码管,如图5.3所示,方向键被按下时更新双数码管状态,需要注意的是,方向键采取循环方式改变双数码管状态,例如左键表示左数码管当前数值减一操作,假若当前值为1,则循环减一操作得到9。

图5.5  彩屏面板设计

图5.5 彩屏面板设计

经过反复测试,按键区域中心操作有效,按键边界操作灵敏度在5个像素以内,完全满足实用性。

红外发射接收在前述章节已经检验过,这里配合触屏操作再次校验,除红外发射精度略待提高以外,其他性能良好。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值