📄 ps2key.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 + -