键盘输入显示(共22页)_第1页
键盘输入显示(共22页)_第2页
键盘输入显示(共22页)_第3页
键盘输入显示(共22页)_第4页
键盘输入显示(共22页)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上摘要: 键盘是最常用人机接口设备之一,在嵌入式系统中有着相当广泛的应用。一般自行设计的简易矩阵键盘仅仅是按行、列排列起来的矩阵开关。当需要较多的按键时,则会占用较多的I/O 端口,在软件上则要进行上电复位按键扫描及通信处理,而且还要加上按键的去抖动处理,增大了软硬件开销。而PS/2 键盘,内嵌自动去除按键抖动设计,自动地识别键的按下与释放,软硬件开发简便,价格便宜,稳定可靠,将PS/2 键盘作为嵌入式系统的输入设备已经成为可行的方案。本设计是以现场可编程逻辑器件(FPGA)为核心的PS/2接口键盘的输入识别电路。利用Quartus软件编写verilog HDL硬件描述

2、语言程序以实现键盘部分简单键值的识别与输出。本设计主要以程序为核心,硬件电路的搭建使用FPGA实验箱,将程序顶层文件里定义的输入输出端口与实验箱管脚进行相应的配置,除实验箱上的reset键以外,外设是一个与实验箱通过PS/2接口相连的键盘和VGA接口相连的显示屏。当系统上电后,按下键盘上的按键,实验箱上的数码管可以依次显示从键盘上输入的键值,同时VGA显示屏显示键值。关键字:Ps/2接口键盘、FPGA 、Quartus 、Verilog HDL、 VGA接口键盘输入显示 课程设计目的(1)巩固和加深所学电子技术课程的基本知识, 提高综合运用所学知识的能力;(2)培养学生根据课题需要选

3、用参考书、查阅手册、图表和文献资料的能力,提高学生独立解决工程实际问题的能力(3)通过设计方案的分析比较、设计计算、元件选绎及电路安装调试等环节初步掌握简单实用电路的工程设计方法(4)提高学生的动手能力掌握常用仪器设备的正确使用方法,学会对简单实用电路的实验调试和对整机指标的测试方法,(5)了解与课题有关的电路以及元器件的工程技术规范,能按课程设计任务书的要求编写设计说明书,能正确反映设计和实验成果,能正确绘制电路固等 设计任务与要求 1.任务:设计一个键盘输入显示控制电路 2.要求和指标:(1)由键盘输入0F,总计16个字符,由开发板上的数码管显示;(2) 该字符同时能在VGA上显示输出;3

4、. 扩展要求: (A)能在VGA显示屏上切换字符显示的大小。 (B)能连续显示输入字符; 三、方案设计与论证本电路总共分为分频模块、PS/2键盘输入模块、字符码转换模块、VGA驱动模块。各模块之间的关系如下图所示:使用现场可编程逻辑器件(FPGA)制作,利用Verilog HDL硬件描述语言编程进行控制,然后下载至实验箱实现。利用Quartus软件编写verilog HDL硬件描述语言程序以实现键盘部分简单键值的识别与输出。硬件电路的搭建使用FPGA实验箱,将程序顶层文件里定义的输入输出端口与实验箱管脚进行相应的配置,除实验箱上的reset键以外,外设是一个与实验箱通过PS/2接口相连的键盘。

5、工作原理:对键盘按键进行扫描,采集按键的扫描码,然后字符码转换分为两路传送:一条送入数码显示管进行字符显示;另一条通过字模软件获取键盘输入字的字模数据,送入VGA驱动,进行字符的VGA显示。四单元电路设计与参数计算设计分为三部分。分别为键盘数据接收部分、数码管显示部分和VGA显示部分。模块电路设计及说明:1键盘数据接收部分键盘PS/2的接口简介:接口的六个脚中,只有四个脚有意义,分别是:时钟脚、数据脚、电源脚、电源地。其余为保留脚。PS/2靠系统的PS/2端口提供+5V电源。这里需要用到的即是:时钟脚和数据脚。这两个脚都是集电极开路,所以必须接大阻值的上拉电阻。他们平时保持高电平,有输出时才被

