前言
从今天开始进入下一篇章,及使用数码管实现在线时钟显示的功能,这里也将通过几个篇章进行逐一讲解,此篇章主要是对IO控制的基本功能进行实现。
一、数码管简介
从图可知,数码管分为共阳极或者共阴极两种结构,对于共阳极而言,想要数码管的灯点亮则需要将对应灯段拉成低电平,数字显示为7段,若是加上小数点则为8段,此开发板采用的是共阳极数码管,故若要点亮数码管则需要拉低电平即可。
数码管的显示方式主要由两种,一种是静态显示,一种是动态显示;静态显示这里不再讲述,直接讲述动态数码管的工作原理,所谓动态显示即是对多个数码管进行级联,每个数码管的段选线均并联在一起,不同数码管显示不同的数字则用位选线进行控制,为了让数码管一起显示,则需要用高频时钟快速的将数字信号进行刷新,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,动态数码管硬件原理图如下:
二、74HC595芯片
74HC595是一款8位串行输入/并行输出的移位寄存器,主要用于扩展微控制器的IO端口,并通过三态输出控制外设如LED、继电器等。74HC595的控制主要需要配合移动时钟shcp和锁存时钟stcp实现数据同步,出上述两个信号外还需要配合sclk和ds信号,sclk是其的通讯时钟,ds是数据移位信号。
不同的温度对应SCLK的信号频率也有所不同,74HC595通过高效的串并转换与灵活的控制逻辑,成为数字电路中扩展IO和驱动多路设备的经典解决方案。
三、程序代码
1.74HC595
// ********************************************************
// 当要传输数据出去时,需要将stcp置为0,传输完成后置为1
// 74HC595是在shcp的上升沿将ds数据移到存储寄存器中
// 所以FPGA需要在shcp的下降沿将ds数据传出去
// shcp的时钟频率在-40°C~85°C范围内的值不小于24Mhz
// ********************************************************
module hc595_driver
(
input clk_sys ,
input rst_sys ,
//
input dri_ena ,
input [15:0] dri_dat ,
//
output reg shcp ,
output reg stcp ,
output reg ds
);
// ********************************************************
// signal
// ********************************************************
reg [15:0] reg_data ;
reg [7:0] cnt_tags = 0 ;
reg [7:0] cnt_shcp = 0 ;
// ********************************************************
// process
// ********************************************************
always @ ( posedge clk_sys )
begin
if( dri_e