键盘驱动程序键盘驱动程序摘要键盘上的每一个键都有两个唯一的数值进行标志为什么要用两个数值而不是一个数值呢?这是因为一个键可以被按下,也可以被释放当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道它是被按下还是被释放了这些数值在系统中被称为键盘扫描码本课程设计目的旨在使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35开发板PS2键盘接口等资源,实现一个键盘驱动程序以达到外接键盘按键的选择、8位动态七段数码管实现按键扫描码显示和16*16点阵实现按键字符显示的目的关键词:键盘;扫描码;数码管目录1 绪论 12 系统设计 22.1 总体设计 22.2 八位七段数码管显示模块 32.3 16*16点阵显示模块 42.4 键盘扫描模块 52.5 动态扫描模块 73 程序设计 93.1 流程 93.2 八位七段数码管显示程序 93.3 16*16点阵显示程序 103.4 键盘扫描程序 113.5 动态扫描程序 114 总结 124.1 遇到的问题及解决 124.2 扩展设想 124.3 心得与体会 13参考文献 14附录 15附录A 八位七段数码管显示程序 15附录B 16*16点阵显示程序 18附录C 键盘扫描程序 28附录D 动态扫描程序 30附录E 总电路图 321 绪论EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度本课程设计目的旨在使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35开发板PS2键盘接口等资源,实现一个键盘驱动程序以达到外接键盘按键的选择、8位动态七段数码管实现按键扫描码显示和16*16点阵实现按键字符显示的目的。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成2 系统设计VHDL语言是一种用于电路设计的高级语言它在80年代的后期出现最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 VHDL主要用于描述数字系统的结构,行为,功能和接口除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体这种将设计实体分成内外部分的概念是VHDL系统设计的基本点与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证本文利用模块化思想将整个设计分为八位七段数码管显示、16*16点阵显示和键盘扫描等模块,以达到键盘扫描码的显示2.1 总体设计在本课程设计中要求利用外接键盘实现键盘按键的选择,在8位动态七段数码管上实现按键扫描码的显示,在16*16点阵上实现按键字符的显示设计中采用模块化,用键盘扫描输出端作为数据总线来对整个程序控制,各模块共一个系统时钟,数字信号源模块的时钟选择为1MHZPS2键盘采用是键盘内部的时钟其总体设计如下图2.1所示 图2.1 系统总体设计2.2 八位七段数码管显示模块八位七段数码管是电子开发过程中常用的输出显示设备在实验系统中使用的是两个四位一体、共阴极型七段数码管由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮反之则不亮共阳极性的数码管与之相么四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。
其单个静态数码管如下图2.2所示,数码管显示模块的电路原理如图2.3所示图2.2 静态七段数码管图2.3 数码管显示电路原理2.3 16*16点阵显示模块16*16点阵由此256个LED通过排列组合而形成16行*16列的一个矩阵式的LED阵列,俗称16*16点阵单个的LED的电路如下图2.4所示图2.4 单个LED电路图由上图可知,对于单个LED的电路图当Rn输入一个高电平,同时Cn输入一个低电平时,电路形成一个回路,LED发光也就是LED点阵对应的这个点被点亮16*16点阵也就是由16行和16列的LED组成,其中每一行的所有16个LED的Rn端并联在一起,每一列的所有16个LED的Cn端并联在一起通过给Rn输入一个高电平,也就相当于给这一列所有LED输入了一个高电平,这时只要某个LED的Cn端输入一个低电平时,对应的LED就会被点亮具体的电路如下图2.5所示图2.5 16*16点阵电路原理图16*16点阵的电路原理在前面已经做了详尽的说明,在此实验中,16*16点阵由4个8*8点阵组成,考虑到LED电流功耗与FPGA电流功耗的关系,在实验的电路中加入驱动电路具体电路如下图2.6所示。
图2.6 16*16点阵电路图2.4 键盘扫描模块PS2通信协议是一种双向同步串行通迅协议通迅的两端通过CLOCK(时钟信号端)同步,并通过DATA(数据端口)交换数据任何一方如果想要抑制另外一方的通迅时,只需要把CLOCK拉到低电平PS2控制接口仅使用到两条传输端口,一为频率端口,另一则为数据端口如图2.7所示,且此传输埠必为三态(Tri-State)并具有双向(bidirectional)特性PS2 传输产品上,常见为鼠标与键盘,两者的驱动原理均相同,仅扫描码(scan code)不同因此我们以PS2键盘为例进行说明Male (Plug)Female (Socket)6-pin Mini-DIN (PS2): 1 - Data 2 - Not Implemented 3 - Ground 4 - Vcc (+5V) 5 - Clock 6 - Not Implemented图2.7 PS2 端口脚位定义键盘其实就是一个大型的按键矩阵,它们由安装在电路板上的处理器(叫做“键盘编码器”)来监视着虽然不同的键盘可能采用不同的处理器,但是它们完成的任务都是一样的,即监视哪些按键被按下,哪些按键被释放了,并将这些信息传送到主机。
如果有必要,处理器处理所有的去抖动,并在它的16字节的缓冲区里缓冲数据主机端包含了一个“键盘控制器”与键盘处理器进行通讯,并解码来自键盘处理器的信息,然后高速系统当前按键对应的处理事情主机与键盘之间的通讯仍旧采用IBM的协议键盘处理器花费很多时间来扫描或监视按键矩阵如果发现有按键按下、释放或长按,键盘就发送“扫描码”的信息到主机扫描码有两种不同的类型:“通码”和“断码”当一个键被按下去或长按的时候,键盘就发送通码;当一个键被释放的时候,键盘就发送断码每个键盘被分配了唯一的通码和断码,这样主机通过查找唯一的扫描码就可以确定是哪个按键被按下或释放每个键一整套的通断码组成了“扫描码集”,现在所有的键盘都采用第二套扫描码由于没有一个简单的公式可以计算扫描码,所以要知道某个特定按键的通码和断码,只能采用查表的方法来获得需要特别注意的是,按键的通码值表示键盘上的一个按键,并不表示印刷在按键上的那个字符,这就意味着通码和ASCII码之间没有任何关联另外,第二套通码都只有一个字节宽,但也有少数“扩展按键”的通码是两字节或四字节宽,这类码的第一个字节总是0xE0与通码一样,每个按键在释放的时候,键盘就会发送一个断码。
每个键也都有它自己的唯一的断码,不过庆幸的是,断码与断码之间存在着必然的联系多数第二套断码有两个字长,它们的第一个字节是0xF0,第二个字节就是对应按键的通码扩展按键的断码通常有三个字节,前两个字节0xE0和0xF0,最后一个字节是这个按键通码的最后一个字节表2-1列出了键盘的扫描码键值通码断码键值通码断码键值通码断码A1CF0,1C946F0,46[54F0,54B32F0,32`0EF0,0EINSERT67F0,67C21F0,21-4EF0,4EHOME6EF0,6ED23F0,23=55F0,55PG UP6FF0,6FE24F0,24\5CF0,5CDELETE64F0,64F2BF0,2BBKSP66F0,66END65F0,65G34F0,34SPACE29F0,29PG DN6DF0,6DH33F0,33TAB0DF0,0DU ARROW63F0,63I43F0,48CAPS14F0,14L ARROW61F0,61J3BF0,3BL SHFT12F0,12D ARROW60F0,60K42F0,42L CTRL11F0,11R ARROW6AF0,6AL4BF0,4BL WIN8BF0,8BNUM76F0,76M3AF0,3A。