本文提出了一种针对lcd控制器和矩阵键盘的ip核的设计方法。该方法利用sopc builder中元件编辑器create new component,通过自定义逻辑方法在sopc设计中添加自己开发的液晶显示模块和键盘ip核。该控制器具有avalon总线接口,可与其它标准ip 核一起构成以niosⅱ为核心的片上系统,并可编写驱动程序。
niosⅱ是altera公司推出的第二代ip软核处理器。它与其他ip核可构成sopc系统的主要部分。altera sopc builder提供有niosⅱ处理器及一些常用外设接口,因此,对于一些库中没有提供的模块,用户就可以自己定义添加。用户还可以通过自定义逻辑方法在 sopc设计中添加自己开发的ip核。而定制用户逻辑外设是使用niosⅱ嵌入式软核处理器的sopc系统的重要特性之一。
1 键盘和显示电路的硬件设计
键盘采用4×4行列式键盘,其4根行输入线key0~key3和4根列输出线keyscan0~keyscan3与键盘接口电路相连,每行信号线使用上拉电阻接到3.3 v电源上。液晶显示采用的是thsl2864-12显示模块。hsl2864-12是一种图形点阵液晶显示器,液晶显示屏为128×64点阵,可显示4 行,每行显示8个汉字,该模块具有2mb的中文字型rom,可提供8192个16×16点阵中文字型。同时,为了便于英文和其它常用字符显示,它还具有 16 kb半宽字型rom,提供有128个16×8点阵的字母符号字型;另外,绘图显示画面还可提供一个64×256点阵的绘图区域(gdram)及240点的 iconram,可以和文字、画面混合显示,其内含的cgram可提供4组软件可编程的16×16点阵造字功能。其键盘电路和显示模块接口电路如图1所示。
2 键盘扫描电路的程序设计
行列式键盘又叫矩阵式键盘,它用带有i/o口的线组成行列结构,按键设置在行列的交点上。传统矩阵键盘大多使用软件驱动控制,即在程序中循环扫描查询键盘的状态,以判断是否有键按下,这种方法比较耗费cpu资源,而且查询扫描结果可能出现误码。本文提出了一种新的用硬件描述语言在fpga中实现矩阵键盘控制的方法。该方法使用时序电路扫描查询键盘,在发现键按下的时候,可给出相应的键码和中断信号,并以中断的方式处理按键。矩阵键盘扫描分4个时序,在每一个时序,key0~key3(四根行线线)端口分别输出1110、1101、1011、0111扫描码,并分别控制一列按键接地,同时在每个时序查询 keyscan0~keyscan3(四根列线)端口。
图2所示是一种4×4行列结构的键盘扫描电路,它由分频器电路、键盘扫描计数电路、键盘行(row)列(col)按键检测电路、按键抖动消除电路、键盘编码电路等组成。
设计好键盘的硬件控制程序以后,键盘控制程序可封装为参数可配置的用户自定义外设组件,以在sopcbuilder中直接添加使用。完成keys器件的加入后,keys器件就会出现在sopcbuilder的组件选择栏的“user logic”项目下,最后在niosⅱide中设计矩阵键盘的驱动程序,安装键盘按键中断,编写按键中断服务程序,从而通过按键中断获取相应按键的键盘码。其例程如下:
/*初始化键盘中断*/
3 lcd显示模块的程序设计
在niosⅱ和lcd的接口中,一方面可以通过在niosⅱ系统中添加相应i/o口的方式来实现对液晶显示屏lcd的间接控制,另一方面也可以利用构建 ip核来直接进行控制。第一种是将lcd接口当作普通的外部设备pio进行操作,lcd的数据以及读、写使能、片选信号等都包括在pio总线内;第二种是在sopc builder中自己定义eomponent,并把液晶显示模块看成外部存储器,直接做成avalon总线slave设备。
第一种方法在硬件工程中,需要设计与外设相连的i/o接口;而在软件工程中,需要用户编写相应的接口程序对外设进行初始化,设置相应的外设寄存器。在每次新建一个工程后,这样的工作都得重复进行,因而会增加开发成本。第二种方案需要写hdl模块,自己定义控制状态、数据寄存器和控制位,这种方式控制灵活,易于实现复杂的控制时序,而且一旦自定义设备成功后,就可以像使用其他设备一样来使用这些设备。用户也可以将这些设备共享给其他的使用者,这样就大大减少了重复工作。本设计中采用第二种方法。
在altera sopc builder中双击create newcomponent,打开component窗口,并在hdl files标签下添加lcd硬件描述语言编写的文件(该文件描述了组件与avalon总线的接口以及组件与液晶屏的接口),系统编辑器就会立即自动对文件进行分析,并从文件中读i/o信号和参数信息。lcd 12864自定义逻辑信号如图3所示。
完成lcd_12864器件的加入后,lcd_12864器件就会出现在sopc builder的组件选择栏的“user logic”项目下。图4所示是lcd模块的管脚分配图。
lcd模块的初始化就是对lcd进行模式设置。由于sopc builder中的lcdl2864控制模块已经考虑了lcd的读写时序,所以使用niosⅱide进行lcd驱动和控制时只需对lcd进行初始化。其部分初始化子程序如下:
之后,打开niosⅱide,创建软件工程,编写test程序,即可测试验证液晶模块的显示结果。其中部分程序如下:
4 结束语
本设计最后经过测试证明,矩阵键盘按键中断响应准确无误。由于其扫描过程由硬件实现,无需占用cpu资源,故可大大提高系统的性能,lcd可以接收任意中英文的输入显示。在开发设计过程中,矩阵键盘和lcd接口均封装为用户自定义的外设组件加入sopcbuilder的元件库中,因而可以很方便地在其他系统中根据实际情况添加使用。用户也可以将这些设备共享给其他的使用者,这样就大大减少了重复工作。与其他方法相比,该方法无疑是一种更高效、灵活和低成本的开发方法,同时体现出了sopc片上可编程系统的灵活、方便、可重用的优势。
LED电平指示器电路原理
车用以太网或将成实现ADAS及自动驾驶关键
iButton的工作原理及其特点
“5G网络+远程医疗”势头渐涨,远程医疗该如何顺应潮流?
基于LM317的12伏电池充电器电路
基于LCD控制器的键盘和显示电路的硬件设计
【节能学院】安科瑞电气火灾监控系统在中电海康总部基地建设项目的设计与应用
什么是消费者真正需要的物联网产品
怎样使用隔离运算放大器构建电源环路补偿呢?
区块链技术将如何应对量子计算的威胁
低压开关柜组成_低压开关柜的工作原理
如何选购对讲机?
LG中央空调一路高歌猛进 营销渠道迅速覆盖全国
KD、KF系列控制器成品与阻焊机上的主可控硅应如何连接
预计全球半导体市场二季度的营收环比可能下滑5%
Vishay推出全新全集成接近传感器
2022哪款充电宝质量好?2022充电宝排行
瑞萨电子宣布,扩大其IP授权范围,使设计人员能够满足客户定制需求
英威腾中标广电UPS塔式高频机项目 国民技术获“卓越贡献奖”
一种适用于汽车无线电系统AM和FM波段的低噪声开关电源详解