ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:198.25KB ,
资源ID:4467487      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4467487.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(华南理工大学数电课程设计.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

华南理工大学数电课程设计.docx

1、华南理工大学数电课程设计课程设计报告书题目:矩阵键盘识别电路的设计 学 院 自动化学院 专 业 自动化控制 学生姓名 学生学号 201330581089 班内序号 9 指导教师 马楚仪 课程编号 135070 课程学分 1学分 起止日期 2015.05 192015.07.03 教师评语教师签名:日期:成绩评定备注课题名称:数字电子技术基础第1章、选题背景在现代电子工业的控制电路中,键盘扫描和显示电路对系统的调试和设置有着重要的作用。随着EDA技术的发展,基于FPGA的扫描键盘因其结构简单能有效防止机械键盘按键抖动带来的数据错误等优点在许多电子设备中都得到了广泛的应用。本课题的内容是设计一个电

2、路来识别4x4矩阵键盘,单独按某个键,数码管显示该键的数字,如J0,显示00,J1,显示01,J15显示15,同时发出发出一音“嘀”同时按两个或以上按键,数码管显示ER,发出一音“嘀”,连续发出“嘟嘟嘟”,直到松开按键,声音关闭。所主要解决的问题是设计电路,通过运用Quartus软件平台生成电路符号,并仿真分析,消除各种存在的问题,直到下载到芯片中通过硬件实现上述所要求的功能。对该系统要求:应具有集成度高、稳定性好、设计灵活和设计效率高等优点。设计指导思想:矩阵键盘识别电路从原理上讲就是一个典型的数字电路,包括组合逻辑电路和时序逻辑电路。设计键盘扫描程序,将程序划分为时序产生模块、键盘扫描模块

3、、键值译码模块,蜂鸣器模块四个模块,时序产生模块为键盘扫描和蜂鸣器模块产生时钟信号,键盘扫描模块采用行扫描法对4*4矩阵键盘进行扫描,键值译码模块将所按键值译码为共阴极8位7段数码管的显示码几个模块组合起来实现键盘扫描的设计要求。第2章、方案论证(设计理念)1设计任务设计任务的设计功能包括:1单独按某个键,数码管显示该键的数字,如J0,显示00,J1,显示01,J15显示15。2 同时按两个或以上按键,显示ER。3单独按某个键,发出一音“嘀”, 同时按两个或以上按键,发出一音“嘀”,连续发出“嘟嘟嘟”,直到松开按键,声音关闭。(1)设计理念:将矩阵键盘识别电路各个功能分成模块来实现,包括分频模

4、块描模块、键值译码模块,蜂鸣器模块四个模块, 在主电路中通过连线实现识别功能。分模块能使电路看起来更有条理,接线更清晰,功能更加可靠,排查错误更简单和更有针对性。2方案论证;一:识别方式:判断键盘上哪个键被按下,可以采用静态译码法或扫描法,静态译码法原理简单,容易理解,但电路复杂,扫描法比较抽象,电路相对简单,通常采用,扫描法又称为逐行或列扫描查询法,它是一种最常用的多按键识别方法。综上,选取扫描方法二:实现方式方案1:采用用门电路和各种寄存器等搭建组合时序电路的方式来实现,可以采用移位寄存器循环扫描信号,并通过数据选择器来判断各种情况,这种方法实现原理简单,但搭电路的时候复杂,接线繁多,尤其

5、是识别两个以上的按键时不灵活,容易漏接错接,且检查错误比较麻烦。方案2:采用用硬件描述语言Verilog hdl来实现,Verilog hdl语言和c语言比较类似,所以上手比较快,因此,虽然之前没接触过该语言,但在做课程设计的这段时间里,用它来实现课程设计所要实现的功能还是可以的。用这种方法的话,程序简单易懂,而且比较简洁,思路比较清晰,尤其在识别两个按键以上的时候优越性特别明显。方案3:采用用硬件描述语言vhdl来实现,与Verilog hdl 相似,但是vhdl的语法比Verilog hdl复杂一点,由于没有学过,对该语言一窍不通。所以该方案不考虑。综上所述,选取方案二。第3章、过程论述1

6、总电路作用:将各个模块串连起来以实现识别电路的功能。图1总电路图输入1kHZ的频率,首先经过分频器成1HZ ,100HZ,250HZ, 500HZ的脉冲,用于驱动蜂鸣器,1kHZ的脉冲进入扫描模块,扫描模块将扫描结果分别送给显示译码器模块和蜂鸣器模块,从而驱动两个led数码管显示结果,只有一个键按下时,蜂鸣器发出一音“嘀”,当同时按两个或以上按键,发出一音“嘀”,连续发出“嘟嘟嘟”。2分频模块作用:在输入脉冲只有11kHZ的情况下,将 1kHZ的脉冲分频成1HZ ,100HZ,250HZ, 500HZ的脉冲,用于驱动蜂鸣器,不同的频率使蜂鸣器发出不同的声音。图2 分频模块电路图图中各成分的作用

7、,和成分之间的交互:输入1kHZ的脉冲,运用7490芯片构成分频电路,当7490的SET9A,SET9B,CLRA.CLRB管脚接低电平CLKA接QD输出管脚,CLKB接输入脉冲,QA输出脉冲,构成十分频电路。依据这样的原理,经过三个十分频即可输出100,1HZ的脉冲信号。分频模块的下部分是用D触发器构成的二分频电路,因此可以分频出500HZ,250HZ的脉冲信号。3扫描模块:作用:判断按键的状态,即识别按键,按照识别结果输出一个按键标志位flag,错误按键标志位flag2,和按键值key_value。图3.扫描模块电路逻辑符号图图4矩阵键盘结构图程序见附录,各成分的作用,和成分之间的交互:扫

8、描流程1、 判断键盘中有无键按下 将全部列线KR0-KR3置低电平然后检测行线KL0-KL3的状态,只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中,若所有行线均为高电平则表示键盘中无键按下。 2、 判断按键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程,其方法是依次将列线置为低电平,即在置某根列线为低电平时,其它线为高电平,例如: KR0 KR1 KR2 KR3 置0111,之后扫描KL端,当J0键按下,则KL0输出为0,其余则为1,即KL3 KL2 KL1 KL0输出为1110,此时就可以判断为J0键被按下,数码管显示01,依

9、此类推,判断其他键。而在一次扫描过程中,当扫描到某列有键按下,即将该列的按键标志置1,在扫描结束后,如果有多列置1,就判断有多个键按下,从而key_value=16,即报错,而在一行之中的最后判断之中,例如KR0-KR3置1110时,当KL3 KL2 KL1 KL0输出至少两个管脚为低电平时,也判断为多个按键按下,即就报错。即识别思想是在一次轮回中,依次将KR0 KR1 KR2 KR3分别置为00000,0111,1011,1101,1101,此次扫描结束才判断扫描结果,判断按键错误的顺序是先列后行。表1按键位置与数码的关系KRKLJ0J1J2J3J4J51110_11101101_11101

10、011_11100111_11101110_11011101_1101J6J7J8J9J10J111011_11010111_11011110_10111101_10111011_10110111_1011J12J3J14J15J16(即报错标志)1110_01111101_01111011_01110111_0111defualt4译码模块作用:将输进来的key_value译码出相应的码给led1,led2显示。程序见附录。图5.译码模块逻辑符号图第4章、结果分析1分频模块Clk输入1KHZ的脉冲信号,分频出500HZ,250HZ,100HZ,1HZ的信号,分析波形结果正确。图6分频模块仿真

11、波形2译码模块当电路输入key_value分别为:00000,00001,00010,00011,00100,00101,00110,00111,01000,01001,01010,01011,01100,01101,01110,01111,10000led1输出:00111111,00111111,00111111,00111111,0011111100111111,00111111,00111111,00111111,00111111,0011000000110000,00110000,00110000,00110000,00110000,01111001led2输出:00111111,0

12、0110000,01011011,01001111,0110011001101101,01111100,00000111,01111111,01101111,0011111100110000,01011011,01001111,01100110,01101101, 01110111图7.译码模块的仿真波形图3扫描模块扫描程序依次将KR0 KR1 KR2 KR3 置0111,1011,1101,1110,进行扫描。图8.扫描模块的仿真波形图4总电路在时钟的控制下,扫描程序依次将KR0 KR1 KR2 KR3 置0111,1011,1101,1110,进行扫描,如果第一个键按下时,此时flag置一

13、,数码管中led1,led2都置00111111。其他的同理。图9.总电路仿真波形图第5章、课程设计总结1收获与心得通过本次课程设计,我收获到在课堂上所不能给予我的知识和处理问题的能力,也深刻体会到,正如老师在任务书中说的一样,做设计是一件很辛苦的事情,千万不能够浮躁,想走捷径,只有静下心来,根据本课程的知识、查找资料、学习前人经验,才能有自己的作品。在设计过程中,感觉自己收获到了很多比仅仅做题,上课更丰富的知识,同时也加深了对数电知识的理解,并且这个过程现在回想起来真的很奇妙自己能够独立地运用自己学的知识来设计电路,真的很有成就感。让我感受最深的是在这次设计之中出现的那些问题,真的,做设计如

14、同人生,并不是一帆风顺的,也不能一蹴而就。从选择矩阵键盘的这道题开始,就意味着我要开始接受一个新的挑战。说实话,一开始选择这道题目是因为之前有接触过矩阵键盘,后来才发现用数电知识来实现和我之前接触的有特别大的区别,真的可以说天壤之别。在选择方案的时候,一开始挺纠结,是要用描述语言还是用搭电路的方法,因为我之前没接触过硬件描述语言。后来通过论证,果断选了硬件语言,硬件语言对我来说真的是一个新的东西,所以这不得不说是一个新的挑战。也正因为此次设计,我对Verilog hdl语言有了一个大概的了解。选择了用描述语言来描述电路,首先就是要补充知识,我把数电课本的关于硬件语言的那章看了,然后就到处于找关

15、于Verilog hdl的语法资料。在写扫描程序的过程中,单个按键检测比较容易,但当然这个过程出现了很多小问题,这些小问题有时候也是挺难发现的,有时候就改了一个地方,然后程序就可以正常工作了,所以程序编译了数不清n遍,出现问题的时候就找找书,例如阻塞语句和非阻塞语句的区别,还有case语句在Verilog hdl中的应用等,尤其是阻塞语句和非阻塞语句,花了很久才搞懂是什么回事。最困难的部分是两个以上按键的检测,首先是扫描方法,如何检测出两个以上的按键,真的想了好久,看着那个矩阵键盘原理图想了不知道多少遍了。一开始想出来的程序,按照原理,它应该能够检测出不同行的两个按键以上的,但是结果却出乎我意

16、料,竟然只能够识别同一列的两个以上按键,然后检测很久也没发现问题,真的考验人的耐心,奇怪的是在之后的写的程序,没怎么改,它就正常工作了。之后用它又写了一个程序,虽然感觉那个原理能够检测任意两个以上按键但结果却是只能检测不同行。迫于无奈,只能改另外一种扫描方法,前一种扫描方法由于时间关系,只能先放下查找它的错误,自己感觉可能对Verilog hdl有些细节的东西还不是很清楚 ,可能这也是此次设计遇到的最大问题。之后的那个程序扫描方法在实现过程中也是遇到各种问题,经过查资料,最后很幸运都解决了。在程序调试的时候,需要的是发现问题的细心和耐心,程序问题才能够一一解决。数电课程设计过程充满挑战,既有有

17、趣的地方,又有困难的让人想要放弃的地方。每当想到一个新方法,就想去用它,验证它,有时睡在床上想着,想出一些解决方案,于是跳下床,到电脑前操作,这也许就是它的魅力,每一个困难都让人跃跃欲试下想要克服它。在每一个问题解决的背后需要一颗有耐心的心和思考的大脑。在不断发现问题和解决问题的过程中,收获的不仅仅是知识,更是一种主动的态度。学习是一种态度。我觉得我很享受做课程设计的过程,它让我经历了柳暗花明的喜悦,让我在这个过程中的到很多的满足感。2致谢衷心感谢老师在实验过程中的谆谆教导,通过实验,我更加巩固了课堂上的知识,也感谢学校安排了这次数电设计,让我有了这次不同以往的经历,增加了我实践的机会。 附录

18、1:参考文献参考文献 1阎石.数学电子技术基础.北京:高等教育出版社2夏宇闻.Verilog 数字系统设计教程.北京.北京航空航天大学出版社3 魏家明.Verilog编程艺术.电子工业出版社附录2:部分采用verilog语言编写的模块的原程序 扫描模块程序/*时钟CLK管脚:PIN_18 *键盘col输入管脚:PIN_8,PIN_7,PIN_6,PIN_5 *键盘row输出管脚:PIN_14,PIN_13,PIN_12,PIN_11 *实验结果:按键每个数字对应亮灯数,其它按键对应不同结果 */module juzhen(clk,incol,outrow,key_value,key_flag,

19、key_flag1);input clk; /定义时钟引脚input3:0incol; /定义横向数据输入output3:0outrow; /定义纵向数据输出 output4:0key_value; /定义识别的按键值output key_flag,key_flag1; /定义按键标志,flag表示一个flag/flag2表示两个按键 reg 3:0row;reg3:0incol_reg ; /寄存扫描行值reg3:0 outrow_reg; /寄存扫描列值reg2:0state; /状态标志reg key_flag,key_flag1; /按键标志位reg 4:0 key_value; /读

20、取的状态值reg 3:0incol_1,incol_2,incol_3,incol_4;reg state1,state2,state3,state4;reg 3:0 statez;/总的按键标志always(posedge clk)begincase(state) 0:begin row=4b0000; key_flag=1b0; key_flag1=1b0; if(incol!=4b1111) begin state=1;row=4b1110; end else state=0; end 1:begin if(incol!=4b1111) begin incol_1=incol;state

21、1=1b1;state=2;row=4b1101; end else begin state=2;row=4b1101;state1=1b0; end end 2:begin if(incol!=4b1111) begin incol_2=incol;state2=1b1;state=3;row=4b1011; end else begin state=3;row=4b1011; state2=1b0; endend 3:begin if(incol!=4b1111) begin incol_3=incol;state3=1b1;state=4;row=4b0111; end else beg

22、in state=4;row=4b0111; state3=1b0; end end 4: begin if(incol!=4b1111) begin incol_4=incol;state4=1b1;state=5; end else begin state=5; state4=1b0; end end 5:begin statez=state4,state3,state2,state1; case(statez) 4b1000: begin incol_reg=incol_4;outrow_reg=4b0111; case(incol_4) 4b1110:key_flag=1b1; 4b1

23、101:key_flag=1b1; 4b1011:key_flag=1b1; 4b0111:key_flag=1b1; 4b0011:key_flag1=1b1; 4b1100:key_flag1=1b1; 4b1001:key_flag1=1b1; 4b0101:key_flag1=1b1; 4b1010:key_flag1=1b1; 4b0110:key_flag1=1b1; default:key_flag=1b0; endcase end 4b0100: begin incol_reg=incol_3;outrow_reg=4b1011; case(incol_3) 4b1110:ke

24、y_flag=1b1; 4b1101:key_flag=1b1; 4b1011:key_flag=1b1; 4b0111:key_flag=1b1; 4b0011:key_flag1=1b1; 4b1100:key_flag1=1b1; 4b1001:key_flag1=1b1; 4b0101:key_flag1=1b1; 4b1010:key_flag1=1b1; 4b0110:key_flag1=1b1; default:key_flag=1b0; endcase end 4b0010:begin incol_reg=incol_2;outrow_reg=4b1101; case(inco

25、l_2) 4b1110:key_flag=1b1; 4b1101:key_flag=1b1; 4b1011:key_flag=1b1; 4b0111:key_flag=1b1; 4b0011:key_flag1=1b1; 4b1100:key_flag1=1b1; 4b1001:key_flag1=1b1; 4b0101:key_flag1=1b1; 4b1010:key_flag1=1b1; 4b0110:key_flag1=1b1; endcase end 4b0001:begin incol_reg=incol_1;outrow_reg=4b1110; case(incol_1) 4b1

26、110:key_flag=1b1; 4b1101:key_flag=1b1; 4b1011:key_flag=1b1; 4b0111:key_flag=1b1; 4b0011:key_flag1=1b1; 4b1100:key_flag1=1b1; 4b1001:key_flag1=1b1; 4b0101:key_flag1=1b1; 4b1010:key_flag1=1b1; 4b0110:key_flag1=1b1; default:key_flag=1b0; endcase end default:begin incol_reg=4b0000;outrow_reg=4b0000;key_

27、flag1=1b1;end endcase state=0; end endcase endalways(clk or outrow_reg or incol_reg) begin case(outrow_reg,incol_reg) 8b1110_1110:begin key_value=5b00000;end 8b1101_1110:begin key_value=5b00001;end 8b1011_1110:begin key_value=5b00010;end 8b0111_1110:begin key_value=5b00011;end 8b1110_1101:begin key_

28、value=5b00100;end 8b1101_1101:begin key_value=5b00101;end 8b1011_1101:begin key_value=5b00110;end 8b0111_1101:begin key_value=5b00111;end 8b1110_1011:begin key_value=5b01000;end 8b1101_1011:begin key_value=5b01001;end 8b1011_1011:begin key_value=5b01010;end 8b0111_1011:begin key_value=5b01011;end 8b1110_0111:begin key_value=5b01100;end 8b1101_0111:begin key_value=5b01101;end 8b1011_0111:begin key_value=5b01110;end 8b0111_0111:begin key_value=5b01111;end default:begin key_value=5b10000;end endcase endassign outrow=row;endmodule译码模块程序:module yima(key_value,led1,led2);i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1