6、拉到低电平,之后自动上浮到高电平。PS/2设备的clock和data平时都是高电平。当设备等待发送数据时,它首先检查clock是否为高。如果为低,则认为PC抑制了通讯,此时它缓冲数据知道获得总线的控制权。如果clock为高电平,PS/2设备则开始向PC发送数据。数据位在clock为高电平时准备好,在clock下降沿被PC读入。数据从键盘发送到主机或从主机发送到键盘,时钟都是PS/2设备产生,主机对时钟控制有优先权,即主机想发送控制指令给PS/2设备时,可以拉低时钟线至少100us。然后再下拉数据线,最后释放时钟线为高。PS/2设备的时钟线和数据线都是集电极开路的,容易实现拉低电平。其数据发送时

7、序如下: 键盘发送时序 键盘接收时序因为我们的功能只涉及到键盘的数据发送,所以对接收不做具体说明。现在的PC机使用的PS/2键盘都默认采用第二套扫描码集,扫描码有两种不同的类型:通码和断码。当一个键被按下或持续按住时,键盘会将改键的通码发送给主机;而当一个键被释放时,键盘会将该键的断码发送给主机。我们做的比较简单,因此只用到了第一类按键。(返回值见附录)第一类按键:通码为1字节,断码为0xF0+通码形式。如1键,其通码为0x16,断码为0xF0 0x1C.在具体的实验过程中,PS/2键盘通过Clock管脚来控制通信方向并且充当本次实验的一个时钟管脚,在键盘时钟下,数据段进行收发数据,本次实验只

8、是使用它来发送数据,未设计键盘接收数据。每按下一个键,data管脚发送一个数据帧,具体格式如下: PS/2键盘扫描码1个起始位总是逻辑08个数据位(LSB)低位在前1个奇偶校验位奇检验1个停止位总是逻辑11个应答位仅用在主机对设备的通讯中此模块的功能说明:当按下一个键时,FPGA在时钟信号下接受来自PS/2键盘的数据(8个数据位),接收完毕后锁存并转化为十六进制数据,例如4ha。当按键放开时,发出信号change。这时开始识别按键,如果接收到8d102,则表示接收到按键Backspace,则清空显示数据。否则,数码管进行译码后则显示键盘的键值。总体来说,此部分分为接收数据模块、数据判断与锁存模

9、块、键值转化模块。2数码管显示部分此模块的功能说明:这部分内容较简单,由于已经得到了键盘信息,在接收到change信号后,且十六进制数据不是8d102时(即不是Backspace清零信号),则根据数字对应的通码反过来找数字,经过8段数码管的译码后显示键盘键值。可显示的键值有:09,af。此部分总体分为数据接收模块、分频模块、位选信号模块、译码模块。之所以有分频主要是为了提供数码管动态扫描的扫描频率,频率要适中。否则数码管不能正常工作。3VGA显示部分 VGA时序控制模块是整个显示控制器的关键部分,最终的输出信号行、场同步信号必须严格按照VGA时序标准产生相应的脉冲信号。对于普通的VGA显示器,

10、其引出线的共含5个信号:G,R,B(三基色信号),HS(行同步信号)VS(场同步信号)。在五个信号时序驱动时,VGA显示器要严格遵循“VGA工业标准”,即640×480×25MHz模式或800×600×40MHz模式,本次字符显示试验采用800×600×40MHz模式。五程序设计程序代码见附录六程序调试1、运行Quartus II软件,新建工程和命名顶层文件。2、建立文件Verilog HDL File。命名为ps2.v 。在文件中写入程序,保存,编译。3、分配管脚。保存,编译。4、先下载简单的程序,已确定实验箱可用。5、之

