液晶和矩阵键盘SOPC外设组件设计开发
端口读有效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 所示。
图 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 项目中。
组件 设计开发 外设 SOPC 矩阵 键盘 液晶 相关文章:
- 嵌入式组件技术的研究及应用(08-21)
- 基于Petri网的嵌入式软件组件的实时性研究(03-21)
- EMC设计基础知识:PCB上被动组件的隐藏行为和特性分析(10-29)
- 使用.NET2.0 编写COM组件供Visual Basic调用(09-12)
- 基于C8051F410单片机的光纤传输组件设计(08-22)
- 手机接口电路板组件测试计算机视觉系统(05-03)