当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]液晶和矩阵键盘SOPC外设组件设计开发

摘要:本文利用NiosII软核设计LCD和矩阵键盘接口,以中断代替查询完成对矩阵键盘的控制;设计点阵型LCD与NiosII的接口,实现对LCD中英文显示的支持。矩阵键盘控制和LCD接口均做成自定义外设组件,可重用、便于移植,体现了SOPC技术设计的优势。

引言

Altera 公司在其FPGA 中实现的Nios/NiosII 软核是最近几年提出的SOPC(System ON a Programmable Chip,片上可编程系统)技术的应用代表,核心是在FPGA 上实现软硬件资 源可编程、可配置、可裁减、可升级的系统。本文以NiosII 可重编程、可重配置用户外设 组件的方法为指导,结合PDA 项目设计需要,设计制作了LCD 和矩阵键盘到FPGA 的接 口,提出一种新的矩阵键盘和LCD 中英文二级字库显示的嵌入式实现方法,克服传统矩阵 键盘软件设计麻烦且浪费CPU系统资源等缺点,降低系统中LCD支持中英文字显示的成本、 功耗和控制复杂度,并且实现的组件和驱动程序具有可重用、便于移植等优点。

1. LCD 和矩阵键盘模组的硬件设计

本文采用的点阵型 LCD HY-12864E,分辨率为128×64,可显示16×16 的汉字32 个, 16×8 的英文字符64 个,还支持图形显示。LCD 内部集成两块HD61202 液晶控制器分别控 制LCD 的左右半屏,HD61202 接口及功能如表1 所示。

HY-12864E 的接口信号可以很方便地连接到NiosII 开发板的FPGA 引脚上,外部需要 5V 单电源供电,内部集成电压变换电路产生-10V 电压VEE,VEE 通过10K 欧可调电阻连 接到LCD 的Vo 端口提供负压控制点阵显示的亮度。由于FPGA 的IO 信号是3.3V 电平, 为了和LCD 的5V 电平对接,使用了总线收发芯片SN74LS245 作缓冲处理。

矩阵键盘的电路比较简单,4×4 的按键有横竖各四根信号线。每行信号线与按键的一端 相连,并且使用上拉电阻接到3.3V 电源上,同时使用0.1u 法的去耦电容消除按键抖动;每 列信号线与按键的另一端相连。电路原理图如图1 所示。

 

 

图 1 点阵型LCD 和矩阵键盘电路原理图

2. 矩阵键盘的驱动控制设计与软件编程

传统矩阵键盘使用软件驱动控制,即在程序中循环扫描查询键盘的状态,以判断是否有 键按下,这种方法耗费CPU 资源,而且查询扫描结果可能出现误码。这里提出一种新的用 硬件描述语言在FPGA 中实现矩阵键盘控制的方法:使用时序电路扫描查询键盘,在发现 键按下的时候给出相应的键码和中断信号,以中断的方式处理按键。矩阵键盘扫描分4 个时 序,在每一个时序IOA14-IOA11 端口分别输出1110、1101、1011、0111 扫描码,分别控制 一列按键接地,在每个时序查询IOA10-IOA7 端口。程序设计的流程如图2 所示。

 

 

图 2 矩阵键盘扫描流程图

最后,键盘控制程序封装为参数可配置的用户自定义外设组件,可以在SOPC Builder 中直接添加使用。矩阵键盘组件的各个配置参数的说明如表2 所示。

表2 矩阵键盘组件参数说明

 

 

实测矩阵键盘一次按键接触时长约为 150ms 左右。因此要求150ms 内完成连续4 个时 序的全扫描,避免出现按键检测不到的情况;同时要求锁定延时超过150ms,避免误判连击。 设定64ms 完成一次全扫描,锁定延时为256ms,默认连续4 次确认查询码不为1111 为按键 有效,时钟输入为50MHz,因此DIV_clk=25000(分频得到1ms 时基)、DIV_cycle=8(时 序长为16ms)、Delay=256(锁定延时256ms)、N=4。组件在NiosII 工程的接口如图3 所示。

 

 

图3 NiosII 工程中矩阵键盘和LCD 组件接口图

最后在 NiosII IDE 中设计矩阵键盘的驱动程序,安装键盘按键中断,编写按键的中断服 务程序,通过按键中断可以获取相应按键的键盘码。例程如下:

/* 初始化键盘中断 */ // enable the interrupt

IOWR_Altera_AVALON_PIO_IRQ_MASK(KEY _BOARD_IRQ _BASE,0xf);

