ARM微控制器LPC210X的LCD接口技术摘要:本文分别以GPI0口直接连接、串行转换连接、CPLD分部连接三种方法阐述了无外部总线的PhilipsARM微控制器LPC210X与点阵图形液晶显示器的接口设计,并给出硬件电路框图和主要程序。关键词:ARM LPC210X LCD接口串并转换CPLD引言Philips最近推出了其第一款基于ARM内核的控制器LPC210X,但由于LPC210X外部总线不开放,无法扩展内存、驱动液晶显示器等,给它的推广带来了一定的影响。笔者最近在一工控板项目中采用了该系列芯片,项目后斯应客户要求需对几个参量进行显示并扩展键盘,不得已之下,采用了CPLD,并利用了GPIO口模拟总线和液晶时序与点阵图形液日模块HS12864-16建立了连接。下面详细探讨包括该种连接的三种接口方式。1LPC210X的GPI0口和HS12864-16A介绍LPC210X控制器包含LPC2104、LPC2105、LPC2106,除了片内静态RAM不同外,其他完全相同。该系列器件具有32个GPIO口(P0.0~P0.31),没有外部总线,大多GPIO口是复用口,所以它一般不适合连接大屏幕液晶显示器,但驱动小规模液晶模块进行工业控制上的参量显示还是非常合适的。GPIO包含四个寄存器,如表1所列。表1配置GPI0口的四个寄存器名称地址描述IOPIN0xE0028000引脚值寄存器,引脚当前状态都从该寄存器读出IOSET0xE0028004输出置位寄存器,只能写1,对应引脚输出高电平IOCLR0xE0028008输出清零寄存器,只能写1,对应引脚输出低电平IODIR0xE002800C方向控制寄存器。控制每个IO方向另外GPIO口还包含两个引脚连接模块寄存器PINSEL0、PINSEL1,用来为32个引脚配置IO功能或其他特殊功能。HS12864-16A是内部不带字符发生器的3V液晶模块(LPC210X可直接驱动5V液晶模块俣考虑到功耜耗,不赞成连接),其主要引脚如表2所列)。表2HS12864-16A引脚525252引脚号引脚名称描述1、23、VSS、VDD、V0电源(3.3V)、电源地、驱动负太4DI数据指令选择5RW读写选择6E使能,RW=0,下降沿锁存DB7DB07~14DB0~DB7数据线15、16CS1、CS2左、右半屏选择17RET复位,低电平复位18Vout LCD驱动负压,-10V,分压接3脚19、20EN、NO背光电源显示屏由128×64点阵组成,共有64行,分为8页,每页8行,每行128列。写指令规则如下:当DI=0、RW=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位存的,可由字模软件得出,传输数据进行显示的时候要满足以下时序:首先使DI为高电平,RW为低电平,接着将Flash里的某个8位二进制字模传送到8个IO口上,然后使能E模拟下降沿时序,把数据锁存到液晶显示器内部的显示存储器中即可显示。程序由ADS1.2编译器编译。GPIO口配置:#define LCD_DI0x00000100;指令选择线P0.8#define LCD_RW0x00000200读写选择线P0.9#define LCD_E0x00000400使能线P0.10#define LCD_CS10x00000800左屏选择线P0.11#define LCD_CS10x00000800左屏选择线P0.11#defineIO_USE0x00001FFF13个GPIO口传输方向传输字模数值到液晶显示器数据上的子程序如下:void SendData(unsigned chardate){IOSET=data;IOCLR=~data&0x000000FF; } 备注:以上子程序为并行传输,也可以用串行移位进行传输,具体代码如下:unsigned char i;for(i=0;i8;i++){ 依次发送8位数据if((data&0x80)!=0)最高位为1,对应口线置1IOSET=IO_TURN;ElseIOCLR=IO_TURN; 否则置0data=1; 移到下一数据线}IO_TURN=0x00000080;8位数据传输完毕后,仍然将P0.7设为起始线} 下面以左半屏来说明如何在屏幕上任意显示16×16点阵汉字。传送指令子程序如下:voidwcodel(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;jpage+2;j++){wcode1(row); 设置显示列wcode1(0xb8+j); 设置显示页for(i=16(j-page);i16(j+1-page);i++)依次取字模传输wdata1(hangzi[32a+i]); } } 每个汉字字模由32个字节组成,前16个字节显示汉字上半部分,后16个字节显示汉字下半部分,构成完整的16×16点阵。其中number代表存在Flash中的汉字排名序列号,只要把页、列、汉字序号实参值传到汉字显示子程序中进行调用即可显示汉字了。参考上面程序便能很方便地写出字母、数字的显示子程序。程序中使用寄存器名称时要先在头文件中将其映射到对应地址,如对IOSET做如下定义:#defineIOSET(((volatile unsigned long)0xE0028004))其它类似。另外,要定义设置引脚连接GPIO,以及GPIO方向设置。PINSEL0=0xX0000000;设置用到的13个引脚连接到GPIO,为X的根据应用系统配置PINSEL1=0xXXXXXXXX;IODIR=IO_USE; 设置用到的13线方向为输出当然,完整的应用还必须包括ARM时钟代码、启动代码等。2.2串行转换法从上面可以看出,尽管用8个GPIO口模块总线非常容易与液晶显示器建立连接,但是占用口线太多。为节省口线,可以考虑加入串入并出的移位寄存器74HC595,用LPC210X的GPIO口复用SPI功能或直接用GPIO口模拟SPI功能进行驱动,后者更加方便。下面用这种方式进行说明,同样为方便,选用了连续的GPIO口P0.0~P0.7,具体设计系统要按实现情况进行配置,框图如图2所示。该种方法通过3个GPIO口模拟SPI对74HC595进行控制,驱动液晶数据显示。模拟SPI的GPIO口配置如下:#defineSPI_CLK0x00000001时钟线为P0.0#defineSPI_DATA0x00000002传输数据线为P0.1#defineSPI_CS0x0000000474HC595选通线为P0.2传输字模数值到数据线上的子程序:void SendData(unsigned chardate){unsigned char i;IOCLR=SPI_CS;SPI_CS=0for(i=0;i8;i++){ 依次发送8位数据IOCLR=SPI_CLK;SPI_CLK=0if((date&0x80)!=0)传输最高位IOSET=SPI_DATA;ElseIOCLR=SPI_DATA;date=1;IOSET=SPI_CLK;SPI_CLK=1}IOSET=SPI_CS;SPI_CS=1} 其它程序与方法1类似。有了以上子程序,就可以很方便地加以调用,进行液晶驱动显示。2.3CPLD分部连接法CPLD是大规模逻辑器件,对于LPC210X的复杂应用显得非常重要,笔者的项目是用它来扩展外部接口的,LCD应用只是其中一部分,连接图如图3所示。共占用9线,为说明方便,也选用了连续的GPIO口。该方法把一个字节字模分成高4位和低4位,分别通过P0.0~P0.3传送。在CPLD里设计一个4位锁存器,当高4位传送完毕后,锁存器进行锁存,然后发送低4位,接着由P0.4选通锁存器,将8位数据同时送出,这样节省了4个GPIO口;另外由P0.5通过CPLD直接控制CS1和CS2,也节省了1个GPIO口。LPC210X程序参照方法1很容易写出,只是注意这里是分两次、每次4位传送,以及每次传送要改变P0.4的状态。CPLD采用了Xilinx XC9500系列的XC9572,程序用Verilog-HDL语言编写,其中数据分部传送程序设计如下:module latch(out_high,out_low,data,enable);定义模块latchoutput[30]out_high; 定义输出口高4位output[30]out_low; 定义输出口低4位input enable; 定义锁存选通信号reg[30]out_high;reg[30]out_low;reg[30]lock; 定义锁存寄存器always@(enable or data)begin if(!enable)低电平锁存lock=data;else高电平开通锁存,输出8位beginout_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系列控制器开放了外部总线,相信当这款芯片推出后,必将得到更多的关注。-ARM微控制器LPC210X的LCD接口技术摘要:本文分别以GPI0口直接连接、串行转换连接、CPLD分部连接三种方法阐述了无外部总线的PhilipsARM微控制器LPC210X与点阵图形液晶显示器的接口设计,并给出硬件电路框图和主要程序。关键词:ARM LPC210X LCD接口串并转换CPLD引言Philips最近推出了其第一款基于ARM内核的控制器LPC210X,但由于LPC210X外部总线不开放,无法扩展内存、驱动液晶显示器等,给它的推广带来了一定的影响。笔者最近在一工控板项目中采用了该系列芯片,项目后斯应客户要求需对几个参量进行显示并扩展键盘,不得已之下,采用了CPLD,并利用了GPIO口模拟总线和液晶时序与点阵图形液日模块HS12864-16建立了连接。下面详细探讨包括该种连接的三种接口方式。1LPC210X的GPI0口和HS12864-16A介绍LPC210X控制器包含LPC2104、LPC2105、LPC2106,除了片内静态RAM不同外,其他完全相同。该系列器件具有32个GPIO口(P0.0~P0.31),没有外部总线,大多GPIO口是复用口,所以它一般不适合连接大屏幕液晶显示器,但驱动小规模液晶模块进行工业控制上的参量显示还是非常合适的。GPIO包含四个寄存器,如表1所列。表1配置GPI0口的四个寄存器|名称|地址|描述||IOPIN|0xE0028000|引脚值寄存器,引脚当前状态都从该寄存器||| |读出||IOSET|
ARM微控制器LPC210X的LCD接口技术
用户评论
推荐下载
-
ARM微控制器LPC210X的LCD接口技术千锋培训
文档介绍了引言,1 LPC210X的GPI0口和HS12864-16A介绍,表1 配置GPI0口的四个寄存器,表2 HS12864-16A引脚525252,2 三种接口设计,2.1 直接连接法,2.2
5 2020-08-22 -
LPC210X源代码
力天 LPC210x 学习板 源代码
20 2019-01-14 -
LPC210x读写SD卡
LPC210x read and write SD card
29 2019-06-24 -
周立功LPC210X的基础GPIO实验
周立功LPC210X的基础实验,适合初学ARM者学习用
32 2020-01-04 -
第10课LPC210x的中断.pdf
LPC2103有三个外部中断源。分别是外部中断0(EINT0),外部中断1(EINT1), 外部中断2(EINT2)。另外LPC2103的10个捕获输入也可以作为外部中断输入, 跟外部中断丌同之处就是
11 2020-07-25 -
LPC2200系列ARM微控制器工程模板
LPC2200工程模板应用,简化ARM编程工作量
46 2018-12-25 -
LPC210421052106ARM微控制器元件封装库
LPC210421052106ARM微控制器元件封装库LPC210421052106ARM微控制器元件封装库LPC210421052106ARM微控制器元件封装库LPC210421052106ARM微
47 2019-07-19 -
ARM微控制器基础
该课件是有关ARM微控制器基础与实战的资料.
25 2019-06-05 -
LPC210X定时器使用方法
LPC210X 定时器使用方法,LPC210X 定时器使用方法,供工程师学习和参考。
31 2019-01-14 -
力天电子入门LPC210X例程代码
力天电子入门LPC210X例程代码,可和arm LPC2103入门级视频配套使用。
12 2020-10-01
暂无评论