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

📄 keyboard.v

📁 键盘程序:基于cpld开发环境的4*4键盘程序
💻 V
字号:
/*
矩阵键盘实验1:向用户介绍矩阵键盘扫描实现的方法,没有考虑去抖和判断键弹起的问题;把相应的键值显示在数码管上
*/

module keyboard(clk,rst,row,column,dataout,dataout_7,dataout3) ;

input clk,rst;
input[3:0] column;//列线
output[3:0] row;//行线
output[7:0] dataout,dataout_7,dataout3;//led,数码管显示数据

//output[7:0] en;//数码管显示使能




//scan_row
reg[3:0] row;
reg[15:0] cnt_scan;//扫描频率计数器
always@(posedge clk or negedge rst)
begin
	if(!rst) begin
		row<=4'b1110;
		cnt_scan<=0;
	 end
	else if(scan_en)
	begin
		cnt_scan<=cnt_scan+1;
		if(cnt_scan==16'hffff) begin
			cnt_scan<=16'h0000;
			row[3:1]<=row[2:0];
			row[0]<=row[3];  //4根行线循环送出低电平
		 end
	 end
end
//key_press
reg scan_en;		/*判断键是否弹起*/
always@(posedge clk or negedge rst)
begin
if(!rst)	scan_en<=1'b1;
else
	begin
	if(column==4'b1111)
		scan_en<=1'b1;
	else
		scan_en<=1'b0;
	end
end

//key_value
reg[4:0] scan_key; //扫描码寄存器
always@(posedge clk or negedge rst)
begin
	if(!rst) begin
		scan_key<=16;
	 end
	else begin
		case(row)  //该case结果检测何处有键按下
			4'b1110:
				case(column)
					4'b1110: begin
						scan_key<=0;
					 end
					4'b1101: begin
						scan_key<=1;
					 end
					4'b1011: begin
						scan_key<=2;
					 end
					4'b0111: begin
						scan_key<=3;
					 end
					default:
						scan_key<=16;
				 endcase
			4'b1101:
				case(column)
					4'b1110: begin
						scan_key<=4;
					 end
					4'b1101: begin
						scan_key<=5;
					 end
					4'b1011: begin
						scan_key<=6;
					 end
					4'b0111: begin
						scan_key<=7;
					 end
					default:
						scan_key<=16;
				 endcase
			4'b1011:
				case(column)
					4'b1110: begin
						scan_key<=8;
					 end
					4'b1101: begin
						scan_key<=9;
					 end
					4'b1011: begin
						scan_key<=10;
					 end
					4'b0111: begin
						scan_key<=11;
					end
					default:
						scan_key<=16;
					 
				 endcase
			4'b0111:
				case(column)
					4'b1110: begin
						scan_key<=12;
					 end
					4'b1101: begin
						scan_key<=13;
					 end
					4'b1011: begin
						scan_key<=14;
					 end
					4'b0111: begin
						scan_key<=15;
					 end
					default:
						scan_key<=16;
				 endcase
			 default:
				scan_key<=16;
		 endcase
	 end
end

//output
reg[7:0] dataout,dataout_7,dataout3;
always@(scan_key)
begin
	case(scan_key)
		5'b00000:begin
			dataout=8'b0000_0000;//"1"
			dataout_7=8'b0110_0000;end
		5'b00001:begin
			dataout=8'b0000_0001;//"2"
			dataout_7=8'b1101_1010;end
		5'b00010:begin		
			dataout=8'b0000_0010;//"3"
			dataout_7=8'b1111_0010;end
		5'b00011:begin
			dataout=8'b0000_0011;//"A"
			dataout_7=8'b1110_1110;end			
		5'b00100:begin
			dataout=8'b0000_0100;//"4"
			dataout_7=8'b0110_0110;end
		5'b00101:begin
			dataout=8'b0000_0101;//"5"
			dataout_7=8'b1011_0110;end			
		5'b00110:begin
			dataout=8'b0000_0110;//"6"
			dataout_7=8'b1011_1110;end			
		5'b00111:begin
			dataout=8'b0000_0111;//"B"
			dataout_7=8'b0011_1110;end			
		5'b01000:begin
			dataout=8'b0000_1000;//"7"
			dataout_7=8'b1110_0000;end			
		5'b01001:begin
			dataout=8'b0000_1001;//"8"
			dataout_7=8'b1111_1110;end			
		5'b01010:begin
			dataout=8'b0000_1010;//"9"
			dataout_7=8'b1111_0110;end
		5'b01011:begin
			dataout=8'b0000_1011;//"C"
			dataout_7=8'b0001_1010;end
		5'b01100:begin
			dataout=8'b0000_1100;//"*"
			dataout_7=8'b0000_0001;end
		5'b01101:begin
			dataout=8'b0000_1101;//"0"
			dataout_7=8'b1111_1100;end
		5'b01110:begin
			dataout=8'b0000_1110;//"#"
			dataout_7=8'b0110_1110;end
		5'b01111:begin
			dataout=8'b0000_1111;//"D"
			dataout_7=8'b0111_1010;end
		default:begin
			dataout=8'b1111_1111;
			dataout_7=8'b0000_0000;end
	 endcase
	 dataout3<=dataout_7;
end	

endmodule		

⌨️ 快捷键说明

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