Verilog之数码管静态显示

一:原理

一般其分为共阳极二极管和共阴极二极管,通过配置a~dp端口的高低电平即可实现二极管亮灭,进而实现其数字显示

共阳极数码管:将所有的二极管的阳极接到一起

共阴极数码管:将所有的二极管的阴极接到一起

显示数字配置的格式进制如上面表格:对应二进制与十六进制,其中小数点dp是最高位

本实验采用六位八段数码管 如下图

 通过位选信号sel控制sel0~5的亮灭,段选信号a~dq选择所显示数据

本实验所选FPGA开发板采用两片74HC595位移缓存器控制数码管显示,74HC595是一个8位串行输入、并行输出的位移缓存器,内部具有8位移位寄存器和一个存储器,具有三态输出功能

 

 74HC595需要将DS,SHCP,STCP,OE四个端口接入FPGA芯片,MR端口是复位信号,低电平有效,处于低电平时,可以将移位寄存器数据清零,通常接Vcc,防止数据清零。

DS端口与FPGA连接,通过这个端口实现数据传输到移位寄存器

SHCP端口是移位寄存器时钟输入,在上升沿时将数据移位到寄存器中,若一次输入的数据超过8bit,比如14位,则最前面输入的6位数据会通过Q7S端口输出

STCP为存储寄存器时钟,在上升沿时会将移位寄存器中数据写入存储寄存器当中

OE为有效低电平时,会将数据从Q0~Q7输出到数码管

由于所需数据有段选和位选两部分,因此需要传送sel0~5以及a~dq共14位数据,因此需要74HC595进行级联,最多可实现16位数据传送

 注:第一片74HC595传输段选信号,第二片传输位选信号,段选信号传输先传高位,即seg[7],seg[6]...

二:设计思路

功能:依次实现000000~FFFFFF数字的静态显示,每组数字显示0.5s,然后循环。

首先设计系统时钟和使能信号为输入,输出信号为4路,连接到595芯片

 子功能模块设计,产生位选和段选信号

 然后是595驱动模块

 总框图如下

 三:设计方案

1、位选段选功能实现

波形如上图所示 ,系统时钟为50MHz,实现0.5s的计数,要从0累积到24999999。计数标志位cnt_flag在计数达到最大值时为高电平,其他时刻为低电平,数据显示位data在第一次计数到最大值时加一,依次累加到显示F,然后清零,依此循环显示,位选标志位全为1,6位数码管全部显示

2:总共要传送14位数据,data[13:0]为传输的数据,由于两片74HC595串级,所以需要数据接,cnt为4分频计数器,由于系统时钟为50MHz,因此选择SHCP的时钟为12.5MHz,每完成一个周期的计数,则传输一个bit位数据,cnt_bit实现14位数据计数,达到14时清零

 

复位信号有效时,cnt_bit为0,则令ds信号接收data数据0位,即seg0,为1时接受data数据1位 

 shcp选择,cnt为2时shcp选为高电平,为0时置为低电平,以此规律可以实现四分频

stcp在分频计数器为1和2时以及在bit计数器为0时置为高电平,oe一直保持低电平 

注意:

1:对于共阴极数码管而言,段选信号是高电平有效而位选信号是低电平有效的

2:板载数码管共有六位,可以将数码管位选通的时间间隔设置为1ms

3:parameter语句进行参数化设计,当需要得到其他频率的时钟时,只需要在例化时更改分频计数值的最大值即可(但该值不可以超过2^32,因为模块中cnt寄存器设置的位宽为32位)

数码管位选代码:

always@(posedge sys_clk or negedge sys_rst_n)
     if(sys_rst_n == 1'b0)
     	 sel <= 6'b000_000;
	 else
	     sel <= 6'b111_111;  //高电平选中

数码管段选代码:

always@(posedge sys_clk or negedge sys_rst_n)
     if(sys_rst_n == 1'b0)
         seg <= 8'hc0;
     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

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值