一、数码管静态显示
1、数码管
数码管是一种半导体发光器件,其基本单元是发光二极管。
待显示内容 段码(二进制格式) 段码(十六进制格式)

6位8段数码管

2、74HC595
74HC595是一个8位串行输入、并行输出的位移缓存器。其内部具有8位移位寄存器和一个存储器,具有三态输出功能。

输入方式:seg[0]…seg[7] sel[7]…sel[0]

端口作用
连接到FPGA上的端口有4个,分别是DS、SHCP、STCP、OE
MR:复位端,对数据进行清零,不接到FPGA芯片上面,直接接到vcc上,避免对数据清零
DS:将串行数据传送到移位寄存器中
SHCP:移位寄存器的时钟输入端,在上升沿时将输入的数据移入到移位寄存器中间,先进来的数据在最后面,最多输入8bit数据,如果超过8bit,比如14位,那么最前面输入的6位数据会通过Q7S端口输出,Q7S会与下一个74HC595芯片的DS相连接
STCP:存储寄存器时钟,控制8位的存储器,在上升沿时,将移位寄存器中的数据写入到8位存储器中。
OE:使能信号,低电平有效,当使能信号有效时,会将存储器中的数据通过端口传输出去。

二、实现
实现数码管从000000~FFFFFF的循环显示,每个显示0.5s

1、电路图

2、输入输出方式

3、整体框图

4、数码管显示部分

波形图

程序:

module seg_static
#(parameter CNT_MAX = 25'd24999999
)
(input wire  sys_clk,input wire  sys_rst_n,output  reg [5:0]   sel,output  reg [7:0]   seg
);reg [24:0]  cnt;
reg [3:0]   data;
/* reg         cnt_flag; *///cnt_wait:0.5秒计数
always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n == 1'b0)cnt <= 25'd0;else if (cnt == CNT_MAX)cnt <= 25'd0;elsecnt <= cnt + 1'b1;//num:从 4'h0 加到 4'hf 循环
always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n == 1'b0)data <= 4'd0;else if ((data == 4'd15)&&(cnt == CNT_MAX))data <= 4'd0;else if (cnt == CNT_MAX)//也可以使用标志信号进行控制data <= data + 1'b1;elsedata <= data;//add_flag:0.5s拉高一个标志信号
/* always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n ==1'b0)cnt_flag <= 1'b0;else if (cnt == (CNT_MAX-25'd1))cnt_flag <= 1'b1;elsecnt_flag <= 1'b0;  *///sel:选中六个数码管
always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n ==1'b0)sel <= 6'd0;elsesel <=  6'b111111;
//给要显示的值编码,段显示
always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n == 1'b0)seg <= 8'hff;else  case(data)4'd0:   seg <= 8'hc0;4'd1:   seg <= 8'hf9;4'd2:   seg <= 8'ha4;4'd3:   seg <= 8'hb0;4'd4:   seg <= 8'h99;4'd5:   seg <= 8'h92;4'd6:   seg <= 8'h82;4'd7:   seg <= 8'hf8;4'd8:   seg <= 8'h80;4'd9:   seg <= 8'h90;4'd10:   seg <= 8'h88;4'd11:   seg <= 8'h83;4'd12:   seg <= 8'hc6;4'd13:   seg <= 8'ha1;4'd14:   seg <= 8'h86;4'd15:   seg <= 8'h8e;default:    seg <= 8'hff;endcase
endmodule

5、hc595控制

程序:

module hc595_ctrl
(input   wire        sys_clk         ,input   wire        sys_rst_n       ,input   wire [5:0]  sel             ,input   wire [7:0]  seg             ,output  reg         ds   , //串行数据输入output  reg        shcp  , //移位寄存器时钟output  reg        stcp  , //移位寄存器时钟output  wire        oe     //使能信号,低有效       );
wire    [13:0]  data    ;   //数码管信号寄存
reg     [1:0]   cnt     ;   //分频计数器
reg     [3:0]   cnt_bit ;   //传输位数计数器//将数码管信号寄存
assign  data ={seg[0],seg[1],seg[2],seg[3],seg[4],seg[5],seg[6],seg[7],sel[5:0]};//分频计数器:0~3循环计数
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)cnt <= 2'd0;else if (cnt == 2'd3)cnt <= 2'd0;elsecnt <= cnt + 1'b1;//cnt_bit:每输入一位数据加一
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)     cnt_bit <= 4'b0;else if ((cnt_bit == 4'd13)&&(cnt == 2'd3))cnt_bit <= 4'b0;else if(cnt == 2'd3)cnt_bit <= cnt_bit +1'b1;elsecnt_bit <= cnt_bit;//ds:将寄存器里存储的数码管信号输入即
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)ds <= 1'b0;else if (cnt == 2'd0)ds <= data [cnt_bit];elseds <= ds;//shcp:产生四分频移位时钟
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)shcp <= 1'b0;else if (cnt >= 2'd2)shcp <= 1'b1;else shcp <= 1'b0;//stcp:14个信号传输完成之后产生一个上升沿
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)stcp <= 1'b0;else if ((cnt_bit == 4'd0)&&(cnt == 2'd0))stcp <= 1'b1;else if ((cnt_bit == 4'd0)&&(cnt == 2'd2))stcp <= 1'b0;elsestcp <= stcp;//使能信号,低电平有效,所以一直为低电平 assign oe = 1'b0;   endmodule

6、整体程序(将前面两个模块连接起来)

module seg_595_static
(input wire  sys_clk,input wire  sys_rst_n,output  wire    ds,output  wire    shcp,output  wire    stcp,output  wire    oe);
wire [5:0]  sel;
wire [7:0]  seg;seg_static
#(.CNT_MAX (25'd24999999)
)
seg_static_inst
(. sys_clk  (sys_clk),. sys_rst_n(sys_rst_n),.  sel     (sel ),.  seg     (seg )
);hc595_ctrl  hc595_ctrl_inst
(. sys_clk    (sys_clk)    ,. sys_rst_n  (sys_rst_n)    ,. sel        (sel)    ,. seg        (seg)    ,. ds         (ds)    ,.shcp        (shcp)   ,.stcp        (stcp)   ,. oe         (oe));
endmodule

