目录

概念

单个数码管显示单个数字

操作

代码

现象

分析

四个数码管定时单个显示数字

分析

代码

四个数码管同时显示

分析

代码

现象

四个数码管同时显示定时转换

分析

代码


概念

我们要搞懂数码管首先要明白几个概念。

我们先看一个数码管

一个数码管是由a、b、c、d、e、f、g、dp八个二极管组成,八个LED一端接在一起,另一端引脚引出来。二极管如果阳极连在一起,就是共阳极数码管,阴极连在一起,就是共阴极数码管。

如上图,是一个共阴极数码管,要使数码管显示不同的数字,只需点亮对应LED即可。如:数码管显示“0”,则a、b、c、d、e、f六个LED亮,g、dp这俩个LED灭,即可显示“0”。

如果是一个数码管我们需要控制八个led来控制显示 如果是四个 理论上需要控制三十二个 太多了 我们这时候就引用了共阴和共阳的概念。

我们来看原理图(这里我这个板子是共阳,共阴同理)

一共只需要十二个引脚即可,四个段选 八个位选 通过D1234 不同的高低电平可以控制哪个数码管亮 通过给abcdefg dp 不同的高低电平 可以控制数码管显示什么

如果没学过51单片机的朋友可能还不理解如何实现控制四位数码管 看原理图 好像一个时刻只能显示一个数 这里运用了人类视觉的偏差 即当不同的数码管切换速度足够快 则可以出现同时显示的偏差 也就实现了四位数码管的显示

接着我们先看

单个数码管显示单个数字

操作

这个就比较容易实现  我们按照原理图找到对应引脚(有些可以自己定义)

在下面选择pin planner 配置自己的引脚 (自行配置)

配置好了之后 全局编译 然后导入板子

选中里面sof文件  点击start 导入 (前面文章介绍过 这里也只简单介绍一遍)

代码

module KC14(clk,rst,seg,sel);
input clk;
input rst;
output reg[7:0] seg;
reg[1:0] num;
output reg[3:0] sel;always@(posedge clk or negedge rst)begin
beginif(!rst)seg<=8'b1111_1111;sel<=4'b1111;
end
elsebeginseg<=8'b1010_0100;//选位 亮具体哪个led 控制数码管显示数字sel<=4'b0111;//段选 控制哪个数码管亮endendendmodule

现象

分析:

简单分析一下 大家应该对verilog语言有了基础的认识 主要讲一下段选和位选

段选 因为是共阳 而是D1 D2 D3 D4 为高电平即可 但是我们可以注意到 我给的是0

因为我们原理图接了一个

当给0电平时导通 这样我们通过控制四位二进制 0000到 1111 来控制哪个数码管亮 也就是段选

然后我们在上面也介绍过 abcdefg dp(.) 这八个led 我们通过给0 来控制数码管显示什么数字

上面例子给的是 8'b1010_0100 也就是2 我们想实现不同的数字对应不同的八位二进制数 大家可以自己尝试改变一下。

四个数码管定时单个显示数字

分析

原理与上面类似 就不赘述了  主要加了一个定时 和 不同数码管的切换 如果上面例子看懂了 这里直接看代码应该就可以看懂 这里实现的是四个数码管 1234 定时1s 每秒切换 1234 分别显示

代码