11、后将生成的.sof文件下载至FPGA实验箱中。6、在键盘上一次输入09,af。观察数码管显示的数据是否与键盘的输入键值相同。7、若不相同或不完全相同,则分模块调试。调试现象:1、分别输入09和af,数码管上均能正确显示,VGA正确显示。2、输入其他的键值,数码管显示0,VGA显示0。七遇到的问题及解决方法1.不会使用Quartus II软件及verilog HDL语言编写程序。学习老师给的资料,并在图书馆借阅资料,尝试编写一些简单的verilog HDL程序,熟悉Quartus II软件及verilog HDL语言编写程序的方法。2. 数码管显示不正确。 不会连接DE0的管

12、脚,管脚配置不正确导致数码管显示异常。查看老师给的文件DE0_User_manual.pdf,学习DE0管脚接法。3.VGA显示时,屏幕无显示,且出现闪屏。VGA的时钟控制信号要求为25M Hz,编程时为编写分频器模块,因此时钟输入为50M Hz。解决办法是利用DE0的锁相环二分频得到25M Hz 输入信号。八结论与心得通过本次课程设计,让我对FPGA有了进一步的了解,虽然我们只做了一些最底层、最基本的设计,也只接触了那么一些小小的内容,但通过整个设计过程使我深深地了解了FPGA的强大功能,认识了一些单元的工作原理。我们小组做的是键盘输入显示,能在DE0的七段数码显示管上显示,也能在VGA上显

13、示键盘输入的字符,从头到尾让我对PS/2键盘、VGA显示原理都有了深刻的认识。在此过程中我们也遇到了许多困难,最开始不会使用Quartus II软件及verilog HDL语言编写程序,我们就开始学习老师给的资料,并在图书馆借阅资料,尝试编写一些简单的verilog HDL程序,熟悉Quartus II软件及verilog HDL语言编写程序的方法,但是对所选的题没有思路,于是我们就看老师所给的程序,理解它的功能,从而得到编程的“灵感”。通过不断地努力,我们初步编写出程序。在调试程序时出现了不少语法错误,在看了verilog HDL语言的书后,我们发现了这些错误。总之,设计

14、过程中困难是多种多样的,但我们没放弃,通过查阅资料、询问老师、小组讨论、商量都一一解决了。在此过程中也让我们提高了真正地去发现问题、分析问题、解决问题的能力,获益匪浅。本次课程设计也让认识到只有真正的理解一个东西的工作原理过后,才知道如何下手去解决问题,盲目地写程序,摘抄别人的东西最终还是一无所获。九参考文献【1】崔葛瑾.基于FPGA的数字电路系统设计.西安电子科技大学出版社.2008【2】郭永贞.数字电路实验与EDA技术.东南大学出版.2010附录一:扫描码表:KEY通码断码045F0 45116F0 1621EF0 1E326F0 26425F0 2552EF0 2E636F0 3673D

15、F0 3D83EF0 3E946F0 46a1CF0 1Cb32F0 32c21F0 21d23F0 23e24F0 24f2BF0 2B附录二:键盘数据接收部分:timescale 1ns / 1ps/module ps2(clk,rst_n,ps2k_clk,ps2k_data,oSEG,hsync,vsync,vga_r,vga_g,vga_b);input clk;/50M时钟信号input rst_n;/复位信号,active_lowinput ps2k_clk;/PS2接口时钟信号input ps2k_data;/PS2接口数据信号 output6:0oSEG;/数码管显示值out

