文章目录

  • 前言
  • 一、原理
    • 1、共阴极数码管or共阳极数码管
    • 2、共阴极与共阳极的真值表
  • 二、系统设计
    • 1、总体框图:
    • 2、模块调用
    • 3、模块原理图
  • 三、源码
    • 1、计数模块
    • 2、数码管驱动模块
    • 3、顶层模块
  • 四、运行效果
  • 五、总结
  • 六、参考资料

前言

环境:
1、Quartus18.1
2、vscode
3、板子型号:EP4CE6F17C8N


一、原理

视觉暂留原理:人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。
这里我们的数码管其实是在一直切换的,但是由于切换得太快,产生了视觉暂留,从而影响我们的眼睛以为数码管没有变换。

1、共阴极数码管or共阳极数码管

共阴极:公共端为阴极,加阳极数码管点亮。即当真值为1时,数码管点亮;真值为0时,数码管不亮。
共阳极:公共端为阳极,加阴极数码管点亮。即当真值为0时,数码管点亮;真值为1时,数码管不亮。
所以在使用到数码管时,我们需要去判断板子的数码管是共阴极还是共阳极。

2、共阴极与共阳极的真值表

共阴极真值表:

共阳极真值表:

二、系统设计

1、总体框图:

2、模块调用

3、模块原理图

三、源码

1、计数模块

module counter(input     wire         clk      ,input     wire         rst_n    ,output    wire   [16:0] dout
);
localparam [25:0] CNTMAX_1s   = 26'd50_000_000;
localparam [16:0] CNTMAX_days = 17'd86400;
reg [25:0] cnt_1s;
reg [16:0] cnt_days;
wire   [4:0] hour;
wire   [5:0] min ;
wire   [5:0] sec;
always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt_1s<=26'd0;else if(cnt_1s==CNTMAX_1s-1)cnt_1s<=26'd0;elsecnt_1s<=cnt_1s+1;
endalways @(posedge clk or negedge rst_n)beginif(!rst_n)cnt_days<=17'd0;else if(cnt_days==CNTMAX_days-1&&cnt_1s==CNTMAX_1s-1)cnt_days<=17'd0;else if(cnt_1s==CNTMAX_1s-1)cnt_days<=cnt_days+1;elsecnt_days<=cnt_days;
end
assign hour=cnt_days/3600;
assign min =(cnt_days-(hour*3600))/60;
assign sec =cnt_days-(hour*3600+min*60);
assign dout= {hour,min,sec};
endmodule

2、数码管驱动模块

module seg_driver(  //数码管驱动input               clk     ,input               rst_n   ,input       [16:0]  din     ,output reg  [5:0]   sel     , //片选output reg  [7:0]   dig       //段选
);// parameter TIME_SCAN = 50_000 ; // 1MS 让片选一直扫描的移动
parameter TIME_SCAN = 50_000;parameter   ZER = 7'b100_0000,  // 0亮 1灭ONE = 7'b111_1001,TWO = 7'b010_0100,THR = 7'b011_0000,FOR = 7'b001_1001,FIV = 7'b001_0010,SIX = 7'b000_0010,SEV = 7'b111_1000,EIG = 7'b000_0000,NIN = 7'b001_0000;reg    [15:0]   cnt_scan    ; //扫描计数器wire            add_cnt_scan;wire            end_cnt_scan;reg    [3:0]    data        ; //寄存器 缓存数据reg             dot         ; //小数点wire   [3:0]    sec_l       ;  //秒低位wire   [3:0]    sec_h       ;  //秒 高位wire   [3:0]    min_l       ;  // 分地位wire   [3:0]    min_h       ;  //分高位wire   [3:0]    hou_l       ; wire   [3:0]    hou_h       ;assign  sec_l = din[5:0]   % 10 ;  // 59 % 10 = 9assign  sec_h = din[5:0]   / 10 ;  // 59 / 10 = 5assign  min_l = din[11:6]  % 10 ;assign  min_h = din[11:6]  / 10 ;assign  hou_l = din[16:12] % 10 ;assign  hou_h = din[16:12] / 10 ;always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_scan <= 16'b0;endelse if(add_cnt_scan)beginif(end_cnt_scan)begincnt_scan <= 16'b0;endelse begincnt_scan <= cnt_scan + 1'b1;endendelse begincnt_scan <= cnt_scan ;endendassign add_cnt_scan = 1'b1;assign end_cnt_scan = add_cnt_scan && cnt_scan == TIME_SCAN - 1;always @(posedge clk or negedge rst_n)begin   // 片选if(!rst_n)beginsel <= 6'b011_111;endelse if(end_cnt_scan)beginsel <= {sel[0],sel[5:1]};//循环向右移动endelse beginsel <= sel;endend always @(posedge clk or negedge rst_n)beginif(!rst_n)begindata <= 3'b0;dot  <= 1'b1;endelse begincase(sel)6'b011_111 : begin data <= sec_l; dot <= 1'b1; end6'b101_111 : begin data <= sec_h; dot <= 1'b1; end6'b110_111 : begin data <= min_l; dot <= 1'b0; end6'b111_011 : begin data <= min_h; dot <= 1'b1; end6'b111_101 : begin data <= hou_l; dot <= 1'b0; end6'b111_110 : begin data <= hou_h; dot <= 1'b1; enddefault : begin data <= 3'b0; dot <= 1'b1;endendcaseendendalways @(posedge clk or negedge rst_n)beginif(!rst_n)begindig <= 8'b0;endelse begincase(data)0 : dig <= {dot,ZER};1 : dig <= {dot,ONE};2 : dig <= {dot,TWO};3 : dig <= {dot,THR};4 : dig <= {dot,FOR};5 : dig <= {dot,FIV};6 : dig <= {dot,SIX};7 : dig <= {dot,SEV};8 : dig <= {dot,EIG};9 : dig <= {dot,NIN};default : dig <= 8'b0;endcaseendend
endmodule

