题目描述
在板子上的七段数码管上的八个数字分别显示:计时器(两位)、按照拨码开关的输入(两位)、班级(两位)、学号(两位)
其中计时器为2HZ的,从10到到0,当倒计时为0时,从10重新开始计数;当按下开关s0,立即变化为10并重新计数。
拨码开关共有八个,分为两组,前四个控制第一个显示,后四个控制第二个的显示,从0到F都有。
班级学号为常数,但是班级和学号的第二位要显示小数点。
分析
数码管的显示
数码管的显示部分应该是整体的最难环节了,首先我们先介绍一下一个数码管的显示原理。数码管之所以是七段数码管,是因为在构成中分为八个显示部分,(为什么叫七段,可能是显示数字只需要七个,最后一个小数点被忽略了)

我们只需要在对应的8位信号分别对应给出高低信号,就能控制数码管的显示了。
需要注意一下,我们在实验过程中采用的数码管是共阴极,也就是将阴极连接在一起,有的数码管是共阳极,也就是对应低电平有效,那么我们就需要将输入翻转。
0~F的显示方式:

对应的二进制和十六进制:
A B C D E F G DP(点)
0 8’b1111_1100;fc
1 8’b0110_0000;60
2 8’b1101_1010;da
3 8’b1111_0010;f2
4 8’b0110_0110;66
5 8’b1011_0110;b6
6 8’b1011_1110;be
7 8’b1110_0000;e0
8 8’b1111_1110;fe
9 8’b1111_0110;f6
A 8’b1110_1110;ee
B 8’b0011_1110;3e
C 8’b0001_1010;1a
D 8’b0111_1010;7a
E 8’b1001_1110;9e
F 8’b1000_1110;8e
那么多个数码管呢
虽然我们知道了单个的数码管控制方式,但是如何控制多个数码管呢?
每一个都给一个八位的使能信号?
好主意,但是太浪费了,所以人们有更好的方法。
因为是数码管显示,是需要人眼来观察的,我们都知道人眼有视觉暂留特性,因此思路就是将数码管分为两组,一组四个用一个四位使能端控制,那么一边只需要一个八位信号了。只要使能端交替的够快,就相当于每一个数码管都在显示。 人眼的分辨约在25HZ,为了保证功能的实现以及能耗的问题,我们选择1khz交替。
显示模块:
输入为8个八位二进制数(其实4位也可以,只需要在内部进行翻译),时钟信号,输出位左右端的数据和使能信号。
因为是1HZ,我们还是需要一个分频,分频在之前的博客有讲解,这里只贴出代码:
(10-8和10-3差了105,所以我们数到99999)
`timescale 1ns / 1ps
module all_divider(
input clk_i,
output reg clk_o
);
reg [16:0] cnt=0;
always@(posedge clk_i) begin
if(cnt == 99999)
cnt <= 'b000;
else
cnt <= cnt + 1'b1;
if(cnt <= 49999)
clk_o <= 1'b1;
else
clk_o <= 1'b0;
end
endmodule
显示模块主部分:
`timescale 1ns / 1ps
module all_counter(
input [7:0]out0,
input [7:0]out1,
input [7:0]out2,
input [7:0]out3,
input [7:0]out4,
input [7:0

本文围绕板子上七段数码管的显示展开,包括显示计时器、拨码开关输入、班级和学号。介绍了数码管显示原理,区分共阴极和共阳极,给出0 - F的显示编码。还阐述了多个数码管的控制方法,通过分组和使能端交替实现,最后说明了各模块的输入输出及代码实现思路。
最低0.47元/天 解锁文章
1338

被折叠的 条评论
为什么被折叠?



