首页 > 其他分享 >基于EP4CE6E22C8N按键流水灯实验

基于EP4CE6E22C8N按键流水灯实验

时间:2023-01-16 13:56:39浏览次数:32  
标签:control led EP4CE6E22C8N else sys 流水 按键 rst

器材准备
EP4CE6E22C8N板子,下载器。

电路图
image
image

逻辑框架
image
首先,复位信号和时钟信号输入,形成一个内部的定时器信号。然后流水灯时序逻辑模块根据计时变化其对应的状态信号,然后把信号输入到流水灯状态逻辑模块。在流水灯状态逻辑模块里面,根据输入的按键信号选择不同流水灯效果。

可以看出,只要有时序逻辑关系的程序。整个程序就必须围绕时钟线进行。这个和其他芯片一样,没有时钟信号就不能工作。

代码


module key_led(
input sys_clk , //50Mhz系统时钟
input sys_rst_n, //系统复位,低有效
input [3:0] key, //按键输入信号
output reg [3:0] led //LED输出信号
);

//reg define
reg [23:0] cnt;
reg [1:0] led_control;

/用于计数0.2s的计数器/

always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
cnt<=24'd9_999_999;
else if(cnt<24'd9_999_999)
cnt<=cnt+1;
else
cnt<=0;
end
//用于led灯状态的选择
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
led_control <= 2'b00;
else if(cnt == 24'd9_999_999)
led_control <= led_control + 1'b1;
else
led_control <= led_control;
end

//识别按键,切换显示模式
always @(posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n) begin
led<=4'b 0000;
end
else if(key[0]== 0)
//按键1按下时,从右向左的流水灯效果
case (led_control)
2'b00 : led<=4'b0111;
2'b01 : led<=4'b1011;
2'b10 : led<=4'b1101;
2'b11 : led<=4'b1110;
default : led<=4'b1111;
endcase
//按键2按下时,从左向右的流水灯效果
else if (key[1]0)
case (led_control)
2'b00 : led<=4'b1110;
2'b01 : led<=4'b1101;
2'b10 : led<=4'b1011;
2'b11 : led<=4'b0111;
default : led<=4'b1111;
endcase
//按键3按下时,LED闪烁
else if (key[2]
0)
case (led_control)
2'b00 : led<=4'b1001;
2'b01 : led<=4'b0110;
2'b10 : led<=4'b0110;
2'b11 : led<=4'b0110;
default : led<=4'b0000;
endcase
//按键4按下时,LED全亮
else if (key[3]==0)
led=4'b0000;
else
//无按键按下时,LED熄灭
led<=4'b1111;
end

endmodule


引脚分配
image
image
image

缺点
如果要实现按一下按键松开,然后执行不同状态,这个实现起来优点难度。还需要有延时消抖,电路中没有提供滤波电路。

标签:control,led,EP4CE6E22C8N,else,sys,流水,按键,rst
From: https://www.cnblogs.com/chapman-fpga/p/17055197.html

相关文章

  • 23 | 冒险和预测(二):流水线里的接力赛
    上一讲,我为你讲解了结构冒险和数据冒险,以及应对这两种冒险的两个解决方案。一种方案是增加资源,通过添加指令缓存和数据缓存,让我们对于指令和数据的访问可以同时进行。这......
  • 基于EP4CE6E22C8N流水灯实验详解2
    测试文件:testbench这一个文件适用于测试前面写好的代码能否正确运行。在编写好执行的流水灯代码之后,要使用modelsim进行仿真时,需要编写一个testbench文件。这一个文件适用......
  • 基于EP4CE6E22C8N流水灯实验详解1
    器材准备:EP4CE6E22C8N板子,下载器。电路图:逻辑框架因为这是一个流水灯,所以需要有一个时序逻辑关系,也就需要一个时钟信号。所以需要给模块设计一个时钟输入信号。此外,如......
  • 基于状态机的按键消抖模块
    本次案例是按着小梅哥的思路来写的,部分截图和文字来自其教学视频。1、状态机的设定  2、模块代码`timescale1ns/1ps///////////////////////////////////////......
  • Jenkins 编译Android apk 流水线 - 打工人日志 - jobcher
    Jenkins编译Androidapk,上传apk包,生成下载二维码,并推送钉钉安装Android环境#这里使用的是openjdk1.8.0版本,有需要的话需要到java官网上进行下载对应的JDK版本。$yumin......
  • 还有不出现在料单中的器件?-流水灯库文件的设计-PCB系列教程4-2
    这是第二块电路板要用到的库文件,其中74HC165,74HC14,SW-8P直插拨码开关,这几个元件的库文件的设计已经讲解过了,本文简单提下其它几个未使用过的元件,对应库文件的设计要点。稳压......
  • 爱的魔力转圈圈-流水灯电路原理详解-PCB系列教程4-1
    作为第二个案例,流水灯电路,比贴片元件焊接练习板稍微复杂一点。它的主要功能是:通过拨码开关来配置哪个灯亮,电路可以自动或手动产生周期脉冲,调整灯“流水”的速度。它的效果如......
  • 电子设计教程48:流水灯电路-完整电路设计
      产生脉冲的环节中,限流电阻设置为阻值可调的电位器,可以大幅度改变脉冲的频率。按键K2可以产生手动的脉冲,拨动开关SW2可以选择是自动产生脉冲,还是手动产生脉冲。LED2可以......
  • 电子设计教程47:流水灯电路-74HC245驱动器
      上一节提到,如果想控制多于8个LED,74HC164就有点带不动了,就需要接功率更大的芯片了。这个芯片的功能是输入较小的电流,输出较大的电流,这种芯片被称为是驱动器。一般常用74H......
  • 电子设计教程46:流水灯电路-74HC164串入并出芯片
      电路中已经有了74HC165,并入串出,获取几个拨码开关的状态,还需要一个串入并出的芯片,来控制几个LED。74HC164芯片与74HC165相对应,可以实现串入并出的功能。  它有两个串......