⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2key.v

📁 PS2键盘实验Verilog HDL代码
💻 V
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN ELECTRONIC CO.,LTD.
**                                      Research centre
**                         http://www.zyinside.com, http://www.zlgmcu.com
**
**---------------------------------------File Info-----------------------------------------------------
** File name:			PS2KEY
** Last modified Date:	2007-7-29
** Last Version:		1.0
** Descriptions:		PS2&UART
**------------------------------------------------------------------------------------------------------
** Created by:		        LI WEI
** Created date:		2007-7-29
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			
** Modified date:		
** Version:				
** Descriptions:		
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
module ps2key(
              keydata, //PS2数据线
              keyclk,  //PS2时钟线
              clk,     //系统时钟 
              reset,   //复位信号
              ledout, //在数码管上显示的通码
              wr_uart,//串口使能
              data_uart//送往串口的数据
              );
input keydata,keyclk,reset,clk;
output[7:0]ledout;
output wr_uart;
output [7:0] data_uart;
reg wr_uart;
reg [7:0] data_uart;
reg[7:0] ledout;
reg  [8:0] data;
reg[3:0]count;
reg r1_BIT_CLK,r2_BIT_CLK;
reg [2:0]number;
reg[7:0]datastore[5:0];
reg flag_shift;
wire nDone;   
/********检测是否有按键按下***************/
always@(posedge clk)
begin
	r1_BIT_CLK<=keyclk;
	r2_BIT_CLK<=r1_BIT_CLK;
end
assign	nDone=~r1_BIT_CLK&r2_BIT_CLK;//取下降沿

always@(posedge clk)
  begin
   if(reset)
     begin
       data <= 9'b0;
       count <= 4'b0;
       wr_uart <= 1'b0;
     end
   else
    begin
     if(nDone)							//如果为下降沿,表示有数据来
       begin
         count<= count+1'b1;			//计数器计数
         if((count>0)&&(count<4'd9))	//取数据的中间8位
         begin
            if(keydata)					//如果数据为高电平
            begin	
                 data<=(data|9'b1000_00000)>>1;	//高位置1并向左移1位
            end
            else  data <= data>>9'd1;			//数据为低时直接左移1位
         end
         else if(count>=4'd10)					//当计数器到10时,即一种11位数据
          begin
               wr_uart<=1'b1;					//置UART的发送信号有效
               data_uart<=data[7:0];			//将接收到的数据输出
               count<=4'b0;						//计数器清0
               data <= 8'b0;					//数据寄存器清0
           end 
       end
    else   wr_uart<=1'b0;						////置UART的发送信号无效
  
end
end

endmodule

 /**************键盘上各个键的码表***********************/
 /*
unsigned char  UnShifted[60][2] = {
0x1C, 'a',
0x32, 'b',
0x21, 'c',
0x23, 'd',
0x24, 'e',
0x2B, 'f',
0x34, 'g',
0x33, 'h',
0x43, 'i',
0x3B, 'j',
0x42, 'k',
0x4B, 'l',
0x3A, 'm',
0x31, 'n',
0x44, 'o',
0x4D, 'p',
0x15, 'q',
0x2D, 'r',
0x1B, 's',
0x2C, 't',
0x3C, 'u',
0x2A, 'v',
0x1D, 'w',
0x22, 'x',
0x35, 'y',
0x1A, 'z',
0x45, '0',
0x16, '1',
0x1E, '2',
0x26, '3',
0x25, '4',
0x2E, '5',
0x36, '6',
0x3D, '7',
0x3E, '8',
0x46, '9',
0x0E, '`',
0x4E, '-',
0x55, '=',
0x5D, '\\',
0x29, ' ',
0x54, '[',
0x5B, ']',
0x4C, ';',
0x52, '\'',
0x41, ',',
0x49, '.',
0x4A, '/',
0x71, '.',
0x70, '0',
0x69, '1',
0x72, '2',
0x7A, '3',
0x6B, '4',
0x73, '5',
0x74, '6',
0x6C, '7',
0x75, '8',
0x7D, '9',
0x0d, ' ',
};

unsigned char  Shifted[59][2] = {
0x1C, 'A',
0x32, 'B',
0x21, 'C',
0x23, 'D',
0x24, 'E',
0x2B, 'F',
0x34, 'G',
0x33, 'H',
0x43, 'I',
0x3B, 'J',
0x42, 'K',
0x4B, 'L',
0x3A, 'M',
0x31, 'N',
0x44, 'O',
0x4D, 'P',
0x15, 'Q',
0x2D, 'R',
0x1B, 'S',
0x2C, 'T',
0x3C, 'U',
0x2A, 'V',
0x1D, 'W',
0x22, 'X',
0x35, 'Y',
0x1A, 'Z',
0x45, '0',
0x16, '1',
0x1E, '2',
0x26, '3',
0x25, '4',
0x2E, '5',
0x36, '6',
0x3D, '7',
0x3E, '8',
0x46, '9',
0x0E, '~',
0x4E, '_',
0x55, '+',
0x5D, '|',
0x29, ' ',
0x54, '{',
0x5B, '}',
0x4C, ':',
0x52, '"',
0x41, '<',
0x49, '>',
0x4A, '?',
0x71, '.',
0x70, '0',
0x69, '1',
0x72, '2',
0x7A, '3',
0x6B, '4',
0x73, '5',
0x74, '6',
0x6C, '7',
0x75, '8',
0x7D, '9',
};*/

                       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -