学习型红外遥控器设计(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 触屏测试点选取示意图
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 |
高八位在前:低八位在后,
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 测试图片列表
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 控制码变化对照表
按键:开关键 | 按键:开关键 |
2、指令码对照,本仿真面板设计了两种状态显示方法:数字和图形,按照RC-5协议要求,按键与编码格式中的指令码一一对应,以按键1、2为例,测试如表5.10所示:
表5.10 指令码变化对照表
按键:1 | 按键:2 |
由于SAA3010遥控器最主要的编码特点为:同一按键连按两次或者不同按键相继按下,编码格式的控制码(第2位)会反转;不同按键相继按下,编码格式的指令码(最后6位)会改变,故同一按键多次按下和不同按键相继按下会出现如表5.9、表5.10所示的情况。
5.2.3 红外编码还原实现:
本设计的红外学习硬件部分在第3章红外接收解码已经实现,红外编码硬件部分在第4章红外编码发射部分已经实现,触屏显示部分就是单片机控制触屏数据线和控制线,硬件部分比较简单(对应IO口相连),主要在于程序实现,软件流程如图5.2、图5.3所示:
图5.2 主程序流程示意图
图5.3 物理按键操作流程示意图
1、虚拟按键操作与物理按键基本相同,却别仅在于判断按键类型时,物理按键通过单片机引脚判断,而虚拟按键需要判断通过触摸点坐标所在区域来判断。
2、触屏可视区仅有2.2inch,单片机的片程序存储器仅有8K,故系统仅设计上下左右四个方向键和一个确认键,通过设定全局变量来记录当前发射键的信息。
5.3 系统性能检测
在系统性能检测之前,先给出万能学习型红外遥控器实物图,如图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) 万能学习型红外遥控器实现相关推荐
- 学习型红外遥控器设计(6) 总结展望
学习型红外遥控器设计(0) 摘要 (1) 绪论 (2) 方案设计 (3) 遥控解码 (4) 编码还原 (5) 硬件实现 (6) 总结展望 6.1 总结 本设计完成的万能学习型红外 ...
- 学习型红外遥控器设计(2) 红外遥控学习方案设计
学习型红外遥控器设计(0) 摘要 (1) 绪论 (2) 方案设计 (3) 遥控解码 (4) 编码还原 (5) 硬件实现 (6) 总结展望 2.1 设计目标及要求 本文设计的万能学 ...
- 展示型app用什么型号服务器,APP版式设计教程:信息展示型UI界面设计的四种类型...
作为一名专业的APP设计师,版式设计也是我们日常设计当中的一项基本功. 那你到底对版式设计有多深的理解呢? 你现在可以摸着旁边妹子的手说,什么是版式设计ma ? 版式设计又分为哪几种呢? 这个时候妹子 ...
- 学习型红外遥控器设计(1) 绪论
学习型红外遥控器设计(0) 摘要 (1) 绪论 (2) 方案设计 (3) 遥控解码 (4) 编码还原 (5) 硬件实现 (6) 总结展望 1.1 选题的目的意义 上世纪八十年代初 ...
- 学习型红外遥控器设计(0) 摘要
学习型红外遥控器设计(0) 摘要 (1) 绪论 (2) 方案设计 (3) 遥控解码 (4) 编码还原 (5) 硬件实现 (6) 总结展望 摘 要 随着家用电器种类的增加和无线 ...
- 学习型红外遥控器设计(4) 红外遥控编码还原
学习型红外遥控器设计(0) 摘要 (1) 绪论 (2) 方案设计 (3) 遥控解码 (4) 编码还原 (5) 硬件实现 (6) 总结展望 如方案设计所述,制作红外编码发射装置,该装 ...
- 学习型红外遥控器设计(3) 红外遥控解码学习
学习型红外遥控器设计(0) 摘要 (1) 绪论 (2) 方案设计 (3) 遥控解码 (4) 编码还原 (5) 硬件实现 (6) 总结展望 如方案设计所述,制作红外接收解码装置,该装 ...
- 电系魔法师成长之路—仪器仪表学习(二)设计T型和Π型衰减器
电系魔法师成长之路-仪器仪表学习(二)设计T型和Π型衰减器 一.用途 衰减器是一种提供衰减的电子元器件, 广泛地应用于电子设备中,它的主要用途是:(1)调整电路中信号的大小:(2)在比较法测量电路 ...
- c# 设计原则需要学习吗_向最好的学习:产品设计原则
c# 设计原则需要学习吗 重点 (Top highlight) In my job as Design Team Lead at SimpleSite, I've recently been part ...
最新文章
- 我常用的那些linux命令
- pytorch | transpose、permute、view、contiguous、is_contiguous、reshape
- 计算机图形学二维变换知识点,计算机图形学 二维变换及二维.ppt
- 基于使用AspectJ实现AOP,注解AOP开发(基于xml文件、基于注解)
- DCX读书报告Bring structure to the web有感
- 何时才使用https访问项目
- no segments* file found in org.apache.lucene.store.SimpleFSDirectory
- 多线程调用同一个对象的方法_这一次,让我们完全掌握Java多线程(2/10)
- 通俗易懂的进程与线程解释
- 2021新款外卖返利系统源码,美团/饿了么返利三级分销源码外卖返利源码下载
- 最简单DIY基于ESP8266的国产WS2812智能彩灯④(在网页用按钮点亮)
- 红外倒车雷达原理图_超声波倒车雷达电路图及原理分析
- Python | 阿尔法程序的控制结构
- SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
- 推荐使用rpx替代upx的公告
- 文本文件后缀修改为 .html
- win10 游戏全屏闪退桌面解决方法
- 用数万元购买个人网站域名是否值得?
- gt-p7500 Android 4,三星GT-P7500 线刷固件包可救砖 刷机教程
- 20年前iPod改变了世界,20年后它变成了怀旧机器
热门文章
- Python的ABC模块
- android 游戏sdk 浮标,华为游戏浮标不显示或显示异常
- 出现org.apache.http.NoHttpResponseException
- h5---新增的结构性元素(header、footer、nav、article、section、aside、time、progress和meter元素进度条)
- 关于在python的tkinter界面中镶嵌mayplotlib动态图
- 哔哩哔哩投稿工具暂时无法连接到服务器,哔哩哔哩投稿工具
- 合理用药功能在医院信息系统(HIS)中的应用
- Unity学习过程中的问题解答汇总(一)
- 二氧化硫脲的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 磁同步电机(pmsm,无位置传感器控制(扩张状态观测器,超螺旋滑模,扩展卡尔曼滤波) 脉振高频注入(有方波和正弦两种)仿真模型。