1目录第一章设计指标……………………………………...…………………………21.1设计指标……………………………………………………………………21.2硬件环境……………………………………………………………………2第二章系统概述……………………………………..…………………………22.1设计思想…………………………………………………………..…………22.2可行性论证…………………………………………….……………………42.3各功能的组成…………………………………………………………………42.4总体工作过程…………………………………………………………………5第三章单元电路设计与分析……………………………………………………63.1各单元电路的选择……………………………………………………………63.2设计及工作原理分析…………………………………………………………7第四章电路的组构与调试…………………………………...…………………164.1遇到的主要问题…………………………………………………..…………164.2现象记录及原因分析…………………………………………….…………164.3解决措施及效果……………………………………………………………164.4功能的测试方法、步骤、设备、记录的数据………………………………16第五章结束语……………………………………………………………………175.1对设计题目的结论性意见及进一步改进的意向说明…………..…………175.2总结设计的收获与体会………………………………………….…………18附图(电路总图)……………………………………………………………………18参考文献……………………………………………………………………………202第一章、设计指标1.1设计指标设计一个按键阵列判断电路,采用发光二极管点阵显示器以12个显示符标识12个按键。当有健按下时,显示其标识符,并保持显示符直到新的按键作用。如果多个按键同时闭合,只响应最先作用的按键。1.2硬件环境设计对象的实现环境与采用的FPGA开发装置有关,本节以LP—2900为例,说明采用按键阵列扫描和点阵显示器控制电路的设计原理和实现方法。LP—2900开发装置上有“0~9”、“*”、“#”共12个键构成的3行4列按键阵列以及8行8列64个点的点阵显示器。FPGA通过端口RK1~RK3读取键阵列的行线状态X0~X2;通过3—8线译码器控制键阵列的列线Y0~Y3。74138的译码输入由FPGA端口DE3~DE1控制。点阵显示器各行由FPGA的端口ROW1~ROW8控制,点阵显示器各列由FPGA端口C1~C8通过反相器控制,以满足电流驱动能力。第二章、系统概述2.1设计思想1.按键扫描原理数字电路中,按键的闭合和断开状态可以通过其控制的逻辑电平判断。(1)按键状态判断3按键的闭合断开可以转换成代表0或1的二值逻辑的低电平和高电平,判断电路输出的电平即可了解按键的通、断状态。按键一般为机械开关,其触点的合、断有弹性抖动。为了保证按键动作一次,电路只判断到一次电平状态的改变,需要采用消抖动措施。采用基本RS触发器可以对电平信号整形,实现消抖。(2)按键阵列判断若需要判断的按键较多,为节省信号端口资源,一般将按键分成行、列两组连接成阵列形式。每个按键跨接在一条行线和一条列线间。当按键闭合时,行线与列线接通。每条行线都通过一个电阻上拉到+5V电位,当行线上的所有按键都未闭合时,行线一定为高电平。当某条列线为低电平是,根据各行线的电平可判断该列线上各键的状态。(3)按键扫描判断若以负脉冲扫描序列信号控制键阵列的列线,使各列线分时为低电平,同时顺序判断各行线电平,就能逐个确定各键状态。显然,每个按键的扫描时间是列线的低电平时间,而阵列的扫描周期是按键扫描时间乘以键数。所以,按键的闭合时间必须大于阵列扫描周期,否则闭合状态可能会被遗漏。比如,当阵列为16个键时,如果每个键的扫描时间是10ms,则键的闭合时间必须大于0.16s。按键的闭合时间因人的动作快慢而异,通常为零点几秒至一点几秒。2.发光二极管点阵显示原理点阵显示电路是由发光二极管组成的阵列。每一行发光二极管的阳极接在一4起,由行信号ROWi控制;每一列发光二极管的阴阳极接在一起,由列信号Cj驱动。如果把发光二极管阵列的每一行看做一个8段共阳显示器,ROWi为阳极公共端,每一列Cj就是显示器的一个段,低电平有效。这样,8*8点阵显示电路与8位动态扫描共阳显示电路的结构完全相同,当行扫描信号为高电平时,列信号的低电平可以控制该行各列的发光管亮。比如,当ROW1为高电平时,若列信号C1~C8为“01111110”,则ROW1行第一和最末的发光管灭,其他6个亮。同理,若把发光二极管阵列的每一列看做一个8段共阴显示器,Cj为阴极公共端,8*8点阵显示电路就与8位动态扫描共阴显示电路的结构相同。由于LP—2900开发装置上点阵显示器的列信号通过反相器驱动,所以其FPGA的列控制逻辑为高电平有效,即当ROWi、Cj都为“1”时,第i行、第j列的发光二极管亮。根据动态扫描显示控制的原理,如果采用一个计数器顺序产生8路行扫描信号RW1~RW8,同时根据各行发光二极管的显示要求同步控制列信号,当扫描计数频率足够高时,点阵显示的效果为一个稳定的字符。2.2可行性论证该设计方案在理论上是可行的。按键扫描部分由状态机A提供各个扫描信号,用ROM实现代码转换功能,发光二极管点阵显示电路由3位二进制数控制行扫描信号,同时控制列显示码同步循环输出,即可显示预设的字符。2.3各功能的组成5根据按键阵列的判断原理,可采用一个计数器产生按键编码信号。计数器的脉冲周期等于按键的扫描时间,计数器的模M大于等于被扫描的按键数N。本设计要求判断12个按键的阵列,所以可采用4位二进制计数器产生按键扫描码。计数器输出控制译码器产生列扫描信号Y0~Y3,并控制数据选择器选择行线电平Xi。当被扫描的按键闭合时,选择器的输出信号控制寄存器保存计数器当前的键码状态,同时封锁计数器停止键扫描,以避免其他按键闭合时产生的影响。发光二极管点阵电路采用3位二进制计数器译码后扫描控制其行(列)信号ROWi(Cj),同时控制列(行)显示码同步循环输出。所以,必须设计一个译码逻辑元件,根据寄存器保存的按键编码输出键符显示列(行)控制码。键符显示译码器可采用AHDL真值表方式、组合逻辑器件或只读存储器ROM来实现。2.4总体工作过程1.按键编码计数器A输出4位二进制码Q3~Q0,每组码通过译码器A产生一列低电平有效的列信号,同时通过数据选择器选中一个行线信号判断连接该列、该行的按键状态。当数据选择器输出低电平时,表示被扫描键闭合。所以,计数器输出的二进制码与阵列中的按键一一对应。显然,按键的编码位序与计数器的输出控制有关。若计数器的高两位输出Q3、Q2控制选择信号B1和B0,低两位输出Q1、Q0控制译码信号A1和A0,则计数器输出为“0001”时,Y0为低电平,选择输出X1的状态,扫描按键S2。因此,“0001”为S2的键码。2.键符显示码存储6由于ROM的数据输出控制点阵的列信号C1~C8,因此ROM中每个存储单元的数据就是一行列控制码,每位数据控制一列。一个显示符的8行控制需要8个单元的列码数据,12个不同的键符显示需要96个存储单元,这样显示译码存储器至少需要7位地址。如果ROM的高4位地址A6~A3由键码Q3~Q0控制,低3位地址A2~A0由行扫描计数器B控制,每个显示符的8行列控制码被存放在以键码划分块的连续8个存储单元中。建立存储数据文件时要注意数据位序与点阵序列的关系以及存储单元低3位地址与点阵行序的关系。比如,若存储器的数据输出D7~D0依序控制C1~C8,则数据码从高至低位分别对应点阵显示器的从左至右列。如果状态机B的输出与译码器B的输入及存储器低3位地址的位序对应相同,当译码器B的输出Y0~Y7依序控制ROW1~ROW8时,每个字符码的8个存储单元从低地址到高地址分别对应点阵显示器从上至下各行。7第三章单元电路设计与分析3.1各单元电路的选择1.分频器分频器提供固定的频率输出,用以控制整个电子系统的时钟。分频器由7片二五—十进制计数器7490组合完成,每级为十分频,共输出10MHZ~1HZ共8档频率信号,输入为FPGA的石英晶振提供的10MHZ的频率。2.状态机整个系统共包含2个状态机,即计数器,由1片16进制计数器74161构成。状态机A用于按键阵列选择,状态机B提供行扫描的频率。3.寄存器寄存器用来保存由按键阵列选择的存储器地址的高4位,由8位锁存器74377构成。4.显示码存储器存储器由自行设计的128*8ROM构成,每个单元存8位,共8根输出数据线。5.数据选择器数据选择选用双片集成4选1数据选择器73153,用于选择按键阵列的行信号。86.译码器译码器采用3—8线译码器74138,配合状态机实现逐行扫描功能。7.反相选择器反相选择器用来选择输出点阵的颜色是否取反相,由组合逻辑门实现。外接电平控制输入信号,用于控制正相或反相。8.颜色选择器颜色选择器是用来选择FPGA的点阵显示器亮红灯或绿灯的器件,由8片74138构成,外接电平控制输入信号,用于选择颜色。3.2设计及工作原理分析1.分频器一片10进制计数器可以完成一个时钟信号的10分频,如果使用7片完成级联,即可做到10^7分频。7490为二五—十进制计数器,其中输入CLK1,输出QA为二进制计数器;输入CLK2,输出QCQBQA为5进制计数器。CLRA,CLRB为异步复位端,SET9A,SET9A为异步置9端,均为高电平有效。要实现10分频有两种接法,第一种是外部输入时钟信号进CLKA,然后输出QA接输入CLKB,另一种是外部输入时钟信号进CLKB,然后输出QD接输入CLKA。两种接法的区别在于:第一种接法使用QD作为每一级分频的输出端,这种输出时钟的占空比为20%,而第二种接法使用QA作为输出时钟信号,这种时钟信号的占空比为50%,所以我选择第二种接法。9102.状态机本系统总共使用了两个状态机,状态机A位于分频器之后,寄存器之前,在分频器的输出时钟信号的控制下,不断改变状态,当某一状态与按键阵列某一按键所对应的行列控制信号相同时,便将该状态保持并送入寄存器。状态机A用单片74161构成,复位端CLRN和置数端LDN都接高电平,使之无效,ENP与ENT均由数据选择器的输出Y控制,当Y为低电平时,便保持当前状态停止计数。CLK接分频器的输出端,由于无需置数,所以ABCD四端口断开。状态机B也是单片74161,由分频器选择某一频率输入,使能ENP与ENT均接高电平有效,复位端CLRN和置数端LDN都接高电平,使之无效。输出只取QCQBQA组成的8种状态控制8个行扫描信号。VCCENINPUTVCCCP1INPUTQ1OUTPUTQ2OUTPUTQ3OUTPUTQ4OUTPUTCOUNTERCLRNCLKENPLDNADENTBCQDQCQBQARCO74161instVCC3.寄存器寄存器用于暂时存放状态机A的输出信号,然后将它传入存储器。我用74377作为寄存器,该芯片共可存8位,我只用其中4位,其锁存端LD为下跳变有效,所以输入端G(CLK)需接一反相器再连接到数据选择器的输出端Y上。11VCCLDINPUTVCCI0INPUTVCCI1INPUTVCCI2INPUTVCCI3INPUTO0OUTPUTO1OUTPUTO2OUTPUTO3OUTPUTOCTALDFFD8D7CLKD2END1D6D3D4D5Q8Q7Q6Q5Q4Q3Q1Q274377instGNDNOTinst24.显示码存储器显示码存储器由自定义ROM完成。由于一共有12个按键,每一个按键共包含8*8,64位二进制数表示的信息。我们将8位二进制数作为一个内存单元,则共需要96个单元,所以采用128*8的ROM。其输入为7位地址信号,输出为8位数据信号。VCCA0INPUTVCCA1INPUTVCCA2INPUTVCC