数字IC笔试——乐鑫提前批笔试编程题源码

网上有很多乐鑫的笔试原题与部分答案,我就不重复了,这里主要针对编程题进行讲解与源码提供,如有不当或者错误欢迎指正。

1、请实现对4*4矩阵式健盘的按键识别
在这里插入图片描述
由图可知,键盘的每一列通过一个上拉电阻,接到VCC。在检测有没有按键按下时,我们可以,先使行线同时为0,直到有一根列线被下拉到0。这时知道,有按键按下,但并不知道,是列线的确切位置。我们可以,扫描每一个列线,直到发现列线的位置。状态转换图如下图所示:
在这里插入图片描述
在S_0状态,所有的行被置为0,当S_col为(有一个列被置为0)1时,到S_1状态。S_1状态只有第一行为低电平,其余为高电平,检测是否有列为高电平,如果S_col为1则跳转到S_5,等待按键释放,如果S_col为0,进入S_2状态开始检测第二行。
代码如下:
同步模块

module Synchronizer(output reg S_col,input[3:0]col,input clk,rst);
	reg A_col;
	
	always@(posedge clk,posedge rst)
	begin
		if (rst==1'b1) begin A_col<=1'b0;S_col<=1'b0; end
		else begin
			A_col<=(col[0]&&col[1]&&col[2]&&col[3]);
			S_col<=A_col;
		end
	end
endmodule 

列信号产生模块

module col_Signal (output reg[3:0]col,input [15:0]Key,input[3:0]row);
	
	//扫描有效键所在列
	always@(Key,row)
	begin
		col[0]=(Key[0]&&row[0])||(Key[1]&&row[1])||(Key[2]&&row[2])||(Key[3]&&row[3]);
		col[1]=(Key[4]&&row[0])||(Key[5]&&row[1])||(Key[6]&&row[2
  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值