16、put hsync;/行同步信号output vsync;/场同步信号output2:0 vga_r;output2:0 vga_g;output1:0 vga_b;reg6:0oSEG;reg7:0 ps2_asci;/1byte键值,只做简单的按键扫描,以ASCII码保存。/-reg ps2k_clk_r0,ps2k_clk_r1,ps2k_clk_r2;/ps2k_clk状态寄存器wire pos_ps2k_clk; / ps2k_clk上升沿标志位wire neg_ps2k_clk;/ ps2k_clk下降沿标志位always (posedge clk or negedge rst_n

17、) begin /去抖动 if(!rst_n) beginps2k_clk_r0 <= 1'b0;ps2k_clk_r1 <= 1'b0;ps2k_clk_r2 <= 1'b0;endelse begin/锁存状态,sequential executionps2k_clk_r0 <= ps2k_clk;ps2k_clk_r1 <= ps2k_clk_r0;ps2k_clk_r2 <= ps2k_clk_r1;endendassign neg_ps2k_clk = ps2k_clk_r1 & ps2k_clk_r2;/下降沿/-

18、reg7:0 ps2_byte_r;/接收来自PS2的一个字节数据存储器reg7:0 temp_data;/当前接收数据寄存器reg3:0 num;/计数寄存器always (posedge clk or negedge rst_n) begin if(!rst_n) beginnum <= 4'd0;temp_data <= 8'd0;endelse if(neg_ps2k_clk) begin/检测到ps2k_clk的下降沿case (num)4'd0:num <= num+1'b1;4'd1:beginnum <= num+

19、1'b1;temp_data0 <= ps2k_data;/bit0end4'd2:beginnum <= num+1'b1;temp_data1 <= ps2k_data;/bit1end4'd3:beginnum <= num+1'b1;temp_data2 <= ps2k_data;/bit2end4'd4:beginnum <= num+1'b1;temp_data3 <= ps2k_data;/bit3end4'd5:beginnum <= num+1'b1;tem

20、p_data4 <= ps2k_data;/bit4end4'd6:beginnum <= num+1'b1;temp_data5 <= ps2k_data;/bit5end4'd7:beginnum <= num+1'b1;temp_data6 <= ps2k_data;/bit6end4'd8:beginnum <= num+1'b1;temp_data7 <= ps2k_data;/bit7end4'd9:beginnum <= num+1'b1;/odd-even check

21、 bitend4'd10: beginnum <= 4'd0;/ num清零enddefault: ;endcaseendendreg key_f0;/松键标志位,置1表示接收到键盘断码数据8'hf0,再接收到下一个数据后清零reg ps2_state_r;/键盘当前状态,ps2_state_r=1表示有键被按下 always (posedge clk or negedge rst_n) begin/接收数据的相应处理,这里只对1byte的键值进行处理if(!rst_n) beginkey_f0 <= 1'b0;ps2_byte_r <= 8&

22、#39;h45; endelse if(num=4'd10)/刚传送完一个字节数据 begin if(temp_data = 8'hf0) key_f0 <= 1'b1;else beginif(!key_f0) begin/说明有键按下ps2_state_r <= 1'b1;ps2_byte_r <= temp_data;/锁存当前键值endelse beginps2_state_r <= 1'b0;key_f0 <= 1'b0;endendendend数码管显示部分:always (ps2_byte_r) beg

23、incase (ps2_byte_r)/键值转换为ASCII码,只处理十六进制数字 8'h24: ps2_asci <= 8'h45;/E 8'h1c: ps2_asci <= 8'h41;/A8'h23: ps2_asci <= 8'h44;/D8'h2b: ps2_asci <= 8'h46;/F8'h21: ps2_asci <= 8'h43;/C 8'h32: ps2_asci <= 8'h42;/B 8'h45: ps2_asci <= 8

24、'h30; /0 8'h16: ps2_asci <= 8'h31; /1 8'h1e: ps2_asci <= 8'h32; /2 8'h26: ps2_asci <= 8'h33; /3 8'h25: ps2_asci <= 8'h34; /4 8'h2e: ps2_asci <= 8'h35; /5 8'h36: ps2_asci <= 8'h36; /6 8'h3d: ps2_asci <= 8'h37; /7 8'h

