key_beep按键控制蜂鸣器程序及流程图

这篇具有很好参考价值的文章主要介绍了key_beep按键控制蜂鸣器程序及流程图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.试验任务:

使用按键控制蜂鸣器发声。 初始状态为蜂鸣器鸣叫,按下开关后蜂鸣器停
止鸣叫,再次按下开关,蜂鸣器重新鸣叫。

2. 按键消抖

蜂鸣器流程图,# verilog,FPGA开发,流程图,fpga开发,单片机

3.程序设计

蜂鸣器流程图,# verilog,FPGA开发,流程图,fpga开发,单片机

3.1消抖模块

// An highlighted block
module key_debounce(             //消抖模块 
    input sys_clk,               //时钟信号,50Mhz
	input sys_rst_n,             //复位信号         
	
	input key,                   //按键
	output reg key_flag,             //按键有效的标志 
	output reg key_value             //按键有效的值
);

reg key_reg;                     //key的寄存器,比对两个时钟时将值放在寄存器内
reg [19:0]delay_cnt;             //延时20ns的寄存器,20ms=20000000ns,20000000ns/20=1000000个时钟周期,位宽为20位

always @(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)begin          //按下复位按键
	key_reg <= 1'b1;             //key_reg按键为低电平有效,所以拉高
	delay_cnt <= 20'd0;          //计数器清零
	end
	else begin
		key_reg <= key;          //将key的值存入寄存器中(注,key的值等到下一个边沿过来时,才会传递给key_reg,既key_reg的值和key的值相差一个时钟周期)
		if(key_reg!=key)               //上一个值是否和当前值相同,若按下按键则当前值和上一值不同,则进入该语句
			delay_cnt <= 32'd100_0000;      //把delay_cnt寄存器充满20ms     
		else if(key_reg==key)begin     //上一个值是否和当前值相同,若没有按按键则当前值和上一值相同,则进入该语句
			if(delay_cnt > 32'd0)
				delay_cnt <=delay_cnt-1'b1; //
			else
				delay_cnt <=delay_cnt;
		end
	end
end

always @(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)begin 
		key_flag <= 1'b0;       //如果复位将flag清零
		key_value <= 1'b1;      //为低时才判定按键按下
	end
	else begin
		if(delay_cnt == 32'd1)begin
			key_flag <= 1'b1;
			key_value <= key; 
		end
		else begin
			key_flag <= 1'b0;
			key_value <= key_value;
		end
	end
end

endmodule

3.2消抖模块流程图

蜂鸣器流程图,# verilog,FPGA开发,流程图,fpga开发,单片机
蜂鸣器流程图,# verilog,FPGA开发,流程图,fpga开发,单片机文章来源地址https://www.toymoban.com/news/detail-520481.html

3.3 蜂鸣器驱动模块程序

// An highlighted block
module beep_control(             //消抖模块 
    input sys_clk,               //时钟信号,50Mhz
	input sys_rst_n,             //复位信号         
	
	input key_flag,             //按键有效的标志 
	input key_value,             //按键有效的值
	output reg beep
);

always @(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)
		beep <= 1'b1;
	else if(key_flag&&(~key_value))
		beep <=~beep;
end

endmodule

3.4 顶层例化模块程序

// An highlighted block
module top_key_beep(              
    input sys_clk,               //时钟信号,50Mhz
	input sys_rst_n,             //复位信号         
	input key,        
	output beep
);

wire key_flag;
wire key_value;

key_debounce key_debounce_u(
	.sys_clk (sys_clk),
	.sys_rst_n (sys_rst_n),
	.key (key),
	.key_flag (key_flag),
    .key_value (key_value)
);

beep_control beep_control_u(
	.sys_clk (sys_clk),
	.sys_rst_n (sys_rst_n),
	.key_flag (key_flag),
	.key_value (key_value),
	.beep (beep)
);
endmodule

3.5 ucf模块

// An highlighted block
NET sys_clk             TNM_NET = sys_clk_pin;
TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 20ns HIGH 50%;

#------------------------------系统时钟和复位----------------------------------- 
NET sys_clk          LOC = N8  | IOSTANDARD = "LVCMOS33";   
NET sys_rst_n        LOC = G16 | IOSTANDARD = "LVCMOS33"; 

NET "key"            LOC = P5  | IOSTANDARD = "LVCMOS33";
NET beep             LOC = P4  | IOSTANDARD = "LVCMOS33";

到了这里,关于key_beep按键控制蜂鸣器程序及流程图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32】STM32学习笔记-按键控制LED 光敏传感器控制蜂鸣器(08)

    led.h led.c key.h key.c main.c 电路图: 实物图: buzzer.h buzzere.c lightsensor.h lightsensor.cpp main.c 04-Key控制LED.rar 05-光敏传感器控制蜂鸣器.rar 参考: 【STM32】江科大STM32学习笔记汇总

    2024年04月23日
    浏览(54)
  • 【stm32】hal库学习笔记-GPIO按键控制LED和蜂鸣器(超详细!)

    注:本学习笔记基于stm32f4系列 使用的开发板为正点原子stmf407ZGT6探索者开发板 GPIO引脚使用时,可输入或输出数字信号 例如: 检测按键输入信号(Read_Pin)输出信号(Write_Pin) 输出信号点亮或熄灭LED GPIO引脚内部结构图 GPIO状态 输入浮空状态 :上拉下拉电阻均不使用(复位时

    2024年01月20日
    浏览(54)
  • 基于STM32CubeMX与keil采用按键外部中断方式控制LED与蜂鸣器

    这篇文章详细记录外部中断方式控制LED的亮灭以及蜂鸣器的开关;本文从原理图开始到最后实现功能,内容详细。 本栏目的所有都是基于STM32F407ZET6芯片,博主采用的是普中的天马F407开发板。 实现功能:LED0与LED1默认熄灭,蜂鸣器默认关闭。按下按键KEY0,控LED0亮灭;按下按

    2024年02月16日
    浏览(52)
  • PADS-按键、蜂鸣器、继电器PCB封装设计

    放置一个表贴端点,更改矩形尺寸,同时计算与原点的距离,这里我们按7.9+0.2最大值来放置   分步与重复,放置右边的端点,然后根据样式,先画一个矩形,然后改变宽的尺寸,3.8/1.2得出1.9 同样改一下长的坐标6.3/2=3.15  把线宽改细一点 W 0.1,或者双击改线宽  添加倒角

    2024年02月13日
    浏览(55)
  • 嵌入式系统项目设计——基于LED、按键、蜂鸣器的打地鼠游戏(完整代码)

    内容摘自上学期嵌入式系统课程设计最终的实验报告,因为CSDN不支持上传word资料,所以我就摘录下来写进文章里了,希望可以帮助到你 1.1选题背景 打地鼠游戏是一种非常受小孩子欢迎的游戏,拥有数量极其广大的受众,所以它的市场前景非常广阔。当今社会虽然存在各种各

    2024年02月09日
    浏览(55)
  • 基于C51控制蜂鸣器

    🐋 前言:本实验基于STC89C52RC单片机,根据电路原理图编程控制蜂鸣器。由于51系列单片机结构大同小异,读者可根据此博客举一反三,实现所需完成的功能。 🐬 目录: 一、蜂鸣器介绍 二、电路原理图分析 三、实现蜂鸣器鸣叫 🐇 实验所选单片机及结构展示(以普中C51为例,

    2024年02月05日
    浏览(40)
  • 蜂鸣器分类及声音控制说明

    有源蜂鸣器:         内部还有震荡电路(震荡源),可将恒定的直流电转化成一定频率的脉冲信号 无源蜂鸣器:         内部不带震荡源,直流信号无法令其鸣叫 1. 有源蜂鸣器 是直流电压驱动,不需要利用交流信号进行驱动,只需要对驱动口输出驱动电平并通过三

    2024年02月09日
    浏览(37)
  • 第二十一篇、基于Arduino uno,控制有源蜂鸣器和无源蜂鸣器发出声音——结果导向

    说明:有源蜂鸣器按照一定的频率报警,无源蜂鸣器则是一直报警,都采用非阻塞方式编写,如果是你想要的,可以接着往下看。 说明:有源蜂鸣器和无源蜂鸣器看上去一样,但是背面不一样,第一张图是有源蜂鸣器,第二张图是无源蜂鸣器。也有三个引脚的,其实都是一样

    2024年02月07日
    浏览(48)
  • STM32 HAL库实现三位数码管显示(74HC595+按键+蜂鸣器)

    1、加强数码管学习,实现数码显示变量数据(三位数的显示); 2、3位数码+2个按键+蜂鸣器实现模拟电磁炉功率调节及显示; 关于74HC595的STM32F103的驱动以及数码的显示等请查阅我写的上一篇博客:https://blog.csdn.net/luojuan198780/article/details/136653377 实验效果参考下面网址视频:

    2024年03月17日
    浏览(85)
  • 【嵌入式系统与入门】Day02 Arduino 按键、蜂鸣器与湿温度传感器

    目的:控制电动机或其他电气设备运行,常用来 连通或断开 ,控制电路 原理:K1、K2、K3、K4【开关量】与数字引脚相连,通过对按键操作,展现为电平的高低 不按的情况,K1连接R1,与VCC相连,表现为高电平 按下键时,K1直接与GND相连,表现为低电平 k1被按下时,看窗口监视

    2023年04月22日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包