测试程序
对整体的框图进行编写测试程序

`timescale  1ns/1ns
module  tb_seg_595_static();wire    stcp    ;   //输出数据存储寄时钟
wire    shcp    ;   //移位寄存器的时钟输入
wire    ds      ;   //串行数据输入
wire    oe      ;   //输出使能信号reg     sys_clk     ;
reg     sys_rst_n   ;//对sys_clk,sys_rst_n赋初始值
initialbeginsys_clk     =   1'b1;sys_rst_n   <=  1'b0;#100sys_rst_n   <=  1'b1;end//clk:产生时钟
always  #10 sys_clk <=  ~sys_clk;//-------------seg_595_static_inst-------------
//使用顶层模块的实例化
seg_595_static  seg_595_static_inst
(.sys_clk     (sys_clk   ),  //系统时钟,频率50MHz.sys_rst_n   (sys_rst_n ),  //复位信号,低电平有效.stcp        (stcp      ),   //输出数据存储寄时钟.shcp        (shcp      ),   //移位寄存器的时钟输入.ds          (ds        ),   //串行数据输入.oe          (oe        )    //输出使能信号
);endmodule

16数码管静态显示(74hc_595)相关推荐

  1. 51单片机之数码管静态显示

    在对单片机编程以实现数码管静态显示数字之前,我们先来了解一下数码管的结构以及一些常识,对于数码管,有称八段数码管的,也有称七段数码管的,其实无非就是多在一个小数点h , 如上图所示,  我们就拿带小数 ...

  2. FPGA学习日志——74hc595驱动的数码管静态显示seg_595_static

    文章目录 数码管静态显示seg_595_static 实验原理 74HC595 实验框图.波形图与代码原理 数码管静态显示seg_595_static 数码管是一种半导体发光器件,其基本单元是发光二极 ...

  3. 嵌入式设计与开发项目-数码管静态显示程序设计

    嵌入式设计与开发项目-数码管静态显示程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.数码管头文件"seg.h" 3.数码管源文件"seg.c& ...

  4. FPGA(5)数码管静态显示与动态显示

    目录 一.数码管静态显示 二.数码管动态显示 1.变量定义 2.定时(60us) 3.动态显示 代码 一.数码管静态显示 FPGA的数码管有4位,8段.(位和段都是共阳,即低电平有效) 位选的4位(二 ...

  5. 单片机——C51实验含Proteus仿真(锁存器,流水灯,继电器,数码管静态显示,蜂鸣器)

    文章仅为本人学习记录,如有引用部分会另加说明引用出处 代码部分 #include<reg52.h> #include<intrins.h> #define uint unsig ...

  6. 数码管静态显示到动态显示——六位8段数码管(共阴极)按顺序间隔1s显示数字1~6

    数码管静态显示到动态显示 2021-01-21,51单片机学习笔记 六位8段数码管(共阴极)按顺序间隔1s显示数字1~6 代码: /********************************** ...

  7. 基于STC15W4K32S4单片机仿真《74HC595驱动数码管静态显示》

    1. 编 程 软 件:keil5版本. 2.仿 真 软 件:Proteus8.12 3.单片机选型:STC15W4K32S4 4.学 习 目 标:1.学习74HC595芯片工作方式           ...

  8. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON4数码管静态显示

    数码管静态显示例程讲解 若要观看该博客配套的视频教程,可点击此链接 开发板实物图 图1.FPGA设计流程 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省 ...

  9. c语言7段码静态显示 dula,51 数码管静态显示 [李园7舍_404]

    对于单片机的学习我一般不按照资料的顺序学习.我是照这个步骤将新知识掌握: 1.学习过程:阅读C语言程序,查看控制变量被赋予的值-->查看跟控制变量对应的相关的电路图-->被控制电路所接收到 ...

最新文章

  1. python里感叹号什么意思_仪表盘上的感叹号是什么意思
  2. 等待Ajax结果 再提交表单(ajax同步)
  3. 图论中的知识点(等待补充和更新)
  4. Django运行报错Invalid HTTP_HOST header: ‘0.0.0.0:8000‘. You may need to add ‘0.0.0.0‘ to ALLOWED_HOSTS.
  5. 使用WebClient 获得网页内容或提交请求
  6. MSSQLSERVER数据库- 递归查询例子
  7. VTK:图片之ImageLaplacian
  8. [HDU]2098分拆素数和
  9. 如何打开设计思路,避免不断改稿?只需提前做好这一步
  10. 使用valueOf前必须进行校验
  11. 下载虚拟化的mac 系统
  12. 使用phpqrcode来生成二维码/thinkphp
  13. 青云、金山云亏损IPO,为何中小云厂商“恰饭”这么难?
  14. 微信小程序中如何使用阿里云iconfont图标
  15. 数学建模论文写作方法大总结
  16. 對Googgle adsense廣告作弊和Googeladsense點擊廣告的生存前景看法
  17. java set 添加_Java Set add()用法及代码示例
  18. homeassistant搭建_安卓环境home assistant搭建
  19. 完美解决Sudo doesn‘t work: “/etc/sudoers is owned by uid 1000, should be 0”
  20. 在Sdx中使用xfOpenCV

热门文章

  1. win10(家庭版)打开本地组策略失败的处理方法
  2. 2021信息安全工程师学习笔记(四)
  3. ant design vue pro 支持多页签模式 页签可以缓存
  4. 粗糙集的概念和一些例子
  5. 服务器操找不见系统,服务器提示找不到操作系统
  6. minifly轨迹飞行
  7. 按照账号定位持续发视频,数据不会太差!
  8. 第一种可以用手机远程实时观看的网络摄像机,还带云台,报警,双向语音
  9. Wallpaper Engine壁纸提取
  10. Android仿QQ微信开场导航以及登陆界面