FPGA驱动74HC595实现数码管动态显示

本文介绍了数码管的工作原理,包括共阴极和共阳极的区别,并详细阐述了三种不同的驱动方式:引脚直连、位选+段选以及使用74hc595芯片。通过74hc595实现串并转换,减少了FPGA引脚占用。此外,还展示了如何将24位BCD码转换为14位的位选+段选信号,实现6个数码管的动态显示。最后,给出了上板验证的结果。
摘要由CSDN通过智能技术生成

数码管原理

图片来源于网络
图a为单个数码管的原理图,实际上和点灯差不多,不过这8个灯按照数字8的形状进行排布。
数码管分共阴极和共阳极两种,图b左边是共阴极数码管,需要给对应的引脚高电平以点亮,右边是共阳极数码管,需要给低电平点亮。

驱动方式分类

1. 引脚直连

以6个8段数码管为例,每个数码管占用8个引脚,6个数码管就要占用48个引脚。
该方式对于fpga来说占用引脚过多,但这种方式使用起来最简单,比如友晶DE2开发板。

2. 位选+段选方式

将每个数码管的段选信号都连在一起,然后用6bit位选信号来选择数码管进行显示,引脚占用就减少到14个了,如下图:
图片来源于网络
在这种方式下,不管位选信号是多少,同一时刻只能显示一个数字,为了让不同的数码管显示不同的数字,需要进行动态显示。
动态显示下,任意时刻只选中1个数码管进行显示,6个数码管轮流点亮,由于余晖效应,只要刷新够快,就能让所有数码管同时显示。

3. 使用移位寄存器芯片74hc595

为了进一步减少数码管的引脚占用,使用74hc595芯片,其内部结构非常简单,就是一个8位的移位寄存器和一个8位的存储寄存器:
图片来源于网络
74hc595常用于串并转换,2片74HC595级联就能实现16位串转并,舍弃掉最后两位,就能实现14位串转并功能。
FPGA内部的14位的位选段选信号是并行的,我们需要先将其转化为串行数据输入74hc595,然后控制该芯片将串行数据转化为并行数据输出,只需控制DS、SHCP、STCP、OE四个引脚即可,这样FPGA的引脚占用就从14减小到4了。
其中,DS为串行数据,SHCP为移位时钟,STCP为锁存时钟,在两片74hc595级联的情况下,先将串行数据移位进两个8bit移位寄存器,再并行输出,即每16个SHCP上升沿对应1个STCP上升沿
此处我们需要自己写一个74hc595的驱动,将14位并行信号转化为串行信号,系统时钟50M,SHCP时钟选择系统时钟四分频,STCP选择系统时钟64分频,即SHCP的16分频,代码如下:

module hc595(
    input clk,
    input rst_n,
    // input
    input [7:0] seg,
    input [5:0] sel,
    // output
    output  ds,
    output  shcp,
    output  stcp,
    output  oe
);
//------------signals--------------
// oe低电平有效
assign oe = 1'b0;
// 分频计数器
reg [5:0] cnt;
// 并行数据,末尾两位舍弃不用
wire [15:0] out_data = {
   seg, sel, 2'b00};
//------------function-------------
// 分频计数器
always @(posedge clk, negedge rst_n) begin
    if(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值