// reset irq edge regiSTers

IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY _BOARD_IRQ _BASE,0x0);

// active the irq server when irq generate

alt_irq_register(KEY_BOARD_IRQ _IRQ,edge_cap_ptr,key_irq_handle);

/* 中断服务程序 */ //capture the irq edge change

*key_edge=IORD_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BOARD_IRQ _BASE);

// read the key board code

key_code=IORD_ALTERA_AVALON_PIO_DATA(KEY_BOARD_4x4_BASE);

// reset irq edge registers

IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BOARD_IRQ _BASE,0x0);

3. LCD 组件设计及中英文显示的实现

考虑 LCD 控制器HD61202 的读写时序,这里将Avalon 总线从端口到LCD 的接口转换 电路,封装为用户外设组件添加到NiosII 工程中,如图3 所示。LCD 接口组件的读写信号 LCD_E 由从端口读有效lcd_rd_n 和写有效lcd_wr_n 与非产生,Avalon 从端口采用三位地址 线lcd_addr[2..0],如表3 所示设置从端口与LCD 接口信号的连接。

表 3:Avalon 从端口地址线与LCD 信号的连接

 

 

基于 VGA 的中英文字库HZK16(16×16)和ASC16(16×8)可以从网上下载,但还不 能直接作为LCD 的中英文字库。中英文字在VGA 中是按照其内码到字库里查询到相应的 字模(一个16×8 英文字模是16 字节的数据,一个16×16 汉字模是32 字节的数据),将字 模数据一个字节一个字节地按行显示。而在LCD HY-12864E 中,字模的一个字节按列显示, 因而要对字库数据先作行列变换再作高低位置换才能在LCD 上正常显示,如图4 所示。[!--empirenews.page--]

 

 

图 4 VGA 和HY-12864E 字模显示示意图

变换后的字库文件HZK16_lcd.bin 和ASC16_lcd.bin 通过Nios II Command Shell 的命令 bin2flash 转换为.Flash 文件后就可以下载到NiosII 开发板中Flash 特定位置,供中英文显示 时字模查询使用,假定Flash 大小是2Mbytes,起始地址是0x0,方法如下:

bin2flash--location=0x100000--input=HZK16_lcd.bin --output=HZK16_lcd.flash

bin2flash --location=0x10ffff --input=ASC16_lcd.bin --output=ASC16_lcd.flash

nios2-flash-programmer --base=0x0 HZK16_lcd.flash(中文字库下载到Flash 的0x100000 位置)

nios2-flash-programmer --base=0x0 ASC16_lcd.flash (英文字库下载到Flash 的0x10ffff 位置)

由于 LCD 是接在Avalon 总线的从端口上的,在完成LCD 用户组件时使用的地址映射 (Slave Addressing)是memory 方式,这种方式可以支持一个字节(8bits)宽度的数据访问, 而LCD 的数据宽度也是一个字节,因此可以使用IOWR_8DIRECT(BASE,OFFSET,DATA) 和IORD_8DIRECT(BASE,OFFSET)函数完成对LCD 的写、读操作,根据前面地址线的连 接定义,我们可以定义对LCD 的操作函数如表4 所示。

表 4:LCD 的读写操作函数定义

 

 

这里的 LCD_HY12864_BASE 为LCD 在NiosII 软核中的基地址。HD61202 控制器通过写相 应的命令控制LCD 显示的开关、起始行号、操作的行地址列地址等,通过读状态获得LCD 的工作信息,通过读/写数据指令读出写入RAM 中的数据。在这些基本的LCD 读写函数上, 定义LCD 操作的宏参数,编写一些对LCD 的操作函数:LCD 初始化函数、清行函数、置行函 数、显示一行中英文的函数等。其中显示一行中英文流程如图5 所示。

 

 

图 5 中英文显示流程图

4. 本文创新点

最后经过测试,矩阵键盘按键中断响应准确无误,由于扫描的过程由硬件实现,不占用 CPU 资源,大大提高了系统的性能。LCD 可以接收任意中英文的输入显示。在开发设计过 程中,矩阵键盘和LCD 接口均封装为用户自定义外设组件,加入SOPC Builder 的元件库中, 可以很方便地在其他系统中根据实际情况添加使用,二者的驱动程序也可以很方便地移植到 其他工程设计中,体现出了SOPC 片上可编程系统灵活、方便、可重用的优势。本文设计的 矩阵键盘和LCD 成功应用到笔者设计的PDA 项目中。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