verilog hdl 矩阵键盘实验报告要点

合集下载

Verilog HDL实验报告

Verilog HDL实验报告

HDL实验报告专业电子科学与技术姓名学号指导老师1 实验一Modelsim仿真软件的使用1.1 实验目的(1)熟悉Modelsim 软件;(2)掌握Modelsim 软件的编译、仿真方法;(3)熟练运用Modelsim 软件进行HDL 程序设计开发。

1.2 实验步骤(1)学习使用Modelsim软件;(2)分析原理及功能;(3)用Verilog HDL编写程序;(4)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。

1.3 实验内容用Verilog HDL 程序实现一个异或门,Modelsim 仿真,观察效果。

1.4.1 程序module my_xor(ina,inb,out);input ina,inb;output out;assign out=ina^inb;endmodulemodule t_xor;reg ina,inb;wire out;initialbeginina=1'b0;forever #20 ina=~ina;endinitialbegininb=1'b0;forever #10 inb=~inb;endmy_xor tt(.ina(ina),.inb(inb),.out(out));endmodule2 实验二简单组合电路设计2.1 实验目的(1)掌握基于Modelsim 的数字电路设计方法;(2)熟练掌握HDL 程序的不同实现方法2.2 实验步骤(1)分析原理及功能;(2)根据原理用Verilog HDL编写程序;(3)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。