25、3e: ps2_asci <= 8'h38; /8 8'h46: ps2_asci <= 8'h39; /9 default: ps2_asci <= 8'h30;endcaseendalways (ps2_asci) begin /oSEG的7位和数码管的7段的codecase(ps2_asci)8'd14: oSEG <= 7'b;/ -t- /reference:DE0 demonstration default8'h41: oSEG <= 7'b; / | |8'h44: oSEG &

26、lt;= 7'b; / lt rt8'h46: oSEG <= 7'b; / | |8'h43: oSEG <= 7'b; / -8'h42: oSEG <= 7'b; / | |8'h30: oSEG <= 7'b; / lb rb8'h31: oSEG <= 7'b; / | |8'h32: oSEG <= 7'b; / -b-8'h33: oSEG <= 7'b;8'h34: oSEG <= 7'b;8&#

27、39;h35: oSEG <= 7'b;8'h36: oSEG <= 7'b;8'h37: oSEG <= 7'b;8'h38: oSEG <= 7'b; 8'h39: oSEG <= 7'b;endcaseend/*clk PIN_G21rst_nPIN_H2 /BUTTON0ps2k_clk PIN_P22ps2k_data PIN_P21oSEG0 PIN_E11oSEG1 PIN_F11oSEG2PIN_H12oSEG3 PIN_H13oSEG4 PIN_G12oSEG5 PIN_F1

28、2oSEG6 PIN_F13 */VGA显示部分:reg 1:0 c;wire clk_25m;pll u1 (.inclk0(clk), .c0(clk_25m);/-/ 坐标计数reg9:0 x_cnt;/行坐标reg9:0 y_cnt;/列坐标reg7:0 char_line0,char_line1,char_line2,char_line3,char_line4,char_line5;reg7:0 char_line6,char_line7,char_line8,char_line9,char_linea;reg7:0 char_lineb,char_linec,char_lined,

29、char_linee,char_linef;always (posedge clk_25m or negedge rst_n)if(!rst_n) x_cnt <= 10'd0;else if(x_cnt = 10'd799) x_cnt <= 10'd0;else x_cnt <= x_cnt+1'b1;always (posedge clk_25m or negedge rst_n)if(!rst_n) y_cnt <= 10'd0;else if(y_cnt = 10'd524) y_cnt <= 10'

30、;d0;else if(x_cnt = 10'd799) y_cnt <= y_cnt+1'b1;/-/ VGA场同步,行同步信号reg hsync_r,vsync_r;/同步信号 always (posedge clk_25m or negedge rst_n)if(!rst_n) hsync_r <= 1'b1;else if(x_cnt = 10'd0) hsync_r <= 1'b0;/产生hsync信号else if(x_cnt = 10'd96) hsync_r <= 1'b1;always (pose

31、dge clk_25m or negedge rst_n)if(!rst_n) vsync_r <= 1'b1; else if(y_cnt = 10'd0) vsync_r <= 1'b0;/产生vsync信号else if(y_cnt = 10'd2) vsync_r <= 1'b1;assign hsync = hsync_r;assign vsync = vsync_r;/-/有效显示标志位产生reg valid_yr;/行显示有效信号always (posedge clk_25m or negedge rst_n)if(!rs

32、t_n) valid_yr <= 1'b0;else if(y_cnt = 10'd32) valid_yr <= 1'b1;else if(y_cnt = 10'd512) valid_yr <= 1'b0;wire valid_y = valid_yr;reg valid_r;/ VGA有效显示区标志位always (posedge clk_25m or negedge rst_n)if(!rst_n) valid_r <= 1'b0;else if(x_cnt = 10'd141) && va

33、lid_y) valid_r <= 1'b1;else if(x_cnt = 10'd781) && valid_y) valid_r <= 1'b0;wire valid = valid_r;/wire9:0 x_dis;/横坐标显示有效区域相对坐标值0-639wire9:0 y_dis;/竖坐标显示有效区域相对坐标值0-479/assign x_dis = x_cnt - 10'd142;assign y_dis = y_cnt - 10'd33;/-/- / VGA色彩信号产生/*RGB = 000 黑色RGB = 10