3、顶层模块

module Clock_top(input       clk   ,input       rst_n ,output  [5:0]  sel ,output  [7:0]  dig
);
wire [16:0] dout;
counter counter_inst(.clk      (clk),.rst_n    (rst_n),.dout(dout)
);
seg_driver seg_driver_inst(  //数码管驱动.clk     (clk),.rst_n   (rst_n),.din     (dout),.sel     (sel), //片选.dig     (dig)  //段选
);
endmodule

四、运行效果

数码管实现电子时钟


五、总结

此次的工程并不难,只是需要我们对基础有一定的理解能力即可。首先是必须的计时器的实现,还有就是对数码管的片选、段选的操作。

六、参考资料

1、共阴极和共阳数码管详解
2、数码管电子时钟

FPGA通过数码管实现电子时钟相关推荐

  1. 八位一体共阴极数码管显示电子时钟+闹铃+温度检测

    老师一枚,服务于学生,制作了电子时钟融合温度检测的系统. 首先在焊接式前一定要仿真,更要注意仿真引脚和实际引脚的不同. 下面这个链接是常用元器件实物引脚图和解释. CSDNhttps://mp.csd ...

  2. 51单片机 Proteus仿真 数码管 万年历 电子时钟 阴历阳历 星期 DS1302 修改时间

    做了个比较叼的,数码管显示出年月日时分秒星期以及阴历的月份和日期. 按键可以修改年月日时分秒,星期几是根据年月日计算的,阴历也是计算出来的,不用按键修改.

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

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

  4. 【FPGA】数码管电子时钟

    目录 一丶数码管介绍 二丶任务描述 三丶系统框图 四丶模块调用 五丶模块原理图 六丶工程源码 1.计数器模块 2.数码管驱动模块 3.顶层模块 七丶仿真测试 1.TestBench 2.仿真结果 八丶 ...

  5. 炫彩LED电子时钟制作记录

    炫彩LED电子时钟制作笔记 以前也做过2.3寸数码管的电子时钟,但是显示颜色是固定的红色或蓝色.最近因为PCB厂家打样大放血,10*10以内5片只要5元还包邮,网上流出雪花灯,灯珠用的是那种单总线内置 ...

  6. 【FPGA】数码管电子时钟(可设置时间和闹钟)

    目录 前言 一丶需求分析 1.设置时间 2.设置闹钟 二丶工程源码 1.counter 2.seg_driver 3.key_debounce 4.beep 5.顶层模块 三丶模块原理图 四丶管脚信息 ...

  7. C51单片机的电子时钟(数码管显示)

    C51单片机的电子时钟 硬件环境: 相关开发板原理图解析 正式代码: 效果预览图 硬件环境: 普中科技51单片机开发板STC89C52 相关开发板原理图解析 查看这两个原理图,我们可以发现控制这8个数 ...

  8. 用四位数码管和DS3231时钟模块做车载电子时钟

    用四位数码管和DS3231时钟模块做车载电子时钟 本来咱车上收音模块上是有一个时钟的,但换了导航以后,发现时钟不好用了:主界面上有时钟,但位置太靠左侧,俺的大手握方向盘刚好挡住视线,而且在播放音乐时, ...

  9. 基于51单片机的8位数码管显示的可调时电子时钟

     基于51单片机的8位数码管显示的可调时电子时钟 本人大二本科生,第一次发东西,功能比较简单,代码有点复杂,希望能有大神指正. 基于51单片机的不可调时间的时钟显示,晶振为11.0592MHZ,60H ...

最新文章

  1. JQuery实现滚动广告(转)
  2. 《Java 2D游戏编程入门》—— 1.5 创建一个主动渲染的窗口
  3. 【C/C++多线程编程之七】pthread信号量
  4. android获取apk名称_安卓逆向——APK安装流程
  5. 第13篇: Flowable-BPMN操作流程之流程进展查看之流程图
  6. linux 集群管理工具,运维人员能轻松管理集群的必备工具有哪些?
  7. MUSIC算法---空间谱估计
  8. 台达PLC,触摸屏程序工程案例 含电气图 台达与伺服变频通讯实例
  9. Electron 使用Widevine CDM插件
  10. 人物-发明家-特斯拉:尼古拉·特斯拉
  11. win10 jFrameDesigner安装
  12. 概要设计的必要性及写法
  13. Unity创建渐变背景
  14. 【产业互联网周报】微软、谷歌再布局边缘云;美团放弃公有云业务;开普云登陆科创板...
  15. 配置MySQL环境、安装MySQL、解决mysql无法修改密码问题
  16. (node:22344) [DEP0123] DeprecationWarning: Setting the TLS ServerName to an IP address is not permit
  17. 从事互联网经营就要办理icp许可证吗
  18. linux环境下单网卡配置多个IP地址(详细)
  19. 【AI测试】人工智能测试整体介绍——第六部分
  20. bootstrap4  黑底白字导航

热门文章

  1. cropper图片编辑插件绘制圆形图片
  2. python库——argparse
  3. 安全即时通信软件简介
  4. 关于我在中华读书报发表的文章
  5. 瑞利分布随机变量产生MATLAB,运用直接抽样法产生指数分布、瑞利分布的随机变量序列matlab编程...
  6. 硅谷科技公司高福利的背后:81%员工工作不开心
  7. 模数转换A/D与数模转换D/A
  8. 基于canvas的图片编辑器,头像编辑器
  9. Hinton机器学习与神经网络课程的第二章学习笔记
  10. FreeType 2的设计——《The design of FreeType 2》中译版