实验八按键消抖控制LED亮灭下载

weixin_39821260 2019-07-24 06:00:28
实验八按键消抖控制LED亮灭 实验八按键消抖控制LED亮灭 实验八按键消抖控制LED亮灭
相关下载链接://download.csdn.net/download/augusdi/3731316?utm_source=bbsseo
...全文
25 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
基于FPGA verilog设计按键消抖实验Quartus9.1工程源码+设计说明文件,可以做为你的学习设计参考。 //说明:当三个独立按键的某一个被按下后,相应的LED被点亮; // 再次按下后,LED熄灭,按键控制LED亮灭 module sw_debounce( clk,rst_n, sw_in,sw1_n,sw2_n,sw3_n,sw4_n, led_d3,led_d4,led_d5,led_d6 ); input clk; //主时钟信号,50MHz input rst_n; //复位信号,低有效 input sw1_n,sw2_n,sw3_n,sw4_n; //三个独立按键,低表示按下 output led_d3,led_d4,led_d5,led_d6; //发光二极管,分别由按键控制 output sw_in; assign sw_in = 1'b1; //--------------------------------------------------------------------------- reg[3:0] key_rst; always @(posedge clk or negedge rst_n) if (!rst_n) key_rst <= 4'b1111; else key_rst <= {sw4_n,sw3_n,sw2_n,sw1_n}; reg[3:0] key_rst_r; //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中 always @ ( posedge clk or negedge rst_n ) if (!rst_n) key_rst_r <= 4'b1111; else key_rst_r <= key_rst; //当寄存器key_rst由1变为0时,led_an的值变为高,维持一个时钟周期 wire[3:0] key_an = key_rst_r & ( ~key_rst); //--------------------------------------------------------------------------- reg[19:0] cnt; //计数寄存器 always @ (posedge clk or negedge rst_n) if (!rst_n) cnt <= 20'd0; //异步复位 else if(key_an) cnt <=20'd0; else cnt <= cnt + 1'b1; reg[3:0] low_sw; always @(posedge clk or negedge rst_n) if (!rst_n) low_sw <= 4'b1111; else if (cnt == 20'hfffff) //满20ms,将按键值锁存到寄存器low_sw中 cnt == 20'hfffff low_sw <= {sw4_n,sw3_n,sw2_n,sw1_n}; //--------------------------------------------------------------------------- reg [3:0] low_sw_r; //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中 always @ ( posedge clk or negedge rst_n ) if (!rst_n) low_sw_r <= 4'b1111; else low_sw_r <= low_sw; //当寄存器low_sw由1变为0时,led_ctrl的值变为高,维持一个时钟周期 wire[3:0] led_ctrl = low_sw_r[3:0] & ( ~low_sw[3:0]); reg d1; reg d2; reg d3; reg d4; always @ (posedge clk or negedge rst_n) if (!rst_n) begin d1 <= 1'b0; d2 <= 1'b0; d3 <= 1'b0; d4 <= 1'b0; end else begin //某个按键值变化时,LED将做亮灭翻转 if ( led_ctrl[0] ) d1 <= ~d1; if ( le
电子密码锁的设计与实现 一、实验目的 1. .进一步掌握键盘扫描和 LED 显示的程序设计。 2. .了解按键消抖的方法. 3. .综合运用微机原理的软硬件知识. 二、实验内容与要求 1.基本要求 1. 具有密码输入功能,密码最多为6位; 2. 设置退格键,以便删除输入错误的密码; 3. 在输入的密码时数码管上只显示 8,并根据输入位数依次横移; 4. 设置确认键,当确认键按下后,判断输入密码是否正确; 5. 当输入密码正确时,点亮发光二极管;当输入密码不正确时,发光二极管不亮并 且蜂鸣器报警,重新输入,当三次密码输入不正确时,系统应锁定键盘 10s。 2.提高要求 将用户分为管理者和使用者,管理者拥有超级密码,可以修改其他人的密码.使 用者不能修改密码。 三、实验报告要求 1. .设计目的和内容 2. .总体设计 3. .硬件设计:原理图(接线图)及简要说明 4. .软件设计框图及程序清单 5. .设计结果和体会(包括遇到的问题及解决的方法) 四、总体设计 电子密码锁的原理是:从键盘输入一组密码,CPU 把该密码和设置密码比较,对则将 锁打开(不同锁的控制方式不一样,比如加电控制电磁铁抽回,从而打开),错则要求 重新 输入,并记录错误次数,如果三次错误,则被强制锁定并报警,除非超级密码或者其他的 手段打开,比如延时一段时间。 初步设计思路如下: 1. .输入密码用矩形键盘,包括数字键和功能键,功能键包括退格键和确认键。 2. .LED 数码管显示输入密码,但是只是输出显示符号 8 .采用动态扫描输出. 3. .用发光二极管模拟锁的情况,锁关时发光二极管灭,打开时发光二极管亮。 4. .输入密码错误时报警,3 次输入错误时键盘锁定 10s,键盘无法接收数据。 软件的设计主要包括矩形键盘键值的读取、LED 动态扫描输出程序、密码判断程序和 报警程序。 五、硬件设计 根据设计思路,硬件电路可通过实验平台上的一些功能模块电路组成,由于实验平台 上的各个功能模块已经设计好,用户在使用时只要设计模块间电路的连接,因此,硬件 电 路的设计及实现相对简单.完整系统的硬件连接如图 1 所示.硬件电路由 LED 数码管显示 模块、按键模块、发光二极管电路和蜂鸣器模块组成. 各个模块的详细说明: 1.LED 数码管模块 实验平台上提供一组六个 LED 数码管。插孔 CS1 用于数码管段选的输出选通,插孔 CS2 用于数码管位选信号的输出选通.本设计用 6 个数码管来动态显示时分秒,动态显示 的定时时间由 8253 定时/计数器来实现。8253 主要是实现每位显示时间 1ms,由 8253 的 计数器 0 来实现。Clk0 接实验平台分频电路输出 Q6,f=46875hz。GATE0 接 8255 的 PA0,由 8255 的 PA0 输出来控制计数器的起停。OUT0 接 8259 的 IRQ2,定时完成请求中 断,进入中断服务程序。软件在中断服务程序中 LED 数码管显示。 Q6 IRQ2 路 8259 图 1 系统硬件电路图 2.按键模块 按键模块包括有数字键和功能键.数字键包括 0-9 键,用于密码的输入.功能键有退 格键和确认键。具体的功能定义如下表。键盘电路和 8255 的连接见图 2 所示。具体的功能 定义如下表. "按键 "键名 "功能说明 " "1-9 键"数字键 "输入密码 " "A 键 "退格键 "取消刚才输入的密码 " "B 键 "确认键 "密码输入完成 " 图 2 键盘电路和 8255 的连接图 3.报警模块和发光二极管模块 报警模块由蜂鸣器驱动电路和 8255 组成。选择一只压电式蜂鸣器,压电式蜂鸣器工作 时约需要 100mA 驱动电流.蜂鸣器电路如图 4 所示。当 8255 的 PB0 口输出为高电平时, 蜂鸣器产生蜂鸣音,8255 输出为低电平时,蜂鸣器不发声。 发光二极管也是用 8255 输出来驱动亮灭。 图 3 蜂鸣器电路 六、软件设计 1.软件设计思路 电子密码锁工作的主要过程是 LED 数码管提示开始输入密码,通过键盘输入密码,同 时 LED 显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理.当输 入密码连续输入错误 3 次时,锁定键盘 10s。 程序将分为主程序和中断服务子程序。主程序负责键盘键值读取,密码判断和开锁或 报警处理。中断服务子程序主要是负责 LED 数码管显示。 根据程序功能,程序主要分为以下几部分: a) 键盘键值读取程序 键盘键值读取程序包括键盘扫描、消除抖动、键译码等内容。按键的识别主要有两种 方法:行反转法和行扫描法。因为键盘为机械开关,容易引入抖动。为了消除抖动干扰, 在程序中要加入消除抖动的部分。 b) LED 数码显示程序 LED 数码显示器是一种应用很普遍的显示

12,801

社区成员

发帖
与我相关
我的任务
社区描述
CSDN 下载资源悬赏专区
其他 技术论坛(原bbs)
社区管理员
  • 下载资源悬赏专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