按键控制闹钟模块 Verilog 设计与原理

该模块通过按键设置闹钟的时、分,达到设定时间后,响起提示音;可以用按键开启或关闭闹钟,闹钟处于开启状态用 LED 灯显示。

//闹钟
    input rst;             // 复位信号
    input key;             // 按键信号

    output  reg led;            // LED指示灯
    output reg alarm_out;  // 闹钟输出信号
// 定义闹钟设置模块
reg z1;
reg z2;
reg alarm_enable ;       // 闹钟使能
reg [4:0] alarm_min ;    // 闹钟分钟数
reg [3:0] alarm_hour ;   // 闹钟小时数
reg [3:0] shif;             //状态(调节时分)
always @(posedge clk) begin
    if (rst) begin
        alarm_enable <= 0;
        alarm_min <= 0;
        alarm_hour <= 0;
		  shif <= 0;
    end else begin
        if (key) begin   // 按键按下
            // 设置闹钟时间
			if(key_flag1 && !z1) begin
				shif <= shif+1;
				if(shif==4) begin
					shif <= 1;
				end;
				end;
			if(shif==1) begin
				if(key_flag2 && !z2) begin
					alarm_min <= alarm_min+1;
					if(alarm_min==60) begin
						alarm_min <= 0;
					end;
				end;
			end;
			if(shif==2) begin
				if(key_flag2 && !z2) begin
					alarm_hour <= alarm_hour+1;
					if(alarm_hour==24) begin
						alarm_hour <= 0;
					end;
				end;
			end;
            alarm_enable <= 1;
        end else begin   // 按键释放
            alarm_enable <= 0;
        end
    end
	z1 <= key_flag1;
	z2 <= key_flag2;
	
end
// 定义闹钟响铃模块
reg [4:0] ring_cnt = 0;     // 响铃计数器
reg [30:0] cnto=0;

设计原理:

  1. 定义输入信号 rstkey,表示复位信号和按键信号。
  2. 定义输出信号 ledalarm_out,表示 LED 指示灯和闹钟输出信号。
  3. 定义 reg 类型变量 z1z2alarm_enablealarm_minalarm_hourshifring_cnt,分别表示按键状态、闹钟使能、闹钟分钟数、闹钟小时数、状态(调节时分)和响铃计数器。
  4. 通过 always 块和 posedge 时钟边沿触发,实现按键操作和闹钟设置。
  5. rst=1 时,将闹钟使能、闹钟分钟数、闹钟小时数和状态都清零。
  6. key=1 时,表示有按键按下,根据状态 shif 的值,决定按键的操作。当 shif=1 时,表示正在调节闹钟分钟数,按下 key 时,闹钟分钟数加 1,当达到 60 时,重置为 0。当 shif=2 时,表示正在调节闹钟小时数,按下 key 时,闹钟小时数加 1,当达到 24 时,重置为 0。同时,设置闹钟使能为 1,表示开启闹钟。
  7. key=0 时,表示按键释放,将闹钟使能设为 0,表示关闭闹钟。
  8. always 块中,还需要更新按键状态 z1z2
  9. 定义响铃计数器 ring_cnt 和计数器 cnto,用于控制闹钟响铃的持续时间。当闹钟使能为 1 且当前时间等于设定时间时,闹钟响铃,同时闹钟输出信号为 1,LED 指示灯也亮起。同时,ring_cnt 计数器开始计数,当计数器达到一定值时,响铃停止,闹钟输出信号和 LED 指示灯也恢复为 0。
按键控制闹钟模块 Verilog 设计与原理

原文地址: http://www.cveoy.top/t/topic/oTcU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录