PS2键盘编码键盘编码Verilog源程序源程序
之前探讨过PS/2键盘编解码以及数据传输协议,这次自己动手实现了利用FPGA接收键盘编码,然后通过串口传
输到PC。做的比较简单,只是通过FPGA把大写字母A-Z转换成相应的ASCII码,只要字母按键被按下,就能在串
口调试助手里显示相应大写字母。下面就共享代码吧!
除了顶层模块,三个底层模块分别为PS/2传输处理模块、串口传输模块以及串口波特率选择模块(下面只给出顶层模块和PS/2传输处理模块的Verilog代码)。
Module Ps2_key(Clk,Rst_n,Ps2k_clk,Ps2k_data,Rs232_tx);
Input Clk; //50M时钟信号
Input Rst_n; //复位信号
Input Ps2k_clk; //PS2接口时钟信号
Input Ps2k_data; //PS2接口数据信号
Output Rs232_tx; // RS232发送数据信号
Wire[7:0] Ps2_byte; // 1byte键值
Wire Ps2_state; //按键状态标志位
Wire Bps_start; //接收到数据后,波特率时钟启动信号置位
Wire Clk_bps; // Clk_bps的高电平为接收或者发送数据位的中间采样点
Ps2scan Ps2scan( .Clk(Clk), //按键扫描模块
.Rst_n(Rst_n),
.Ps2k_clk(Ps2k_clk),
.Ps2k_data(Ps2k_data),
.Ps2_byte(Ps2_byte),
.Ps2_state(Ps2_state)
);
Speed_select Speed_select( .Clk(Clk),
.Rst_n(Rst_n),
.Bps_start(Bps_start),
.Clk_bps(Clk_bps)
);
My_uart_tx My_uart_tx( .Clk(Clk),
.Rst_n(Rst_n),
.Clk_bps(Clk_bps),
.Rx_data(Ps2_byte),
.Rx_int(Ps2_state),
.Rs232_tx(Rs232_tx),
.Bps_start(Bps_start)
);
Endmodule
Module Ps2scan(Clk,Rst_n,Ps2k_clk,Ps2k_data,Ps2_byte,Ps2_state);
Input Clk; //50M时钟信号
Input Rst_n; //复位信号
Input Ps2k_clk; //PS2接口时钟信号
Input Ps2k_data; //PS2接口数据信号