34、0红色= 001 蓝色= 101紫色= 010绿色= 110黄色= 011青色= 111白色*/*EDN字模参数*/always (ps2_asci)begin if(ps2_asci=8'h30) begin char_line0<= 8'h00; char_line1 <= 8'h00; char_line2 <= 8'h00; char_line3 <= 8'h18; char_line4 <= 8'h24; char_line5 <= 8'h42; char_line6 <= 8'

35、h42; char_line7 <= 8'h42;char_line8 <= 8'h42;char_line9 <= 8'h42;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h24;char_lined <= 8'h18;char_linee <= 8'h00;char_linef <= 8'h00; /0endelse if(ps2_asci=8'h31) begin char_line0&l

36、t;= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h10;char_line3 <= 8'h70;char_line4 <= 8'h10;char_line5 <= 8'h10;char_line6 <= 8'h10;char_line7 <= 8'h10;char_line8 <= 8'h10;char_line9 <= 8'h10;char_linea <= 8'h10;char_lineb <=

37、 8'h10;char_linec <= 8'h7C;char_lined <= 8'h00;char_linef <= 8'h00; /1end else if(ps2_asci=8'h32) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h3C;char_line3 <= 8'h42;char_line4 <= 8'h42;char_line5 <= 8'h42;char_l

38、ine6 <= 8'h04;char_line7 <= 8'h04;char_line8 <= 8'h08;char_line9 <= 8'h10;char_linea <= 8'h20;char_linec <= 8'h42;char_lined <= 8'h7E;char_linee <= 8'h00;char_linef <= 8'h00;/2end else if(ps2_asci=8'h33) begin char_line0<= 8'h

39、00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h3C;char_line4 <= 8'h42;char_line5 <= 8'h42;char_line6 <= 8'h04;char_line7 <= 8'h18;char_line8 <= 8'h04;char_line9 <= 8'h02;char_linea <= 8'h02;char_lineb <= 8'h42;

40、char_linec <= 8'h44;char_lined <= 8'h38;char_linee <= 8'h00;char_linef <= 8'h00; /3end else if(ps2_asci=8'h34) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h04;char_line4 <= 8'h0C;char_line5 <=

41、8'h14;char_line6 <= 8'h24;char_line7 <= 8'h24;char_line8 <= 8'h44;char_line9 <= 8'h44;char_linea <= 8'h7E;char_lineb <= 8'h04;char_linec <= 8'h04;char_lined <= 8'h1E;char_linee <= 8'h00;char_linef <= 8'h00; /4end else if(ps2_a

42、sci=8'h35) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h7E;char_line4 <= 8'h40;char_line5 <= 8'h40;char_line6 <= 8'h40;char_line7 <= 8'h58;char_line8 <= 8'h64;char_line9 <= 8'h02;char_linea

43、 <= 8'h02;char_lineb <= 8'h42;char_linec <= 8'h44;char_lined <= 8'h38;char_linee <= 8'h00;char_linef <= 8'h00; /5end else if(ps2_asci=8'h36)beginchar_line0 <= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h1C;c

44、har_line4 <= 8'h24;char_line5 <= 8'h40;char_line6 <= 8'h40;char_line7 <= 8'h58;char_line8 <= 8'h64;char_line9 <= 8'h42;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h24;char_lined <= 8'h18;char_linee <= 8'h00;char

45、_linef <= 8'h00; /6end else if(ps2_asci=8'h37) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h7E;char_line4 <= 8'h44;char_line5 <= 8'h44;char_line6 <= 8'h08;char_line7 <= 8'h08;char_line8 <= 8

46、9;h10;char_line9 <= 8'h10;char_linea <= 8'h10;char_lineb <= 8'h10;char_linec <= 8'h10;char_lined <= 8'h10;char_linee <= 8'h00;char_linef <= 8'h00; /7end else if(ps2_asci=8'h38) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2

47、<= 8'h00;char_line3 <= 8'h3C;char_line4 <= 8'h42;char_line5 <= 8'h42;char_line6 <= 8'h42;char_line7 <= 8'h24;char_line8 <= 8'h18;char_line9 <= 8'h24;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h42;char_lined <

48、;= 8'h3C;char_linee <= 8'h00;char_linef <= 8'h00; /8end else if(ps2_asci=8'h39) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h18;char_line4 <= 8'h24;char_line5 <= 8'h42;char_line6 <= 8'h42;char

49、_line7 <= 8'h42;char_line8 <= 8'h26;char_line9 <= 8'h1A;char_linea <= 8'h02;char_lineb <= 8'h02;char_linec <= 8'h24;char_lined <= 8'h38;char_linee <= 8'h00;char_linef <= 8'h00; /9end else if(ps2_asci=8'h41) begin char_line0<= 8

