矩阵键盘制作电子钢琴
特别羡慕小墨同学的FPGA学习打卡日记,自己也在学习FPGA,但是我的文笔有限,水平也不高,没有人帮助,全靠至芯的网上认识的两位老师提点,都是自己学习的一些成果。研究了一周的矩阵键盘,还是和单片机的矩阵键盘原理有很大的差别,但是总算是搞定了,心情很好。附上代码,供大家参考和指正。写于接触FPGA一个月左右时。
static/image/hrline/line3.png
module beep_p(
input wire clk,
input wire rst_n,
input wire hang,
output wire lie,
output reg bee
);
reg shijian ;
reg jishu;
reg bianhua;
reg lie1;
always @(posedge clk or negedge rst_n)
if(rst_n==0)
lie1=4'b0111;
else if(hang==4'b0111|hang==4'b1011|hang==4'b1101|hang==4'b1110)
lie1<=lie1;
else
lie1={lie1,lie1};
assign lie=lie1;
always @(posedge clk or negedge rst_n)
case({lie,hang})
8'b0111_0111:shijian<=18'd191131;
8'b1011_0111:shijian<=18'd170241;
8'b1101_0111:shijian<=18'd151699;
8'b1110_0111:shijian<=18'd143184;
8'b0111_1011:shijian<=18'd127551;
8'b1011_1011:shijian<=18'd113636;
8'b1101_1011:shijian<=18'd101235;
8'b1110_1011:shijian<=18'd95547;
8'b0111_1101:shijian<=18'd85135;
8'b1011_1101:shijian<=18'd75838;
8'b1101_1101:shijian<=18'd71581;
8'b1110_1101:shijian<=18'd63776;
8'b0111_1110:shijian<=18'd56818;
8'b1011_1110:shijian<=18'd50618;
8'b1101_1110:shijian<=18'd47778;
8'b1110_1110:shijian<=18'd42564;
default:shijian<='b0;
endcase
always @(posedge clk or negedge rst_n)
if(rst_n==0)
jishu<=0;
else if(jishu==shijian)
jishu<=0;
else
jishu=jishu+1;
always @(posedge clk or negedge rst_n)
if(rst_n==0)
bianhua<=0;
else if(jishu<(shijian)/2)
bianhua<=1;
else if(jishu>(shijian)/2)
bianhua<=0;
else
bianhua<=bianhua;
always @(posedge clk or negedge rst_n)
if(rst_n==0)
bee<=0;
else if(bianhua==0)
bee<=0;
else
bee<=1;
endmodule
页:
[1]