2.3 实验内容设计一个三人表决器(高电平表示通过) ,实验内容如下:(1)三个人,一个主裁判,两个副裁判;(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。

使用Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真(要求:至少使用两种方法实现上述实验内容和testbench)。

verilog按键与led基础实验 实验小结 -回复

verilog按键与led基础实验 实验小结 -回复

verilog按键与led基础实验实验小结-回复Verilog按键与LED基础实验实验小结引言:本文主要回顾并总结Verilog按键与LED基础实验。

首先,我们会介绍实验的目的和背景,然后阐述实验过程的详细步骤,包括硬件设计和FPGA编程,最后对实验结果进行讨论和总结。

一、实验目的和背景Verilog按键与LED基础实验是数字电路和嵌入式系统课程中的常见实验之一。

通过完成本实验,学生可以了解如何使用Verilog语言编写FPGA 程序,实现按键输入和LED输出的基本功能。

本实验还帮助学生巩固数字电路和逻辑设计的基础知识,并提高他们的硬件设计和FPGA编程能力。

二、实验过程步骤1. 硬件设计首先,我们需要准备一块FPGA开发板,其中包括按键和LED。

然后,根据实验要求,连接按键和LED与开发板上的相应引脚。

确保按键和LED 的连接正确可靠。

2. FPGA编程在开始编写FPGA程序之前,我们需要先了解Verilog语言的编程基础知识。

Verilog是一种硬件描述语言,用于描述数字电路行为和结构。

熟悉Verilog语言的基本语法和数据类型对于编写FPGA程序非常重要。

接下来,我们需要打开一个Verilog编辑器,如Xilinx ISE或Quartus Prime。

创建一个新的Verilog项目,并编写包含按键和LED功能的顶层模块。

顶层模块应包含输入端口和输出端口,分别对应按键和LED。

然后,我们可以开始编写按键和LED的功能代码。

根据实验要求,我们可以使用Verilog编写相应的逻辑表达式,实现按键输入和LED输出的功能。

例如,我们可以使用if-else语句来检测按键状态,并在按键按下时将相应的LED点亮。

3. 编译和烧录在编写完FPGA程序后,我们需要对程序进行编译。

编译器会将Verilog 代码转换为FPGA可以理解的机器语言。

在编译过程中,编译器会检查语法错误和逻辑错误,并生成一个编译报告。

编译成功后,我们需要将生成的比特流文件烧录到FPGA开发板中。

【Easy CPLD570】Verilog实现4x4矩阵按键检测

【Easy CPLD570】Verilog实现4x4矩阵按键检测

Verilog实现4x4矩阵按键检测1 原理图4x4的矩阵按键,8个IO,检测原理是IO63、66、67、68作为输出信号,轮流赋值高电平,IO59、60、61、62作为输入信号,检测对应的按键按下。

比如,在IO68赋值高电平时,检测到IO59信号为高电平,则表示按键K1被按下。

拨码开关用于测试。

2 CPLD代码module key_array (clk_24m,reset_n,Hline, //输出4bit按键赋高电平信号。

Vline, //输入4bit按键检测信号。

ledline, //测试使用LED点灯信号switch //测试使用按键表现选择信号,因只有8个LED,而按键有16个,通过此信号来选择是表现K1-K8,还是K9-K16。

);input wire clk_24m;input wire reset_n;output wire [3:0] Hline;input wire [3:0] Vline;output reg [7:0] ledline;input wire switch;/****************************************************************************** 24M时钟分频,用于内部控制及计数等。

******************************************************************************/ reg [14:0] count_div1;wire condition_732; //732 Hz时钟信号。

always @ (posedge clk_24m or negedge reset_n)beginif(reset_n == 1'b0)count_div1 <= 15'h0000;elsecount_div1 <= count_div1 + 15'h0001;end/****************************************************************************** condition_732:732Hz时钟信号,高电平持续一个24MHz时钟周期,其余时间为低电平。

Verilog HDL 实验报告

Verilog HDL 实验报告

实验一Modelsim仿真软件的使用一、实验目的(1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容1、实验要求用Verilog HDL 程序实现一个异或门,Modelism仿真,观察效果。

2、步骤1、建立工程2、添加文件到工程3、编译文件4、查看编译后的设计单元5、将信号加入波形窗口6、运行仿真3、方法moduleyihuo (a,b,c);inputa,b;output c;assign c=a^b;endmodule测试程序:module t_yihuo;reg a,b;wire c;initialbegina=0;forever #20 a=~a;endinitialbeginb=0;forever #30 b=~b;endyihuou1(a,b,c);endmodule二、实验结果波形图:三、分析和心得通过这次的实验,我基本熟悉Modelsim软件,掌握了Modelsim软件的编译、仿真方法。

同时在编写程序的过程中,加深了我对课上所讲的HDL的语法的认识。

实验二简单组合电路设计一、实验目的(1)掌握基于Modelsim的数字电路设计方法(2)熟练掌握HDL 程序的不同实现方法二、实验内容1、实验要求设计一个三人表决器(高电平表示通过),实验内容如下:(1)三个人,一个主裁判,两个副裁判;(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。

使用 Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真。

2、方法module test(a,b,c,s);inputa,b,c;output s;assign s=c|(b&a);endmodulemodulet_test;rega,b,c;wire s;initialbegina=0;forever#10 a=~a;endinitialbeginb=0;forever #20 b=~b;endinitialbeginc=0;forever#40 c=~c;endtest u1(a,b,c,s);endmodule三、实验结果四、分析和心得通过本次实验,我掌握基于Modelsim的简单数字电路设计方法,且尝试了用不同方法实现功能,三人表决器可以通过testbench测试程序实现,也可以利用always模块实现,可见程序的设计思想是很重要的。

verilog实验报告

verilog实验报告

verilog实验报告Verilog实验报告引言:Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。

它是一种高级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。

本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。

实验一:基本门电路设计在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。

通过使用Verilog的模块化设计,我能够轻松地创建和组合这些门电路,以实现更复杂的功能。

我首先创建了一个与门电路的模块,定义了输入和输出端口,并使用逻辑运算符和条件语句实现了与门的功能。

然后,我创建了一个测试模块,用于验证与门的正确性。

通过输入不同的组合,我能够验证与门的输出是否符合预期。

接下来,我按照同样的方法设计了或门和非门电路,并进行了相应的测试。

通过这个实验,我不仅学会了使用Verilog进行基本门电路的设计,还加深了对逻辑电路的理解。

实验二:时序电路设计在这个实验中,我学习了如何使用Verilog设计时序电路,例如寄存器和计数器。

时序电路是一种具有状态和时钟输入的电路,能够根据时钟信号的变化来改变其输出。

我首先设计了一个简单的寄存器模块,使用触发器和组合逻辑电路实现了数据的存储和传输功能。

然后,我创建了一个测试模块,用于验证寄存器的正确性。

通过输入不同的数据和时钟信号,我能够观察到寄存器的输出是否正确。

接下来,我设计了一个计数器模块,使用寄存器和加法电路实现了计数功能。

我还添加了一个复位输入,用于将计数器的值重置为初始状态。

通过测试模块,我能够验证计数器在不同的时钟周期内是否正确地进行计数。

通过这个实验,我不仅学会了使用Verilog设计时序电路,还加深了对触发器、寄存器和计数器的理解。

实验三:组合电路设计在这个实验中,我学习了如何使用Verilog设计组合电路,例如多路选择器和加法器。

组合电路是一种没有状态和时钟输入的电路,其输出只取决于当前的输入。

verilog矩阵键盘

verilog矩阵键盘

二、矩阵键盘显示电路设计(显示键盘值的平方)矩阵键盘显示电路的设计一、实验目的1、了解普通4×4 键盘扫描的原理。

2、进一步加深七段码管显示过程的理解。

3、了解对输入/输出端口的定义方法。

二、实验原理实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描;再就是用软件实现键盘扫描。

作为一个嵌入系统设计人员,总是会关心产品成本。

目前有很多芯片可以用来实现键盘扫描,但是键盘扫描的软件实现方法有助于缩减一个系统的重复开发成本,且只需要很少的 CPU 开销。

嵌入式控制器的功能能强,可能充分利用这一资源,这里就介绍一下软键盘的实现方案。

图10-1 简单键盘电路通常在一个键盘中使用了一个瞬时接触开关,并且用如图 10-1 所示的简单电路,微处理器可以容易地检测到闭合。

当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑 1;当开关闭合时,处理器的/IO口的输入将被拉低得到逻辑 0。

可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。

尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。

当触点闭合时,其弹起就像一个球。

弹起效果将产生如图10-2所示的好几个脉冲。

弹起的持续时间通常将维持在5ms∼30ms 之间。

如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。

然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。

图10-2 按键抖动键盘上阵列这些开关最有效的方法(当需要5个以上的键时)就形成了一个如图 10-3 所示的二维矩阵。

当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O 端被连接的时候),一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。

矩阵所需的键的数目显然根据应用程序而不同。

每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。

图 10-3 矩阵键盘键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4 行均为高电平,那么肯定没有按键按下,否则,如果读入的4 行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。

Verilog-HDL实验报告

Verilog-HDL实验报告

HDL实验报告专业电子科学与技术姓名学号指导老师1 实验一Modelsim仿真软件的使用1.1 实验目的(1)熟悉Modelsim 软件;(2)掌握Modelsim 软件的编译、仿真方法;(3)熟练运用Modelsim 软件进行HDL 程序设计开发。

1.2 实验步骤(1)学习使用Modelsim软件;(2)分析原理及功能;(3)用Verilog HDL编写程序;(4)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。

1.3 实验内容用Verilog HDL 程序实现一个异或门,Modelsim 仿真,观察效果。

1.4.1 程序module my_xor(ina,inb,out);input ina,inb;output out;assign out=ina^inb;endmodulemodule t_xor;reg ina,inb;wire out;initialbeginina=1'b0;forever #20 ina=~ina;endinitialbegininb=1'b0;forever #10 inb=~inb;endmy_xor tt(.ina(ina),.inb(inb),.out(out));endmodule2 实验二简单组合电路设计2.1 实验目的(1)掌握基于Modelsim 的数字电路设计方法;(2)熟练掌握HDL 程序的不同实现方法2.2 实验步骤(1)分析原理及功能;(2)根据原理用Verilog HDL编写程序;(3)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。

2.3 实验内容设计一个三人表决器(高电平表示通过) ,实验内容如下:(1)三个人,一个主裁判,两个副裁判;(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。

使用Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真(要求:至少使用两种方法实现上述实验内容和testbench)。

verilog hdl 矩阵键盘实验报告

verilog hdl 矩阵键盘实验报告

EDA实验报告学院:物信学院专业:电信一班小组成员:杨义,王祺,陈鹏,秦成晖指导老师:漆为民目录实验题目 (3)实验目的 (3)实验原理 (3)实验内容 (5)实验程序 (5)实验步骤 (10)实验结果 (10)实验体会 (10)附录 (11)一.实验题目:矩阵键盘显示电路设计二.实验目的:1.了解普通4×4键盘扫描的原理。

2.进一步加深七段码管显示过程的理解。

3.了解对输入/输出端口的定义方法。

三.实验原理:软键盘的工作方式:通常在一个键盘中使用了一个瞬时接触开关,并且用如图所示的简单电路,微处理器可以容易地检测到闭合。

当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的/IO 口的输入将被拉低得到逻辑0。

可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1 或者0。

尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。

当触点闭合时,其弹起就像一个球。

弹起效果将产生如图10-2 所示的好几个脉冲。

弹起的持续时间通常将维持在5ms∼30ms 之间。

如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。

然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。

键盘上阵列这些开关最有效的方法(当需要5 个以上的键时)就形成了一个如图10-3 所示的二维矩阵。

当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O 端被连接的时候)。

一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。

矩阵所需的键的数目显然根据应用程序而不同。

每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。

矩阵键盘Verilog

矩阵键盘Verilog

module key(clk,//50MHZ reset,row,//行col,//列key_value//键值);input clk,reset;input [3:0] row;output [3:0] col;output [3:0] key_value;reg [3:0] col;reg [3:0] key_value;reg [5:0] count;//delay_20msreg [2:0] state;//状态标志reg key_flag;//按键标志位reg clk_500khz;//500KHZ时钟信号reg [3:0] col_reg;//寄存扫描列值reg [3:0] row_reg;//寄存扫描行值always @(posedge clk or negedge reset)if(!reset) begin clk_500khz<=0; count<=0; endelsebeginif(count>=50) begin clk_500khz<=~clk_500khz;count<=0;endelse count<=count+1;endalways @(posedge clk_500khz or negedge reset)if(!reset) begin col<=4'b00;state<=0;endelsebegincase (state)0:begincol[3:0]<=4'b00;key_flag<=1'b0;if(row[3:0]!=4'b11) begin state<=1;col[3:0]<=4'b1110;end //有键按下,扫描第一行else state<=0;end1:beginif(row[3:0]!=4'b11) begin state<=5;end//判断是否是第一行elsebegin state<=2;col[3:0]<=4'b1101;end//扫描第二行end2:beginif(row[3:0]!=4'b11) begin state<=5;end//判断是否是第二行elsebegin state<=3;col[3:0]<=4'b1011;end//扫描第三行end3:beginif(row[3:0]!=4'b11) begin state<=5;end//判断是否是第三一行elsebegin state<=4;col[3:0]<=4'b0111;end//扫描第四行end4:beginif(row[3:0]!=4'b11) begin state<=5;end//判断是否是第一行elsestate<=0;end5:beginif(row[3:0]!=4'b11)begincol_reg<=col;//保存扫描列值row_reg<=row;//保存扫描行值state<=5;key_flag<=1'b1;//有键按下endelsebegin state<=0;endendendcaseendalways @(clk_500khz or col_reg or row_reg) beginif(key_flag==1'b1)begincase ({col_reg,row_reg})8'b1110_1110:key_value<=0;8'b1110_1101:key_value<=1;8'b1110_1011:key_value<=2;8'b1110_0111:key_value<=3;8'b1101_1110:key_value<=4;8'b1101_1101:key_value<=5;8'b1101_1011:key_value<=6;8'b1101_0111:key_value<=7;8'b1011_1110:key_value<=8;endendmodule8'b1011_1101:key_value<=9; 8'b1011_1011:key_value<=10;8'b1011_0111:key_value<=11;8'b0111_1110:key_value<=12;8'b0111_1101:key_value<=13;8'b0111_1011:key_value<=14;8'b0111_0111:key_value<=15; endcaseend。

EDA实验七 矩阵键盘与数码管显示测试

EDA实验七 矩阵键盘与数码管显示测试

实验七4*4键盘数据读取及数据显示设计一、实验目的:1、了解数码管的工作原理;2、掌握4*4矩阵键盘和数码管显示的编程方法。

3、学会用于Verilog语言进行程序设计。

二、实验仪器设备1、PC机一台2、FPGA实验开发系统一套。

三、实验原理:本实验通过扫描4*4矩阵键盘的值,在数码管上显示对应按钮的编号数据。

矩阵键盘及数码管电路如下所示。

四、实验要求1、预习教材中的相关内容。

2、阅读并熟悉本次实验的内容。

3、完成实验内容。

五、实验步骤(1)启动 Quartus II 建立一个空白工程,选择的器件为 Altera 公司的 Cyclone 系列的 EP2C8Q240C8芯片,命名为 keyarray.qpf;(2)新建一个 Schematic File 文件,命名为 keyarray.bdf;(3)分别新建 3 个 Verilog HDL File 文件,分别命名为 seg_show.v、 divclk.v、keyarraycontrol.v。

输入程序代码并保存(对应源程序 8),然后进行综合编译。

若在编译过程中发现错误,则找出错误并更正错误,直至编译成功为止。

(4)从设计文件创建模块(File→Creat Update→Creat Symbol Files for Current File),seg_show.v 生成名为seg_show.bsf;divclk.v 生成名为divclk.bsf;keyarraycontrol.v 生成名为keyarraycontrol.bsf;(5)在 keyarray.bdf 文件中,在空白处双击鼠标左键,在 Symbol 对话框左上角的libraries 中,分别将 Project 下的 seg_show, divclk, keyarraycontrol 模块放在图形文件 keyarray.bdf 中,加入输入、输出引脚,双击每个引脚,进行引脚命名,并锁定管脚,将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片);完整的顶层模块原理图如图所示(6)将keyarray.bdf 设置为顶层实体。

矩阵式键盘实验报告

矩阵式键盘实验报告

矩阵键盘实验报告佘成刚学号2010302001班级08041202时间2016.01.20一、实验目的1.学习矩列式键盘工作原理;2.学习矩列式接口的程序设计。

二、实验设备普中HC6800ESV20开发板三、实验要求要现:用4*4矩阵键盘,用按键形式输入学号,在数码管上显示对应学号。

四、实验原理工作原理:矩阵式由行线和列线组成,按键位于行、列的交叉点上。

如图所示,一个4*4 的行、列结构可以构成一个由16 个按键的键盘。

很明显,在按键数量较多的场合,矩阵式键盘与独立式键盘相比,要节省很多的I/0 口。

(1)矩阵式键盘工作原理按键设置在行、列交节点上,行、列分别连接到按键开关的两端。

行线通过下拉电阻接到GND 上。

平时无按键动作时,行线处于低电平状态,而当有按键按下时,行线电平状态将由与此行线相连的列线电平决定。

列线电平如果为低,行线电平为高,列线电平如果为高,则行线电平则为低。

这一点是识别矩阵式键盘是否被按下的关键所在。

因此,各按键彼此将相互发生影响,所以必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。

(2)按键识别方法下面以3 号键被按下为例,来说明此键是如何被识别出来的。

前已述及,键被按下时,与此键相连的行线电平将由与此键相连的列线电平决定,而行线电平在无键按下时处于高电平状态。

如果让所有列线处于高电平那么键按下与否不会引起行线电平的状态变化,始终是高电平,所以,让所有列线处于高电平是没法识别出按键的。

现在反过来,让所有列线处于低电平,很明显,按下的键所在行电平将也被置为低电平,根据此变化,便能判定该行一定有键被按下。

但我们还不能确定是这一行的哪个键被按下。

所以,为了进一步判定到底是哪—列的键被按下,可在某一时刻只让一条列线处于低电平,而其余所有列线处于高电平。

当第1 列为低电平,其余各列为高电平时,因为是键3 被按下,所以第1 行仍处于高电平状态;当第2 列为低电平,其余各列为高电平时,同样我们会发现第1 行仍处于高电平状态,直到让第4 列为低电平,其余各列为高电平时,因为是3 号键被按下,所以第1 行的高电平转换到第4 列所处的低电平,据此,我们确信第1 行第4 列交叉点处的按键即3 号键被按下。

4X4键盘扫描实验

4X4键盘扫描实验

44键盘扫描实验实验目的1、学习HDL程序的基本设计技巧;2、掌握矩阵键盘的扫描原理和使用方法。

Verilog程序:module hex_keypad(Col,Code,show,show1,count,scan,clock,Row); output[3:0] Code,Col,count; //定义列信号Col、行列信号共同决定的输出代码Code、以及计数变量count output[7:0] show,show1; //定义七段显示变量show、show1 input[3:0] Row; //定义输入行信号Rowinput scan; //定义数码管选择信号scaninput clock; //定义时钟信号clockreg[3:0] Col,Code,count; //将输出信号定义为reg型reg[7:0] show,show1;reg[1:0] cn; //定义reg型变量cn,用于计数reg reset,count_up,count_down; //定义变量reset用于计数清零,count_up开始加计数,count_down开始减计数reg[15:0] times1,times2; //定义变量times1、times2用于决定开始计数的时间assign scan=1'b1; //将数码管选择信号赋值为1always@(posedge clock) //产生列信号if(cn==4)cn<=0; elsecn<=cn+1;always@(cn)case(cn)2'b00:Col=4'b1110;2'b01:Col=4'b1101;2'b10:Col=4'b1011;2'b11:Col=4'b0111;endcasealways@(posedge clock) //行列信号共同决定输出代码Code case({Row,Col})8'b1110_1110:Code=4'h0;8'b1110_1101:Code=4'h1;8'b1110_1011:Code=4'h2;8'b1110_0111:Code=4'h3;8'b1101_1110:Code=4'h4;8'b1101_1101:Code=4'h5;8'b1101_1011:Code=4'h6;8'b1101_0111:Code=4'h7;8'b1011_1110:Code=4'h8;8'b1011_1101:Code=4'h9;8'b1011_1011:Code=4'hA;8'b1011_0111:Code=4'hB;8'b0111_1110:Code=4'hC;8'b0111_1101:Code=4'hD;8'b0111_1011:Code=4'hE;8'b0111_0111:Code=4'hF;endcasealways@(posedge clock) //由输出Code决定数码管的显示,七段用十六进制数表示case(Code[3:0])4'h0:show=8'hFC;4'h1:show=8'h60;4'h2:show=8'hDA;4'h3:show=8'hF2;4'h4:show=8'h66;4'h5:show=8'hB6;4'h6:show=8'h3E;4'h7:show=8'hE0;4'h8:show=8'hFE;4'h9:show=8'hE6;4'hA:show=8'hEE;4'hB:show=8'hCE;4'hC:show=8'h9C;4'hD:show=8'h7A;4'hE:show=8'h9E;4'hF:show=8'h8E;endcasealways@(posedge clock) //加减计数case(Code)4'h0:begin reset=1;count_up=0;count_down=0;end //按0键时清零4'hE:begin count_up=1;count_down=0;end //按E键加计数4'hF:begin count_down=1;count_up=0;end //按F键减计数default: begin count_down=0;count_up=0;reset=0; end //按其它键不计数endcasealways@(posedge clock)if(times1==1000) times1<=101; else if (count_up) times1<=times1+1;always@(posedge clock)if(times2==1000) times2<=101; else if (count_down) times2<=times2+1; always@(posedge clock)if(reset)count<=4'h0; elseif (times1>100&&Code==4'hE) //加计数begincount<=count+4'b1;if (count==4'h9) count<=4'h0;endelseif (times2>100&&Code==4'hF) //减计数begincount<=count-4'b1;if (count==4'h0) count<=4'h9;endalways@(posedge clock) //计数显示case(count[3:0])4'h0:show1=8'hFC;4'h1:show1=8'h60;4'h2:show1=8'hDA;4'h3:show1=8'hF2;4'h4:show1=8'h66;4'h5:show1=8'hB6;4'h6:show1=8'h3E;4'h7:show1=8'hE0;4'h8:show1=8'hFE;4'h9:show1=8'hE6;endcaseendmodule仿真波形:Col、Row、Code、show、show[17..10]为十六进制显示,times1、times2、count为十进制显示当Code为F(即按F键)时,show显示8E即F,表明此时按下的是F 键。

矩阵键盘驱动开发实验报告详解

矩阵键盘驱动开发实验报告详解

实验报告书实验名称:矩阵键盘驱动开发实验专业班级:学号:姓名:联系电话:指导老师:实验时间:2014年11月13日计算机学院计算机科学与技术一、实验目的1、掌握 4×4 键盘驱动的写法;2、深入了解 linux 驱动架构。

二、实验设备1、装有 Linux 系统或装有Linux 虚拟机的PC 机一台;2、凌阳 ARM9 嵌入式实验箱SP-32AM11A 一台;3、S3C2410 CPU 核心板一块;4、本实验用到实验箱的模块有:S3C2410 CPU 板模块、4×4 键盘模块。

三、实验要求1、实现功能:编写 4×4 键盘驱动,并将键值通过控制台打印出来;2、实验现象:每个键值通过控制台打印出来。

四、实验原理1、硬件原理本实验箱采用GPF0~7 连接4×4 键盘,其中GPF0~3 与K1~K4 连接,GPF4~7 与KA~KD连接,分别用于控制4×4 键盘的纵列和横列。

硬件连接如图 6.2所示。

4×4 键盘一般采用行列扫描方法获取键值,为了进一步提高驱动程序的效率,这里结合外部中断获取键值。

GPF 组IO 端口都有外部中断功能,设置GPF0~3 为上升沿触发外部中断,设置GPF4~7输出高电平,这样当有任何一个按键按下的时候,按键所在列对应的GPIO 端口就会触发外部中断,由外部中断服务程序判断具体是哪个按键被按下。

2、外部中断S3C2410 处理器集成了外部中断功能,所谓外部中断是指处理器中具有触发中断功能GPIO,当GPIO 出现电平变动时会触发中断。

触发中断的方式有多种,比如高电平触发低电平触发、上升沿触发,下降沿触发等。

S3C2410 处理器中具有外部中断功能的GPIO 每一位都可以单独设定中断触发方式,以满足不同的需要。

在4×4 键盘驱动中,使用上升沿沿触发中断的方式,当按键按下时外部中断被触发获得一次键值。

在linux 系统中对外部中断提供了比较好的支持,可以通过以下的函数设置外部中断。

矩阵键盘驱动开发实验报告

矩阵键盘驱动开发实验报告

实验报告书实验名称:矩阵键盘驱动开发实验专业班级:学号:姓名:联系电话:指导老师:实验时间:2014年11月13日计算机学院计算机科学与技术一、实验目的1、掌握 4×4 键盘驱动的写法;2、深入了解 linux 驱动架构。

二、实验设备1、装有 Linux 系统或装有Linux 虚拟机的PC 机一台;2、凌阳 ARM9 嵌入式实验箱SP-32AM11A 一台;3、S3C2410 CPU 核心板一块;4、本实验用到实验箱的模块有:S3C2410 CPU 板模块、4×4 键盘模块。

三、实验要求1、实现功能:编写 4×4 键盘驱动,并将键值通过控制台打印出来;2、实验现象:每个键值通过控制台打印出来。

四、实验原理1、硬件原理本实验箱采用GPF0~7 连接4×4 键盘,其中GPF0~3 与K1~K4 连接,GPF4~7 与KA~KD连接,分别用于控制4×4 键盘的纵列和横列。

硬件连接如图 6.2所示。

4×4 键盘一般采用行列扫描方法获取键值,为了进一步提高驱动程序的效率,这里结合外部中断获取键值。

GPF 组IO 端口都有外部中断功能,设置GPF0~3 为上升沿触发外部中断,设置GPF4~7输出高电平,这样当有任何一个按键按下的时候,按键所在列对应的GPIO 端口就会触发外部中断,由外部中断服务程序判断具体是哪个按键被按下。

2、外部中断S3C2410 处理器集成了外部中断功能,所谓外部中断是指处理器中具有触发中断功能GPIO,当GPIO 出现电平变动时会触发中断。

触发中断的方式有多种,比如高电平触发低电平触发、上升沿触发,下降沿触发等。

S3C2410 处理器中具有外部中断功能的GPIO 每一位都可以单独设定中断触发方式,以满足不同的需要。

在4×4 键盘驱动中,使用上升沿沿触发中断的方式,当按键按下时外部中断被触发获得一次键值。

在linux 系统中对外部中断提供了比较好的支持,可以通过以下的函数设置外部中断。

矩阵键盘实训报告心得(3篇)

矩阵键盘实训报告心得(3篇)

第1篇一、引言随着科技的不断发展,计算机键盘已经成为我们日常生活中不可或缺的输入设备。

矩阵键盘作为一种新型的键盘技术,因其高可靠性、低功耗、高集成度等优点,被广泛应用于计算机、手机、POS机等领域。

为了更好地掌握矩阵键盘的原理和应用,我参加了本次矩阵键盘实训课程。

以下是我对本次实训的心得体会。

二、实训内容本次实训主要包括以下内容:1. 矩阵键盘原理学习:通过学习矩阵键盘的原理,了解其组成结构、工作方式以及按键扫描方法。

2. 矩阵键盘电路设计:根据实训要求,设计一个矩阵键盘电路,包括按键电路、驱动电路、扫描电路等。

3. 矩阵键盘软件编程:编写程序实现矩阵键盘的功能,包括按键扫描、按键消抖、按键识别等。

4. 矩阵键盘实物制作与调试:将设计好的电路板焊接成实物,并进行调试,确保矩阵键盘能够正常工作。

三、实训心得1. 矩阵键盘原理的认识通过本次实训,我对矩阵键盘的原理有了更深入的了解。

矩阵键盘由行列线构成,行列交叉处放置按键。

当按键被按下时,会形成一条通路,使得行列线之间存在一定的关系。

通过扫描行列线,可以判断出哪个按键被按下,从而实现键盘的功能。

2. 电路设计能力的提升在实训过程中,我学会了如何设计矩阵键盘电路。

首先,根据实训要求,确定了电路的组成和功能。

然后,根据电路原理图,选择合适的元器件,并绘制出电路原理图。

最后,根据电路原理图,焊接电路板,并对电路进行调试。

通过这个过程,我的电路设计能力得到了很大的提升。

3. 软件编程能力的提高在实训过程中,我学会了编写矩阵键盘的软件程序。

首先,根据实训要求,确定了程序的功能和实现方式。

然后,使用C语言编写程序,实现按键扫描、按键消抖、按键识别等功能。

最后,将程序烧写到单片机中,并进行调试。

通过这个过程,我的软件编程能力得到了很大的提高。

4. 实物制作与调试的体会在实训过程中,我将设计好的电路板焊接成实物,并对实物进行调试。

在焊接过程中,我学会了如何正确焊接电路板,以及如何避免常见的焊接问题。

矩阵键盘资料(在实验五十中)

矩阵键盘资料(在实验五十中)

TECHISHINE
有了表 50-2,要写出键盘译码电路的 VHDL 程序就非常容易了,尤其针对有表可以对照
的电路设计,只要使用 CASE-WHEN 或 WHNE-ELSE 语句,便可轻松完成设计。
表 50-2 键盘参数表
SEL2~SEL0 KIN3~KIN0
对应的 键盘译 按键功 按键 码输出 能
010
1101
REG 10010 功能键
1011
C
01100 字母 C
表 50-1 按键位置与数码关系
122
Beijing Techshine Technology Co.
TECHISHINE
SEL2~SEL0 000
KIN3~KIN0 1110 1101 1011
对应的按键 0 6
LAST
0111
CTRL
1110
1
1101
7
001
1011
STEP
0111
EMPTY1
5
1101
B
111
1011
ENTER
0111
NONE
光靠矩阵键盘是无法正确地完成输入工作的,另外还需搭配以下几个电路模块: 1、 时钟产生电路
当一个系统中使用不同操作频率的脉冲波形时,最方便的方法就是利用一个自由计数器 来产生各种频率。本电路中就使用三种不同频率的工作脉冲波形。它们分别是:系统时钟(它 是系统内部所有时钟的提供者,频率最高)、弹跳消除取样信号、键盘扫描信号和七段显示器 扫描信号。在很多的电路设计中,键盘扫描信号和七段显示器扫描信号可以使用相同的时钟 信号,本设计也采用此方法。
Beijing Techshine Technology Co.

单片机 矩阵键盘实验 实验报告

单片机 矩阵键盘实验 实验报告

实验五矩阵键盘实验一、实验内容1、编写程序,做到在键盘上每按一个数字键(0-F)用发光二极管将该代码显示出来。

按其它键退出。

2、加法设计计算器,实验板上有12个按键,编写程序,实现一位整数加法运算功能。

可定义“A”键为“+”键,“B”键为“=”键。

二、实验目的1、学习独立式按键的查询识别方法。

2、非编码矩阵键盘的行反转法识别方法。

三、实验说明1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。

2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。

3、识别键的闭合,通常采用行扫描法和行反转法。

行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。

行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。

然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。

这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。

由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。

行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA实验报告学院:物信学院专业:电信一班小组成员:杨义,王祺,陈鹏,秦成晖指导老师:***目录实验题目 (3)实验目的 (3)实验原理 (3)实验内容 (5)实验程序 (5)实验步骤 (10)实验结果 (10)实验体会 (10)附录 (11)一.实验题目:矩阵键盘显示电路设计二.实验目的:1.了解普通4×4键盘扫描的原理。

2.进一步加深七段码管显示过程的理解。

3.了解对输入/输出端口的定义方法。

三.实验原理:软键盘的工作方式:通常在一个键盘中使用了一个瞬时接触开关,并且用如图所示的简单电路,微处理器可以容易地检测到闭合。

当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的/IO 口的输入将被拉低得到逻辑0。

可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1 或者0。

尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。

当触点闭合时,其弹起就像一个球。

弹起效果将产生如图10-2 所示的好几个脉冲。

弹起的持续时间通常将维持在5ms∼30ms 之间。

如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。

然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。

键盘上阵列这些开关最有效的方法(当需要5 个以上的键时)就形成了一个如图10-3 所示的二维矩阵。

当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O 端被连接的时候)。

一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。

矩阵所需的键的数目显然根据应用程序而不同。

每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。

同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。

四.实验内容:本实验要求完成的任务是通过编程实现对4X4矩阵键盘按下键的键值的读取,并在数码管上完成一定功能(如移动等)的显示。

按键盘的定义,按下“*”键则在数码管是显示“E”键值。

按下“#”键在数码管上显示“F”键值。

其它的键则按键盘上的标识进行显示。

在此实验中数码管与FPGA的连接电路和管脚连接在以前的实验中都做了详细说明,这里不在赘述。

本实验箱上的4X4矩阵键盘的电路原理如图所示五.实验程序:Module key(clk, reset,row, col, key_value );input clk,reset;input [3:0] row;output [3:0] col;output [3:0] key_value;reg [3:0] col;reg [3:0] key_value;reg [5:0] count;//delay_20msreg [2:0] state; //状态标志reg key_flag; //按键标志位reg clk_500khz; //500KHZ时钟信号reg [3:0] col_reg; //寄存扫描列值reg [3:0] row_reg; //寄存扫描行值always @(posedge clk or negedge reset)if(!reset) begin clk_500khz<=0; count<=0; end elsebeginif(count>=50) beginclk_500khz<=~clk_500khz;count<=0;endelse count<=count+1;endalways @(posedge clk_500khz or negedge reset) if(!reset) begin col<=4'b0000;state<=0;endelsebegincase (state)0:begincol[3:0]<=4'b0000;key_flag<=1'b0;if(row[3:0]!=4'b1111) begin state<=1;col[3:0]<=4'b1110;end //有键按下,扫描第一行else state<=0;end1:beginif(row[3:0]!=4'b1111) begin state<=5;end //判断是否是第一行else begin state<=2;col[3:0]<=4'b1101;end //扫描第二行end2:beginif(row[3:0]!=4'b1111) begin state<=5;end //判断是否是第二行else begin state<=3;col[3:0]<=4'b1011;end //扫描第三行end3:beginif(row[3:0]!=4'b1111) begin state<=5;end //判断是否是第三一行else begin state<=4;col[3:0]<=4'b0111;end //扫描第四行end4:beginif(row[3:0]!=4'b1111) begin state<=5;end //判断是否是第一行else state<=0;end5:beginif(row[3:0]!=4'b1111)begincol_reg<=col; //保存扫描列值row_reg<=row; //保存扫描行值state<=5;key_flag<=1'b1; //有键按下endelsebegin state<=0;endendendcaseendalways @(clk_500khz or col_reg or row_reg) beginif(key_flag==1'b1)begincase ({col_reg,row_reg})8'b1110_1110:key_value<=0;8'b1110_1101:key_value<=1;8'b1110_1011:key_value<=2;8'b1110_0111:key_value<=3;8'b1101_1110:key_value<=4;8'b1101_1101:key_value<=5;8'b1101_1011:key_value<=6;8'b1101_0111:key_value<=7;8'b1011_1110:key_value<=8;8'b1011_1101:key_value<=9;8'b1011_1011:key_value<=10;8'b1011_0111:key_value<=11;8'b0111_1110:key_value<=12;8'b0111_1101:key_value<=13;8'b0111_1011:key_value<=14;8'b0111_0111:key_value<=15;endcaseendendendmodule六.实验步骤1、打开QUARTUSII软件,新建一个工程。

2、建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。

3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中提供的示例程序。

4、编写完VHDL程序后,保存起来。

方法同实验一。

5、对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。

编译仿真无误后,依照4X4矩阵键、数码管与FPGA 的管脚连接表或参照附录进行管脚分配。

管脚分配完成后,再进行全编译一次,以使管脚分配生效。

七.实验结果:以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号源模块的时钟选择为2048HZ,按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值。

按下“*”键则在数码管是显示“E”键值。

按下“#”键在数码管上显示“F”键值。

八.实验体会:刚刚开始接触这门课的时候,我们小组什么都不知道,只知道按照老师您打得程序来抄。

然后一步步按步骤做,经过一段时间的学习,学会了程序的运行和管脚的输入及在仪器上的运行,通过阅读简单的程序,来增加自己的知识,然后通过改写成程序来增加对程序的理解。

感觉这次能都把这串代码打出来还是很不容易的,不过大家都有收获就行。

九.附录:相关管脚:表10-2 端口管脚分配表。

相关文档
最新文档