1 引言
由于点阵液晶显示具有高清晰度和高分辨率,可显示复杂文字和图形,耗电省等优点,在移动通讯、仪器仪表、电子设备等方面得到广泛应用。而触摸屏作为良好的人机接口一直应用于仪器仪表。触摸屏和点阵液晶显示模块的相互配合使用,使得人机界面更加完善美观。这里介绍的基于RA8806控制器的LCD就是内建触摸屏控制器的点阵液品显示模块。
2 RA8806控制器简介
RA8806是点矩阵液晶显示控制器,支持320x240、四灰阶、双图层文字及图形显示模式,内建中、日、英、欧文字型码,可将文字旋转90°、180°、270°显示。RA8806内建智能型触摸扫描控制器,支持4线电阻式触摸屏接口,带8x8的键盘扫描接口,可编程设置的脉宽调制用来调节LCD面板的对比度或背光。RA8806也提供如区域卷动、文字反白、粗体文字、文字放大、内存清除等功能。RA8806还提供一项创新功能即无雪花模式,可有效移除当频繁对内存读写所产生的雪花。
[page]
3 RA8806和51单片机接口电路
RA8806支持4位或8位数据总线的8080/6800系列MPU接口,其外部接口引脚功能描述如表1所示。基于RA8806控制器的LCD和51系列单片机的接口采用总线或直接I/O方式,基于总线的接口方式如图1所示,数据总线直接和单片机的PO端口相连,P20选择指令或数据,P27作为片选信号,因此LCD的命令端口地址是0x7100,数据端口地址是0x7000。LCD的复位信号直接从51单片机的复位信号取反得到,为保证LCD复位信号的稳定,单片机复位的对地电阻不能大于4.7 kΩ。LCD的复位也可采用基于直接I/O方式的LCD接口方式(图2),用一个单片机引脚产生复位信号。
4 软件设计
基于RA8806控制器的LCD软件设计包括基本读写函数、字符串显示函数、画线函数、图像显示函数、触摸屏相关函数等。这里重点介绍基本读写函数的编程方法,编程注意事项及触摸屏的开发过程。
4.1 基本读写函数
基于RA8806控制器的LCD和51单片机接口的基本读写函数主要包括:指令写入函数(写数据到寄存器),缓冲器读取函数,内存写入和读取函数,以及状态读取函数。这些函数主要是按照RA8806数据资料给出的时序要求进行编写。单片机和 RA8806接口方式不同,编程方式也不同。以RA8806指令写入函数为例,时序要求如图3所示。
若RA8806和单片机的接口按图1的总线方式,指令简单,接口时序由单片机自动形成,其指令如下:
4.2 RA8806编程注意事项
(1)内存写入与读取 当写数据到内存(可能是显示内存或字型产生内存)时,必须先执行缓存器编号为B0h的“写入指令周期”。反之,如果读取内存中的数据时,则必须先执行缓存器编号为B1h的“写入指令周期”。
(2)字符模式和图形模式 RA8806支持两种自MPU写入内存的模式:字符模式和图形模式。在图形模式时,数据以点阵的方式直接写入内存;而在字符模式下,写入的数据以字码的形式被写入RA8806,而写入的字码会再到CGROM中读出相对的字型码而后写入内存。因此,当需要画线或显示图像时,必须设置LCD 工作在图形方式;当显示字符时,务必切换到文字方式。[page]
(3)LCD的复位和初始化 为保证RA8806无误操作,RA8806供电后要进行复位。复位方式可采用图1方式,也可采用图2方式,或单独采用阻容方式。复位后要初始化设定RA8806内部缓存器,即编写一个初始化函数,并在复位后运行。
RA8806功能强大,只有包括卷动、反白、双图层、四灰度等功能,以及独特的消除闪烁模式功能,建议使用C51编程,以函数的形式实现以上功能,将这些函数封装在一个C程序中,通过头文件供主程序调用。
4.3 触摸屏编程
RA8806内建一组10位A/D转换和控制电路,以连接4线电阻式触摸屏。一般,电阻式触摸屏由两层很薄的电阻式屏幕组成,当外力施加在面板上的某一点时,两层屏幕将被触碰,相对于触碰的位置,系统将侦测到一个(X,Y)坐标值。触摸屏查询方式流程(图4)的作用是开启触屏功能,判断当触控事件发生时,首先读回对应的(X,Y)坐标值(两组10位A/D转换值),再转换为对应的屏幕坐标。
触摸控制电路的10位A/D转换器产生的(X、Y)坐标都在1 023~0中,而基于RA8806的LCD分辨率是320x240,程序要将触摸屏的(X,Y)坐标值转换为LCD坐标值,确定两者间的转换关系一般通过触摸屏的校准程序完成。最简单的校准算法是两点校准:在LCD的左上角和右下角显示2个校准图标(长为20的十字光标),十字光标的交叉点即为校准点。分别触摸2个十字中心的交点,可得到两组触摸屏的(X,Y)坐标值,而LCD的2个十字中心的坐标已知,由式(1)可得到水平和垂直方向的斜率和截距,然后将水平和垂直方向的斜率和截距保存在EEPROM中。
对于要求触摸定位不很精确的场合,比如仅以字符为单位的定位精度,也可在系统中省去校准程序,而在程序转换中给出一个相近的斜率和截距。
5 结束语
基于RA8806的LCD与同类产品相比,具有功能强、调试简单、编程灵活和性价比高等优点,且内建4线电阻式触摸屏接口,内置中文字库和ASCII码字库。因此基于RA8806的LCD可广泛应用于智能仪表、数字化仪器等。
关键字:RA8806控制器 LCD 51单片机
引用地址:
基于RA8806控制器的LCD和51单片机接口技术
推荐阅读最新更新时间:2024-03-16 12:38
MCS-51单片机内部程序存储器ROM结构详解
MCS-51单片机的程序存储器用于存放编好的程序和表格常数。8051片内有4 KB的ROM,8751片内有4 KB的EPROM,8031片内无程序存储器。 MCS-51的片外最多能扩展64 KB程序存储器,片内外的ROM是统一编址的。如端保持高电平,8051的程序计数器PC在0000H~0FFFH地址范围内 (即前4 KB地址) 是执行片内ROM中的程序,当PC在1000H~FFFFH地址范围时,自动执行片外程序存储器中的程序;当保持低电平时,只能寻址外部程序存储器,片外存储器可以从0000H开始编址。 MCS-51的程序存储器中有些单元具有特殊功能,使用时应予以注意。 其中一组特殊单元是0000H~0002H。系统复位后,(
[单片机]
51单片机选择模拟(AD)量输入接口
在51单片机的设计中经常会接触到模拟量输入,下面为模拟(AD)量输入接口选择源程序。 //-----------------------模拟(AD)量输入接口选择函数声明,变量定义-------------------------------------------------------- #include reg51.h #include intrins.h sbit sel_A = P1^1; sbit sel_B = P1^2; sbit sel_C = P1^3; unsigned char ABC; void timer_set(); //51单片机定时器初始化函数 void coll
[单片机]
如何对51单片机进行ROM扩展
强烈建议用户尽可能不要考虑外扩程序存储器,如果非扩不可,可以仿照下图所示电路进行扩展 图中P0口输出外部ROM的低8位地址信号,P2口输出高8位地址信号;ALE端输出地址锁存信号,/PSEN输出程序存储器输出使能信号。 两个模块 P89V51RD2单片机内部有64K用户ROM区和8K BOOT ROM区两个模块两个模块在物理上是分开的,尽管地址重合,但一般不会发生冲突。 用户程序存储区P89V51RD2内部有64KFLASH ROM,不需要用户再进行ROM扩展地址范围:0000H~FFFFH其内部分配和其他51系列单片机是相同的Flash ROM可以反复擦除和下载程序。 擦除和编程的方法 并行编程器ISP (在系统
[单片机]
基于51单片机的银行排队呼叫系统设计
一.硬件方案 本系统是以排队抽号顺序为核心,客户利用客户端抽号,工作人员利用叫号端叫号;通过显示器及时显示当前所叫号数,客户及时了解排队信息,通过合理的程序结构来执行排队抽号。 主要由51单片机+最小系统+LCD12864液晶显示屏+WT588语音模块+按键输入;如图: 二.设计功能 (1)LCD12864液晶显示当前窗口01、02 排队人数 取号号码。 (2)第一个按键到1号窗口,第二个按键到二号窗口。 (3)第三个按键进行取号。 (4)语音播报当前取号号码到几号窗口。 三.设计原理图 (1)原理图主要采用AD软件进行设计,如图: (2)PCB图如下: 四.软件设计 主程序源码 /************
[单片机]
基于51单片机的多功能数控电流源设计
在现代科学研究和工业生产中,精度高、稳定性好的数控直流电流源得到了十分广泛的应用。以往所采用的电流源多数是利用电位器进行调节,输出电流值无法实现精准步进。有些电流源虽能够实现数控但是往往输出的电流值过小,且所设定的输出电流值是否准确不经测试无法确定,不够直观。为此,结合单片机技术及V/I变换电路,利用闭环反馈调整控制原理设计制作了一种新型的基于单片机控制的高精度数控直流电流源。 本系统以AT89S52单片机为控制器,通过人机接口(按键和LCD显示屏)来设置输出电流,设置步进等级1 mA,并可同时显示预设电流值和实际输出电流值。本系统由按键设置输出电流值,经单片机计算后通过D/A转换器(TLV5618)输出模拟信号,再经过V/
[单片机]
LCD1602时钟显示时间日期带闹铃可循环调节
#include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit lcdrs=P2^6; sbit lcden=P2^7; sbit lcdrw=P2^5; sbit key1=P2^0;//欢迎开屏/显示时间日期/显示闹铃切换 sbit key3=P2^1; //循环调节 sbit key4=P2^2;//加 sbit key5=P2^3;//减 uchar flag1,flag,flag3,num1,shi,fen,miao,nian,yue,ri,zhou; uchar _fen,_shi; uch
[单片机]
51单片机16*16LED点阵滚动显示
* 功能:LED16*16点阵滚动显示 说明:74LS154用作发送数据,P0,P2口用来列选 看本程序最好的工具最好旁边有标号和语法着色,推荐keil或UltraEdit 懒人提示:要改成自己所要的显示内容,要怎么改? 1.要改显示内容改第23~92行代码,还有第119行代码,具体改法见下面注释 2.要改滚动速度改第102行代码 */ /*头文件*/ #include reg52.h #include intrins.h /*宏定义*/ #define uchar unsigned char #define uint unsigned int /*函数声明*/ void delay(); /*全局变量*/ uint li
[单片机]
51单片机-最终的function文件
最后这一讲没什么知识点讲解,我们将前面的七讲内容集合成最后完整的function文件,以便后面大家弄乱了这两个文件的内容好过来这里复制粘贴回去。 1.function.c最终代码 #include reg52.h #include function.h u8 code LedChar ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//数码管状态值初始化 u8 LedBuff ={0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//初始化数码管显示缓存区 void del
[单片机]