|
新近写的,水平有限,欢迎拍砖。
PS2键盘部分参考了特权的例程,这里表示感谢。
http://blog.ednchina.com/ilove314/153929/message.aspx
ps2_keyboard_test.v
----------------------------------------------------------
module ps2_keyboard_test(
input CLOCK_50,
input Q_KEY,
// PS2 Interface
input PS2_CLK,
input PS2_DAT,
// LCD1602 Interface
output [7:0] LCD1602_DATA, // LCD1602数据总线
output LCD1602_E, // LCD1602使能
output LCD1602_RS, // LCD1602指令数据选择
output LCD1602_RW // LCD1602读写选择
);
//++++++++++++++++++++++++++++++++++++++
// PS2键盘采集 开始
//++++++++++++++++++++++++++++++++++++++
wire [7:0] key_val; // 单一键值ASCII码
wire key_pressed; // 键盘按下标志
ps2_keyboard_drive ps2_u0(
.clk(CLOCK_50),
.rst_n(Q_KEY),
//
.ps2_clk(PS2_CLK),
.ps2_dat(PS2_DAT),
//
.key_pressed(key_pressed),
.key_val(key_val)
);
//--------------------------------------
// PS2键盘采集 结束
//--------------------------------------
//++++++++++++++++++++++++++++++++++++++
// LCD1602显示 开始
//++++++++++++++++++++++++++++++++++++++
// 0 ~ (8*16-1) = 128
reg [127:0] row1_val; // LCD1602 第1行字符
reg [127:0] row2_val; // LCD1602 第2行字符
always @ (posedge CLOCK_50, negedge Q_KEY)
if (!Q_KEY)
begin
// 16bits-> 0123456789ABCDEF <-
row1_val = "PS2 rcved is ";
row2_val = "Amy-studio Pub ";
end
else
row1_val[7:0] <= key_val;
// 例化LCD1602驱动
lcd1602_drive lcd_1602_u0(
.clk (CLOCK_50),
.rst_n (Q_KEY),
// LCD1602 Input Value
.row1_val (row1_val),
.row2_val (row2_val),
// LCD1602 Interface
.lcd_data (LCD1602_DATA),
.lcd_e (LCD1602_E),
.lcd_rs (LCD1602_RS),
.lcd_rw (LCD1602_RW)
);
//--------------------------------------
// LCD1602显示 结束
//--------------------------------------
endmodule
---------------------------------------------------------- |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|