找回密码
 注册
关于网站域名变更的通知
查看: 299|回复: 1
打印 上一主题 下一主题

FPGA零基础学习之Vivado-数码管驱动设计实验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-4-19 19:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。

& r3 D& ^5 P/ v

系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。本次带来Vivado系列,本篇为数码管驱动设计实验。话不多说,上货。


0 f! @' R; X8 C2 F


8 U- X. d$ h, K6 C
FPGA零基础学习之Vivado-数码管驱动设计实验
1 I! M' j7 _/ U) @5 _* H6 P3 }) c6 z9 v9 ]4 w5 v( Y& }3 r, w

数码管作为SANXIN-B04的显示装置,具有易控制,显示方便的特点。那么接下来我们来学习一下数码管的驱动原理。

5 J. [" q9 d8 X/ d' I  _

首先,数码管根据驱动电路划分,分为共阳极数码管和共阴极数码管。这个不同直接影响到了我们在驱动数码管时需要给的电平信号。在SANXIN-B04开发板上的数码管使用的是共阳极数码管,那么也就是说我们的数码管是低电平有效。

! b; g; h( Y  M7 D' U

数码管硬件部分:

3 k; @* _2 d5 X3 W: B9 N- t

) G5 @, l8 ]4 E$ q( s1 h# @


4 e/ [9 w9 i+ F4 ]1 j3 G


1 B, J$ z" n. Y

数码管总共14个管脚,分别是8个段选和6个位选。6个数码管分别用6根线单独控制,一个数码管,数字部分是7段,加上小数点总共八段。又因为6个数码管的段选信号线是共用的,所以,总共加起来14个管脚。


6 `8 `' }2 l! k, ?( u


( i% y% O# h8 L) m1 |8 @7 z

我们按照每一段的顺序做一个编号,有利于接下来的讲解以及说明,编号如下:

. \* W# c6 B3 a


2 x6 Y9 J- e! A* e% Q* Y  ?


! Z- O( I' m) f: k; y9 I+ O% B


' k( B8 x$ z$ O& K  [

& u, ^0 D6 N4 B' E; k1 i6 z

这8段单独控制,我们可以看做是每一段是一个led灯,那么我们如果想显示特定的数字,只需要让特定的某些段亮起来就可以,又因为我们是共阳极数码管,所以每一段在给低电平时可以被点亮。按照我们手册的管脚顺序,我们给数据时,一般按照DP-G-F-E-D-C-B-A的顺序给值,小数点为8bit数据的最高位。比如:我们想要显示数字1,那么只需要让B和C两段点亮即可。那么我们给的数据就应该是8’b1111_1001。按照这个规律,我们可以轻松得到0~9的所有段选数据。

* ^; ~# _8 A$ \$ a8 \


3 d3 ~- k  }  L5 I/ o9 V9 s- k* j

3 |% X8 J- Z1 a0 t; J! k

4 n) r; ], ~2 U

& k1 F- z/ {$ l1 @# m# j: G1 Y

9 Q! X! T9 `3 g2 k6 v0 R' k

此外,数码管作为我们的显示装置,一般显示的内容为动态的,所以,我们在驱动数码管显示的时候6个数码管要依次轮流选中,因为我们的段选信号是共用的,在同一时刻不能给不同的段选信号值。但是这并不意味着我们的数码管显示只能一个一个的看到现象,我们只要刷新切换的速度够快,人眼看起来就是一起亮的,所以我们接下来要做的工作就是:1、位选依次选中。   2、每一位的数码管进行段选赋值。代码如下:


- R, h9 w$ g( T


, m* G4 D9 |! S! ^4 `: N


1 v( C2 D6 z" b3 y/ @, C' i: D

; C% X& W7 x& |- w8 k, L! Y- g! R3 g


9 H5 ]. E. K6 S! u9 |9 D


! E& z& e/ e; J

在此,我们需要声明一点,因为数码管位选切换过快,会导致数码管显示异常,所以我们在做位选切换的时候,我们会加上一段时间的延时,以确保显示正常。

, D" P% c$ j: C/ J/ V: C5 e0 O+ L9 M

那么接下来,我们做一下仿真测试。

1 o# p/ O6 m$ W" i+ i. [

' k( \: A9 L/ V! s2 p2 \


4 ^0 V' e( k3 |0 `7 R: ^  Y

+ q8 S+ w; k3 T6 H8 S, |0 @

$ W$ T, R5 y0 s) M3 R& l9 y

% k$ v/ ~+ R' g0 U$ c

按照上图步骤,添加仿真文件。

1 ]! J; N2 a/ I9 L2 ^) k
6 [5 O  \- k4 x  n& z( I+ h+ s

# w9 W+ [  S& c5 D) @$ f7 f/ F, }* h2 P9 t1 K9 K2 `5 K* B
! L" V( K$ M$ f

& T7 U5 i9 V8 F: g

' [& d2 j2 u, h
8 \/ w7 r- i5 a5 c

: u& u* G# E' G
% b" s. ?6 B4 |

3 {% k( V, t% C1 ]' T7 D& ]4 i

点击OK新建文件,代码如下:


- S. r  y; ~) c0 e1 V# B) }# g, c
8 W8 l& M/ `" [
8 [1 Y+ m8 ^; r3 b% v1 k" Z) Q+ p( h" G; w, k( s
: ~1 w" w8 A& n  w3 \5 L5 e

- y# h% U1 ^1 r9 }! r
2 e1 a& j7 h  g9 N

# q. W+ l# Y8 Y0 F- p( B7 V5 \) T( Q2 i$ H

在仿真时,我们随机给了两个值,看一下波形。说明:在功能文件中,我们的输入数据为24位的BCD码,在仿真时,我们直接给了16进制数,因为BCD码和16进制数的前十个数是一样的。


- ?: Q" q9 Y3 b6 l7 S% O3 [

点击Run Simulation,运行仿真。


# Y. T9 B) ?6 i$ i2 d7 h

* w% E7 Z: b1 S/ s8 J9 a

  L: j) b( |) Q# F0 J. f( y

在波形当中,位选信号对应的段选信号,与我们给的数值一致,证明数码管驱动正确。


4 A; r$ a" j+ ?- j7 h0 t( G4 `3 ^6 k( E0 i

在此需要提醒一点,如果数码管的输入不是BCD码,那么我们还需要做一下转码,最简单的方法就是做除法,或者用基本运算电路来实现转码都可。

7 J# `* U1 V3 E, ]% b: k

该用户从未签到

2#
发表于 2023-4-20 09:08 | 只看该作者
耽搁数码管好控制,多个挺麻烦需要定时轮询
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-20 02:22 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表