27.数码管的驱动,使用74HC595移位寄存器芯片

PS:升腾A7pro系列FPGA没有数码管外设,因此以AC620FPGA为例展开实验。

(1)共阳极数码管和共阴极数码管示意图:

  • AC620中的数码管属于共阳极数码管,段选端口(dp,g,f,e,d,c,b,a)低电平即可点亮led。
  • 人眼的视觉停留效应:当led以小于20ms的时间间隔进行闪烁时,在人眼看来,就是一直亮着的。
  • 预使8个数码管实现动态扫描的效果,需要扫描间隔小于20ms/8 =2.5ms,不妨取1ms。
  • 第一毫秒位选sel[0]高电平,其余sel[0:6]低电平;第二毫秒位选sel[1]高电平,其余sel[0]、sel[2:6]低电平,依次循环。

(2)段选、位选Verilog代码:

module hex(clk,reset_n,data,sel,seg);input clk;
input reset_n;
input [31:0]data;output reg[7:0]sel;
output reg[7:0]seg;//1ms = 1_000_000ns = 20ns * 50_000;
reg [15:0]cnt;
reg [2:0]sel_cnt;
reg [3:0]temp_data;
reg [7:0]r_sel;parameter MCNT = 49_999;//1ms计数器模块
always@(posedge clk or negedge reset_n)if(!reset_n)cnt <= 16'd0;else if(cnt == MCNT)cnt <= 16'd0;else cnt <= cnt + 16'd1;//sel_cnt计数器模块设计
always@(posedge clk or negedge reset_n)if(!reset_n)sel_cnt <= 3'd0;else if(cnt == MCNT)sel_cnt <= sel_cnt + 3'd1;else sel_cnt <= sel_cnt;//r_sel信号设计
always@(posedge clk or negedge reset_n)if(!reset_n)r_sel <= 8'h01;else begincase(sel_cnt)3'd0: r_sel <= 8'h01;3'd1: r_sel <= 8'h02;3'd2: r_sel <= 8'h04;3'd3: r_sel <= 8'h08;3'd4: r_sel <= 8'h10;3'd5: r_sel <= 8'h20;3'd6: r_sel <= 8'h40;3'd7: r_sel <= 8'h80;endcaseend//sel信号设计    打一拍的目的是为了和seg信号同步
always@(posedge clk)sel <= r_sel;//temp_data信号设计
always@(posedge clk or negedge reset_n)if(!reset_n)temp_data <= 4'd0;else begincase(sel_cnt)3'd0:temp_data <= data[3:0];3'd1:temp_data <= data[7:4];3'd2:temp_data <= data[11:8];3'd3:temp_data <= data[15:12];3'd4:temp_data <= data[19:16];3'd5:temp_data <= data[23:20];3'd6:temp_data <= data[27:24];3'd7:temp_data <= data[31:28];endcaseend//seg信号设计
always@(posedge clk or negedge reset_n)if(!reset_n)seg <= 8'hff;else begincase(temp_data)4'h0:seg <= 8'b1100_0000;4'h1:seg <= 8'b1111_1001;4'h2:seg <= 8'b1010_0100;4'h3:seg <= 8'b1011_0000;4'h4:seg <= 8'b1001_1001;4'h5:seg <= 8'b1001_0010;4'h6:seg <= 8'b1000_0010;4'h7:seg <= 8'b1111_1000;4'h8:seg <= 8'b1000_0000;4'h9:seg <= 8'b1001_0000;4'ha:seg <= 8'b1000_1000;4'hb:seg <= 8'b1000_0011;4'hc:seg <= 8'b1100_0110;4'hd:seg <= 8'b1010_0001;4'he:seg <= 8'b1000_0110;4'hf:seg <= 8'b1000_1110;endcaseendendmodule

(3)对应仿真文件代码:

`timescale 1ns/1nsmodule hex_tb;reg clk;reg reset_n;reg [31:0]data;wire [7:0]sel;wire [7:0]seg;hex hex_inst(.clk(clk),.reset_n(reset_n),.data(data),.sel(sel),.seg(seg));defparam hex_inst.MCNT = 499;initial clk = 1'd1;always #10 clk = ~clk;initial beginreset_n <= 1'd0;#25;reset_n <= 1'd1;#15;data <= 32'h00112233;#200_000;data <= 32'h44556677;#200_000;data <= 32'h8899aabb;#200_000;data <= 32'hccddeeff;#200_000;$stop;endendmodule

(4)仿真波形:

(5)74HC595芯片:

74HC595芯片内部工作原理:

  • 先传段选,再传位选,先传高位,再传低位。(段位高低)
  • 74HC595芯片在3.3v工作电压下,可以承受的工作频率为12.5MHz。

(6)74HC595驱动代码:

module hc595_driver(clk,reset_n,sel,seg,DIO,SCLK,RCLK);input clk;
input reset_n;
input [7:0]sel;
input [7:0]seg;output reg DIO;
output reg SCLK;
output reg RCLK;//74HC595芯片在3.3v工作电压下,可以承受的工作频率为12.5MHz,对应一个周期为80ns,半个周期为两个系统时钟周期
reg div_cnt;
reg [4:0]bit_cnt;//分频计数器设计
always@(posedge clk or negedge reset_n)if(!reset_n)div_cnt <= 1'd0;else div_cnt <= div_cnt + 1'd1;//bit_cnt设计
always@(posedge clk or negedge reset_n)if(!reset_n)bit_cnt <= 5'd0;else if(div_cnt == 1'd1)bit_cnt <= bit_cnt + 5'd1;else bit_cnt <= bit_cnt;//序列机设计
always@(posedge clk or negedge reset_n)if(!reset_n)beginDIO <= 1'd0;RCLK <= 1'd0;SCLK <= 1'd0;endelse if(div_cnt == 1'd1)begincase(bit_cnt)5'd0:	begin DIO <= seg[7];SCLK <= 1'd0;RCLK <= 1'd1;end5'd1:	begin SCLK <= 1'd1;RCLK <= 1'd0;end5'd2:	begin DIO <= seg[6];SCLK <= 1'd0;end5'd3:	begin SCLK <= 1'd1;end5'd4:	begin DIO <= seg[5];SCLK <= 1'd0;end5'd5:	begin SCLK <= 1'd1;end5'd6:	begin DIO <= seg[4];SCLK <= 1'd0;end5'd7:	begin SCLK <= 1'd1;end5'd8:	begin DIO <= seg[3];SCLK <= 1'd0;end5'd9:	begin SCLK <= 1'd1;end5'd10:begin DIO <= seg[2];SCLK <= 1'd0;end5'd11:begin SCLK <= 1'd1;end5'd12:begin DIO <= seg[1];SCLK <= 1'd0;end5'd13:begin SCLK <= 1'd1;end5'd14:begin DIO <= seg[0];SCLK <= 1'd0;end5'd15:begin SCLK <= 1'd1;end5'd16:begin DIO <= sel[7];SCLK <= 1'd0;end5'd17:begin SCLK <= 1'd1;end5'd18:begin DIO <= sel[6];SCLK <= 1'd0;end5'd19:begin SCLK <= 1'd1;end5'd20:begin DIO <= sel[5];SCLK <= 1'd0;end5'd21:begin SCLK <= 1'd1;end5'd22:begin DIO <= sel[4];SCLK <= 1'd0;end5'd23:begin SCLK <= 1'd1;end5'd24:begin DIO <= sel[3];SCLK <= 1'd0;end5'd25:begin SCLK <= 1'd1;end5'd26:begin DIO <= sel[2];SCLK <= 1'd0;end5'd27:begin SCLK <= 1'd1;end5'd28:begin DIO <= sel[1];SCLK <= 1'd0;end5'd29:begin SCLK <= 1'd1;end5'd30:begin DIO <= sel[0];SCLK <= 1'd0;end5'd31:begin SCLK <= 1'd1;endendcaseendelse beginDIO <= DIO;RCLK <= RCLK;SCLK <= SCLK;endendmodule

(7)顶层代码:

module hex_top(clk,reset_n,sw,DIO,SCLK,RCLK);input clk;input reset_n;input [3:0]sw;output DIO;output SCLK;output RCLK;reg [31:0]data;wire [7:0]sel;wire [7:0]seg;hex hex_inst(.clk(clk),.reset_n(reset_n),.data(data),.sel(sel),.seg(seg));hc595_driver hc595_driver_inst(.clk(clk),.reset_n(reset_n),.sel(sel),.seg(seg),.DIO(DIO),.SCLK(SCLK),.RCLK(RCLK));//data设计always@(posedge clk or negedge reset_n)if(!reset_n)data <= 32'd0;else begincase(sw)4'h1:data <= 32'h76543210;4'h2:data <= 32'hfedcba98;4'h4:data <= 32'h98765432;4'h8:data <= 32'h12345678;default:data <= 32'h00000000;endcaseendendmodule

(8)引脚绑定:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连锁直营店小程序赋能多店如何管理

如商超便利店卖货线下场景&#xff0c;也有不少品牌以同城多店和多地开店经营为主&#xff0c;获取店铺周围客户和散流&#xff0c;如今线上重要性凸显&#xff0c;品牌电商发展是经营的重要方式之一&#xff0c;也是完善同城和外地客户随时便捷消费的方式之一。 多个门店管理…

抖音视频图文根据ID获得评论信息网站源码

抖音视频图文根据ID获得评论信息单页源码&#xff0c;id是视频的id&#xff0c;可以自定义第几条评论开始&#xff0c;不填默认为0&#xff0c;评论数量最大数量50&#xff0c;默认是20。 接口返回参数&#xff1a; "comments": 评论信息集合 { "uid": 评…

ObjectiveC 内存管理

内存的五大区域 栈&#xff1a;局部变量 &#xff08;当局部变量的作用域被执行完毕之后&#xff0c;这个局部变量就会被系统立即回收&#xff09;&#xff1b;堆&#xff1a;OC对象和使用C函数申请的空间&#xff1b;BSS段&#xff1a;未初始化的全局变量、静态变量&#xff…

STO SS1 SS2 SLS 安全释义

变频器集成安全功能已经越来越普遍,本篇介绍一下常用的一些安全功能。 安全停止变频器的功能:安全扭矩断关断(STO)、安全停机 1 (SS1)、安全停机 2 (SS2)、安全操作停止(SOS) 用于安全监控驱动运动的功能:安全限速 (SLS)、安全速度监控 (SSM) 1、安全扭矩关断 (STO) S…

uniapp踩坑小伎俩记录

1. 页面路径和文件名大小写问题 // 假设你有一个页面路径是 /pages/Home/index this.$router.push(/pages/home/index); // 小写的 home 会导致找不到页面2. 小程序平台差异 // 微信小程序中使用 uni.getSystemInfo({success: (res) > {console.log(res);} }); // 支付宝小…

原创音乐小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;歌曲类型管理&#xff0c;歌曲信息管理&#xff0c;热门歌手管理&#xff0c;音乐资讯管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;歌曲信息&a…

数学建模·Topsis优劣解距离法

Topsis优劣解 一种新的评价方法&#xff0c;特点就是利用原有数据&#xff0c;客观性强。 相较于模糊评价和层次评价 更加客观&#xff0c;充分利用原有数据&#xff0c;精确反映方案差距 基本原理 离最优解最近&#xff0c;离最劣解越远 具体步骤 正向化 代码与原理与熵权…

链接追踪系列-08.mac m1安装logstash-番外

下载地址&#xff1a;https://elasticsearch.cn/download/ 配置es相关&#xff1a; #安装plugin&#xff1a; jelexbogon bin % ./logstash-plugin install logstash-codec-json_lines启动&#xff1a;指定配置文件运行 jelexbogon bin % nohup ./logstash -f ../config…

SSM学习7:SpringMVC简介、SpringMVC入门案例、SpringMVC bean加载控制

SpringMVC简介 Spring MVC 是 Spring 框架的一部分&#xff0c;它是一个用于构建 Web 应用程序的模型-视图-控制器&#xff08;Model-View-Controller&#xff0c;MVC&#xff09;框架。Spring MVC 提供了一种清晰的方式来分离业务逻辑、用户界面和控制流程&#xff0c;使得应…

leetcode 513. 找树左下角的值

给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7提示: 二叉树的节点个数的范围是 [1,104]-231 < Node.val &…

Go语言指针及不支持语法汇总

本文为Go语言中指针定义和示例及不支持语法汇总。 目录 指针 定义指针 关键字new定义 函数返回指针 空指针 Go不支持语法汇总 总结 指针 Go语言也有指针&#xff0c;结构体成员调用时&#xff0c;obj.name Go语言在使用指针时&#xff0c;会使用内容的垃圾回收机制&am…

线程池操作数据库存在线程安全问题

目录 1、前言 2、问题 3、解决方法 3.1、方法一&#xff1a;数据库约束 3.2、方法二&#xff1a;使用锁进行线程的约束 4、总结 1、前言 当前需求为&#xff1a;处理数据&#xff0c;将数据存储到数据库中&#xff0c;在存储的过程中&#xff0c;会先查询该数据是否已经存…

Hadoop数仓中常用端口详解:(第36天)

前言 在数仓&#xff08;数据仓库&#xff09;开发中&#xff0c;不同的组件和服务会使用不同的端口号进行通信。由于数仓的实现可能依赖于多种技术和框架&#xff08;如Hadoop、Hive、HBase、Spark等&#xff09;&#xff0c;因此涉及的端口号也会有所不同。以下是一些数仓开…

node.js的安装及学习(node/nvm/npm的区别)

一、什么是node、nvm和npm 1.Node.js node.js 一种Javascript编程语言的运行环境&#xff0c;能够使得javascript能够脱离浏览器运行。以前js只能在浏览器&#xff08;也就是客户端&#xff09;上运行&#xff0c;node.js将浏览器中的javascript运行环境进行封装的&#xff0c;…

张雪峰高考志愿填报

描述 张雪峰&#xff0c;一个富有才华的老师&#xff01; 对于大家的学习有不可多得的帮助。 内容 目前主要的内容以自愿填报为主&#xff0c;对于学习自愿填报有比较大的帮助&#xff01; 但是网络上面错综复杂&#xff0c;很多老旧的版本影响学习&#xff01; 而这里我整…

vue3 快速入门 (一) : 环境配置与搭建

1. 本文环境 Vue版本 : 3.4.29Node.js版本 : v20.15.0系统 : Windows11 64位IDE : VsCode 2. 安装Node.Js 首先&#xff0c;我们需要安装Node.Js。Node.js提供了运行 JavaScript 代码的环境。并且Node.js 带来了 npm&#xff0c;它是JavaScript世界的包管理工具。开发vue时&…

使用Copilot 高效开发繁忙的一天

在现代软件开发的世界里&#xff0c;使用AI工具如GitHub Copilot可以显著提高开发效率。 早晨&#xff1a;规划与启动 7:00 AM - 起床与准备 开发者早早起床&#xff0c;享用健康的早餐&#xff0c;并浏览新闻和技术博客&#xff0c;了解最新的科技动态。快速整理思路&#x…

设计模式使用场景实现示例及优缺点(行为型模式——责任链模式)

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 责任链模式是一种行为设计模式&#xff0c;允许对象将请求沿着处理器链传递&#xff0c;直到一个处理器决定处理该请求为止。这种模式的核心在于解耦发送者和接收者之间的关系&#xff0c;通过多个对象共同…

MICS2024|少样本学习、多模态技术以及大语言模型在医学图像处理领域的研究进展|24-07-14

小罗碎碎念 本期推文主题 今天的会议很多主题都集中在大模型、多模态这两个方面&#xff0c;很明显&#xff0c;这两个方向都是目前的研究热点。 所以&#xff0c;我这一期推文会先简单的分析一下秦文健&#xff08;中科院&#xff09;和史淼晶&#xff08;同济大学&#xff09…

解释方法重载和方法重写的区别。然后,给出一个简单的递归方法实例。

方法重载&#xff08;Overloading&#xff09;与方法重写&#xff08;Overriding&#xff09;的区别 在Java编程中&#xff0c;方法重载和方法重写是两个非常重要的概念&#xff0c;它们分别体现了面向对象编程中的多态性&#xff08;Polymorphism&#xff09;的不同方面&…