module KC5(clk,rst,seg,sel);
input clk;
input rst;
output reg[7:0] seg;
reg[1:0] num;
output reg[3:0] sel;
reg[25:0] cnt;
reg[25:0] clk_1s;always@(posedge clk or negedge rst)beginif(!rst)begin
cnt=0;endelse if(cnt==26'd24_999_999)
cnt<=0;
else
cnt<=cnt+1;
end
//1s周期控制部分
always@(posedge clk or negedge rst)
begin if(!rst)clk_1s<=1;else if(cnt==26'd24_999_999)clk_1s<=~clk_1s;
else clk_1s<=clk_1s;
endalways@(posedge clk_1s or negedge rst)beginif(!rst)beginseg<=8'b1111_1111;sel<=4'b0000;num<=0;endelsebegin
case(num)0:beginseg<=8'b1111_1001;sel<=4'b0111;num<=1;end1:beginseg<=8'b1100_0100;sel<=4'b1011;num<=2;end2:beginseg<=8'b1101_0000;sel<=4'b1101;num<=3;end3:beginseg<=8'b1001_1001;sel<=4'b1110;num<=0;enddefault:num<=0; endcase
end
end
endmodule

现象就是数码管1 显示1 数码管2 显示2 数码管3显示3 数码管4显示4 依次每秒转换

四个数码管同时显示

分析

同一时刻 某个数码管 我们已经了解了 那么如何让四个数码管一起显示呢 这就需要我们在不同的段选中来回快速切换 当速度足够快时 就达到了我们想要的效果 四个数码管同时显示

代码

module KC6(clk,rst,seg,sel);input clk;
input rst;
output reg [7:0] seg;
output reg [3:0] sel;
reg [1:0] num;
reg[16:0] cnt;
reg[16:0] clk_1s;always@(posedge clk or negedge rst)beginif(!rst)begin
cnt=0;endelse if(cnt==26'd24_999)
cnt<=0;
else
cnt<=cnt+1;
endalways@(posedge clk or negedge rst)
begin if(!rst)clk_1s<=1;else if(cnt==26'd24_999)//注意区别上面 这里的cnt比上面的少 也就是转换的快clk_1s<=~clk_1s;//所以此时clk_1s不是1s
else clk_1s<=clk_1s;
endalways@(posedge clk_1s or negedge rst)
begin
if(!rst)
begin
seg<=8'b1111_1111;
sel<=4'b1111;
endelse
begincase(num)
0:
begin
seg<=8'b1111_1001;
sel<=4'b0111;
num<=1;
end1:
begin
seg<=8'b1010_0100;
num<=2;
sel<=4'b1011;
end2:
begin
seg<=8'b1011_0000;
num<=3;
sel<=4'b1101;
end3:
begin
seg<=8'b1001_1001;
num<=0;
sel<=4'b1110;
enddefault:num<=0; endcaseend
endendmodule

现象

四个数码管同时显示定时转换

分析

我么已经知道如何同时显示了 那么我们只需要多定义一个时钟 然后把上面的代码包含进来 就可以实现四位数码管同时显示 定时转换

这里我们要实现的是数码管1234 分别显示1234和4321 两者定时转换

代码

module KC7(clk,rst,seg,sel);
output reg [7:0] seg;
output reg [3:0] sel;
input clk;
input rst;
reg num0;
reg [1:0] num1;
reg[26:0] clk1;
reg[26:0] cnt;
reg[26:0] clk_1s;
reg[26:0]clk_2s;always@(posedge clk or negedge rst)beginif(!rst)begin
cnt=0;endelse if(cnt==26'd24_999)
cnt<=0;
else
cnt<=cnt+1;
end
//1s周期控制部分always@(posedge clk )
begin if(cnt==16'd24_999)clk_1s<=~clk_1s;
else clk_1s<=clk_1s;
endalways@(posedge clk_1s or negedge rst)
begin
if(!rst)
begin
clk1<=0;
endelse if(clk1==16'd2499)
begin
clk_2s<=~clk_2s;
clk1<=0;
endelse
beginclk_2s=clk_2s;
clk1<=clk1+1;
if(num0==0)
begin
case (num1)
0:
begin
seg<=8'b1111_1001;
sel<=4'b0111;
num1<=1;
end1:
begin
seg<=8'b1010_0100;
num1<=2;
sel<=4'b1011;
end2:
begin
seg<=8'b1011_0000;
num1<=3;
sel<=4'b1101;
end3:
begin
seg<=8'b1001_1001;
num1<=0;
sel<=4'b1110;
enddefault:num1<=0;
endcaseendelse
begin
case (num1)
0:
begin
seg<=8'b1001_1001;
sel<=4'b0111;
num1<=1;
end1:
begin
seg<=8'b1011_0000;
num1<=2;
sel<=4'b1011;
end2:
begin
seg<=8'b1010_0100;
num1<=3;
sel<=4'b1101;
end3:
begin
seg<=8'b1111_1001;
num1<=0;
sel<=4'b1110;
enddefault:num1<=0;
endcaseendendendalways@(posedge clk_2s )
beginnum0=!num0;end
endmodule

经验证 实验显现符合预期

FPGA学习汇总(六)----数码管显示(1)相关推荐

  1. FPGA基础设计之数码管显示

    1.数码管简介 数码管是一种半导体发光器件,其基本单元是发光二极管.一般分为七段数码管和八段数码管,多的一段是小数点.也有其他如N型.米型数码管以及16段.24段管等.本次设计的是八段数码管 1.1 ...

  2. 51单片机学习笔记-2数码管显示

    2 数码管显示 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Github仓 ...

  3. 单片机学习 4-动态数码管显示

    动态数码管显示 动态数码管介绍 数码管动态显示原理 数码管采用动态显示方式连接,则八位数码管每个位的数码管对应相同段的线路连接在一起.而位选线单独连接. 由于三八译码器的特性导致每次只能选择点亮一位数 ...

  4. FPGA学习笔记(七): DSB调制解调的仿真

    笔记七是DSB调制解调的仿真实现. DSB调制解调的实现原理:首先使用DDS产生低频正弦波信号作为调制信号,再用DDS产生高频信号作为载波信号,然后使用乘法器将两者相乘产生DSB信号,DSB信号与载波 ...

  5. FPGA学习笔记(八):ASK调制解调的仿真

    笔记八是ASK调制解调的仿真实现. ASK调制解调的实现原理:首先使用MATLAB产生存储基带波形的coe文件,再让ROM读取coe文件输出基带波形,然后DDS产生正弦波信号作为载波信号,接下来使用乘 ...

  6. FPGA学习—数码管显示

    FPGA学习--数码管显示 文章目录 FPGA学习--数码管显示 结构框架 一.硬件设计 二.verilog编写 1.计数器 2.译码模块 3.数码管扫描模块 4.顶层模块 实验结果 结构框架 数码管 ...

  7. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

  8. FPGA学习之数模转换(TLC5620)(通过4个按键输入,输出数模转换需要的数据和数码管显示需要的数据)

    ​1.数模转换器即DAC,一般情况下由四个部分组成,权电阻网络,运算放大器,基准电源和模拟开关.是一种以二进制显示的数字量转换成以参考电压为基准的模拟量转换器. 2.设计原理: TLC5620是一个拥 ...

  9. FPGA课程设计——数字电子时钟VERILOG(基于正点原子新起点开发板,支持8位或6位共阳极数码管显示时分秒毫秒,可校时,可设闹钟,闹钟开关,led指示)

    2019级电子科学与技术专业FPGA课程设计 报   告 2022  年 5 月 20 日 多功能数字电子钟的设计 摘要 电子设计自动化(EDA)是一种实现电子系统或电子产品自动化设计的技术,使用ED ...

最新文章

  1. 三调 图斑地类面积_国土三调攻坚冲刺,大疆无人机为调查举证提供加速度
  2. 基于ZIGBEE通信的功率电子负载
  3. mysql 时间差函数 timestampdiff datediff 简介
  4. 学习笔记Flink(八)—— 基于Flink 在线交易反欺诈检测
  5. 从这3个方面,帮你大幅度提升用户的搜索体验
  6. PMP 之程序性计划、实体性计划、综合计划
  7. Codeforces Global Round 12 E. Capitalism 差分约束
  8. java先抽到红球获胜,【图片】红蓝球概率问题,通过程序模拟抽取,计算结果已出,有兴趣来看【非现役文职吧】_百度贴吧...
  9. python 字符集编码设置(精华)
  10. linux 监控进程调度,linux进程启动调度监控和管理
  11. 证明一个距离空间是完备的
  12. SAS安装过程中出现unknow等或没有生成ip地址问题的解决办法
  13. 推荐系统三十六式:矩阵分解 总结
  14. 写了一个测试体质的工具,其实也可以用于算命。
  15. 利用MTviz绘制线粒体基因组结构图
  16. python 惰性属性_python中惰性对象
  17. 关于微信小程序danmu-List所遇到的坑
  18. python获取图片像素点颜色_Python获取图片位置像素色值及判断色值是否存在
  19. java 快速开发平台
  20. 沟通修炼 I型沟通-U型沟通

热门文章

  1. The Flask Mega-Tutorial 之 Chapter 8: Followers
  2. 2000 Followers-3D CSS text
  3. ps滤镜之——马赛克
  4. Win11添加日语输入法的教程
  5. 【论文阅读】3D-CVF: Generating Joint Camera and LiDAR Features Using Cross-View Spatial Feature Fusion for
  6. 运用数学软件matlab求无穷积分,matlab积分的计算及其简单应用论文.doc
  7. 实现读文本文件(IOl流)
  8. docker-compose启动hyperf项目
  9. 超市会员管理系统php,最新超市商店会员刷卡消费综合管理系统C#源码分享,功能强大可二次开发或毕业设计等...
  10. python将电视剧按收视率进行排序_Python爬虫实现数据可视化,卫视实时收视率对比,就是如此强大!...