50、9;h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h10;char_line4 <= 8'h10;char_line5 <= 8'h18;char_line6 <= 8'h28;char_line7 <= 8'h28;char_line8 <= 8'h24;char_line9 <= 8'h3C;char_linea <= 8'h44;char_lineb <= 8'h

51、42;char_linec <= 8'h42;char_lined <= 8'hE7;char_linee <= 8'h00;char_linef <= 8'h00;/Aendelse if(ps2_asci=8'h42) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'hF8;char_line4 <= 8'h44;char_line5 <=

52、 8'h44;char_line6 <= 8'h44;char_line7 <= 8'h78;char_line8 <= 8'h44;char_line9 <= 8'h42;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h44;char_lined <= 8'hF8;char_linee <= 8'h00;char_linef <= 8'h00; /Bendelse if(ps2_a

53、sci= 8'h43) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'h3E;char_line4 <= 8'h42;char_line5 <= 8'h42;char_line6 <= 8'h80;char_line7 <= 8'h80;char_line8 <= 8'h80;char_line9 <= 8'h80;char_line

54、a <= 8'h80;char_lineb <= 8'h42;char_linec <= 8'h44;char_lined <= 8'h38;char_linee <= 8'h00;char_linef <= 8'h00;/Cend else if(ps2_asci=8'h44) begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'hF8;

55、char_line4 <= 8'h44;char_line5 <= 8'h42;char_line6 <= 8'h42;char_line7 <= 8'h42;char_line8 <= 8'h42;char_line9 <= 8'h42;char_linea <= 8'h42;char_lineb <= 8'h42;char_linec <= 8'h44;char_lined <= 8'hF8;char_linee <= 8'h00;cha

56、r_linef <= 8'h00; /Dend else if(ps2_asci=8'h45) beginchar_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_line3 <= 8'hFC;char_line4 <= 8'h42;char_line5 <= 8'h48;char_line6 <= 8'h48;char_line7 <= 8'h78;char_line8 <= 8

57、9;h48;char_line9 <= 8'h48;char_linea <= 8'h40;char_lineb <= 8'h42;char_linec <= 8'h42;char_lined <= 8'hFC;char_linee <= 8'h00;char_linef <= 8'h00;/Eend else begin char_line0<= 8'h00;char_line1 <= 8'h00;char_line2 <= 8'h00;char_lin

58、e3 <= 8'hFC;char_line4 <= 8'h42;char_line5 <= 8'h48;char_line6 <= 8'h48;char_line7 <= 8'h78;char_line8 <= 8'h48;char_line9 <= 8'h48;char_linea <= 8'h40;char_lineb <= 8'h40;char_linec <= 8'h40;char_lined <= 8'hE0;char_linee <= 8'h00;char_linef <= 8'h00;/Fendendreg4:0 char_bit;/显示位计算always (posedge clk_25m or negedge rst_n)if(!rst_n) char_bit <= 5'h1f;else if(x_cnt =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论