ARM微控制器LPC210X的LCD接口技术

2007-03-09 19:03:27来源: 互联网
摘要:本文分别以GPI0口直接连接、串行转换连接、CPLD分部连接三种方法阐述了无外部总线的Philips ARM微控制器LPC210X与点阵图形液晶显示器的接口设计,并给出硬件电路框图和主要程序。 关键词:ARM LPC210X LCD接口 串并转换 CPLD 引言 Philips最近推出了其第一款基于ARM内核的控制器LPC210X,但由于LPC210X外部总线不开放,无法扩展内存、驱动液晶显示器等,给它的推广带来了一定的影响。笔者最近在一工控板项目中采用了该系列芯片,项目后斯应客户要求需对几个参量进行显示并扩展键盘,不得已之下,采用了CPLD,并利用了GPIO口模拟总线和液晶时序与点阵图形液日模块HS12864-16建立了连接。下面详细探讨包括该种连接的三种接口方式。 1 LPC210X的GPI0口和HS12864-16A介绍 LPC210X控制器包含LPC2104、LPC2105、LPC2106,除了片内静态RAM不同外,其他完全相同。该系列器件具有32个GPIO口(P0.0~P0.31),没有外部总线,大多GPIO口是复用口,所以它一般不适合连接大屏幕液晶显示器,但驱动小规模液晶模块进行工业控制上的参量显示还是非常合适的。 GPIO包含四个寄存器,如表1所列。 表1 配置GPI0口的四个寄存器 名 称 地 址 描 述 IOPIN 0xE0028000 引脚值寄存器,引脚当前状态都从该寄存器读出 IOSET 0xE0028004 输出置位寄存器,只能写1,对应引脚输出高电平 IOCLR 0xE0028008 输出清零寄存器,只能写1,对应引脚输出低电平 IODIR 0xE002800C 方向控制寄存器。控制每个I/O方向 另外GPIO口还包含两个引脚连接模块寄存器PINSEL0、PINSEL1,用来为32个引脚配置I/O功能或其他特殊功能。 HS12864-16A是内部不带字符发生器的3V液晶模块(LPC210X可直接驱动5V液晶模块俣考虑到功耜耗,不赞成连接),其主要引脚如表2所列)。 表2 HS12864-16A引脚525252 引 脚 号 引 脚 名 称 描 述 1、23、 VSS、VDD、V0 电源(3.3V)、电源地、驱动负太 4 D/I 数据指令选择 5 R/W 读写选择 6 E 使能,R/W=0,下降沿锁存DB7DB0 7~14 DB0~DB7 数据线 15、16 CS1、CS2 左、右半屏选择 17 RET 复位,低电平复位 18 Vout LCD驱动负压,-10V,分压接3脚 19、20 EN、NO 背光电源 显示屏由128%26;#215;64点阵组成,共有64行,分为8页,每页8行,每行128列。写指令规则如下:当D/I=0、R/W=0,所有指令由传输到数据线的8位二进制数据决定,开显示为0x3f,并显示为0x3e,传输行、列地址由2低6位决定,传输页地址为低3位决定。 2 三种接口设计 2.1 直接连接法 连接框图如图1所示。 该种方式占用GPIO口较多,对于要大量应用GPIO口复用功能的系统并不合适。为便于说明,图1将LPC210X的P0.0~P0.12选为连接的13个口,具体到设计系统中,可根据系统用到功能对应GPIO口复用功能进行选取和配置。HS12864-16A的数据线为8条,所以存在于Flash中的字模也是按8位存的,可由字模软件得出,传输数据进行显示的时候要满足以下时序:首先使D/I为高电平,R/W为低电平,接着将Flash里的某个8位二进制字模传送到8个I/O口上,然后使能E模拟下降沿时序,把数据锁存到液晶显示器内部的显示存储器中即可显示。 程序由ADS1.2编译器编译。 GPIO口配置: #define LCD_DI 0x00000100 ;指令选择线P0.8 #define LCD_RW 0x00000200 //读写选择线P0.9 #define LCD_E 0x00000400 //使能线P0.10 #define LCD_CS1 0x00000800 //左屏选择线P0.11 #define LCD_CS1 0x00000800 //左屏选择线P0.11 #define IO_USE 0x00001FFF //13个GPIO口传输方向 传输字模数值到液晶显示器数据上的子程序如下: void SendData(unsigned char date){ IOSET=data; IOCLR="data%26;amp;0x000000FF; } 备注:以上子程序为并行传输,也可以用串行移位进行传输,具体代码如下: unsigned char i; for(i=0;i<8;i++){ //依次发送8位数据 if((data%26;amp;0x80)!=0) //最高位为1,对应口线置1 IOSET=IO_TURN; Else IOCLR=IO_TURN; //否则置0 data<<=1; //移到下一数据线 } IO_TURN=0x00000080; //8位数据传输完毕后,仍然将P0.7设为起始线 } 下面以左半屏来说明如何在屏幕上任意显示16%26;#215;16点阵汉字。 传送指令子程序如下: void wcodel(unsigned char code){ //送指令 IOSET=LCD_CS1; //开左屏 IOCLR=LCD_CS2; //关右屏 IOCLR=LCD_RW; //写选择 IOCLR=LCD_DI; //指令选择 SendData(code); //依次将指令代码传到数据线上 IOSET=LCD_E; //模拟使能E下降沿 IOCLR=LCD_E; } 同理,只要把IOCLR=LCD_DI改为IOSET=LCD_DI便成传送数据了。为便于区分,可将函数名改为wdata1(data)。 显示左屏汉字子程序如下: void hzleft(unsigned char page,unsigned charrow,unsigned char number){ //形参分别为页、列、汉字序号 unsigned char i,j; wcode1(0xc0); //设置12864从第1行显示 wcode1(0x3f); //开显示器 for(j=page;j reg[3:0]lock; //定义锁存寄存器 always@(enable or data) begin if(!enable) //低电平锁存 lock<=data; else //高电平开通锁存 ,输出8位 begin out_high=lock; out_low=data; end end endmodule 至于P0.5选通CS1、CS2,在另一always块中用ifelse语句进行判断就可以了。 程序设计完成后,在WEBPACK中对用到的引脚进行分配与锁定,然后编译。如果需要仿真的 埃鸵杓贫ゲ阄件,可使用Xilinx公司推出的免费仿真软件MODELSIM。 对于上面的第二种方法,也可以考虑用CPLD设计称位存储器及时序控制。在复杂应用中,加上CPLD不但可以令设计简化,还可以使系统性能大大增加。 结语 对于无外部总线的Philips LPC210X,只能通过GPIO口模拟部连接液晶显示器。但在设计过程中,可以考虑通过串行转换或CPLD分部连接的方法减少GPIO口的使用,以便充分利用LPC210X的资源。不过没有总线毕竟有所束缚,好在Philips即将推出的LPC22X4系列控制器开放了外部总线,相信当这款芯片推出后,必将得到更多的关注。
编辑: 引用地址:http://www.eeworld.com.cn/designarticles/embed/200703/11638.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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