AC620FPGA学习笔记——BCD数码管

  • BCD数码管
    • 硬件结构
    • 整体框架
    • BCDDisplay模块
    • device_74hc595模块
    • 代码部分
      • device_74hc595
      • BCDdecoder
      • frequencydivider
      • BCDDisplay
      • 顶层代码

BCD数码管

工程地址:https://github.com/HaHaHaHaHaGe/Planof2019_half/tree/master/Course_Project/FPGA/class03_hc595
实现8个8位数码管,根据分频后的时钟自动计数(16进制)

硬件结构

开发板:AC620

整体框架

BCDDisplay模块


根据输入的data每4位为1组,共8组,对应8个数码管,轮询进行刷新

device_74hc595模块


根据输入的并行数据输出串行数据,每次输出后会产生锁存脉冲(lock),在输出过程中会产生busy高电平信号,等传输完毕后恢复低电平。

代码部分

device_74hc595

module device_74hc595(clk,rst,data,busy,lock,lock595,out595,clk595
);input clk,rst,lock;
input [15:0]data;
output reg lock595,clk595,busy,out595;reg [4:0]send_cnt;
reg [15:0]data_buffer;reg [1:0]flag;
localparam SEND_STATE = 2'b00;
localparam LOCK0_STATE = 2'b01;
localparam LOCK1_STATE = 2'b11;
localparam IDLE_STATE = 2'b10;always@(posedge clk,negedge rst)
if(!rst)beginsend_cnt <= 5'b0;busy <= 1'b0;data_buffer <= 16'b0;flag <= IDLE_STATE;lock595 <= 1'b0;clk595 <= 1'b1;out595 <= 1'b0;
end
else case(flag)SEND_STATE:if(clk595) beginif(send_cnt == 5'd16)flag <= LOCK0_STATE;else beginsend_cnt <= send_cnt + 5'b1;out595 <= data_buffer[5'd15-send_cnt];clk595 <= 1'b0;endendelse beginclk595 <= 1'b1;endLOCK0_STATE: beginlock595 <= 1'b1;flag <= LOCK1_STATE;endLOCK1_STATE: beginlock595 <= 1'b0;flag <= IDLE_STATE;endIDLE_STATE:if(lock)beginsend_cnt <= 5'b0;data_buffer <= data;busy <= 1'b1;flag <= SEND_STATE;endelsebusy <= 1'b0;default:flag <= IDLE_STATE;endcase
endmodule

BCDdecoder

module BCDdecoder(data,out
);
input [3:0]data;
output reg [7:0]out;
always@(*)
case(data)4'h0:out = 7'b1000000;             4'h1:out = 7'b1111001;             4'h2:out = 7'b0100100;             4'h3:out = 7'b0110000;             4'h4:out = 7'b0011001;             4'h5:out = 7'b0010010;             4'h6:out = 7'b0000010;             4'h7:out = 7'b1111000;             4'h8:out = 7'b0000000;             4'h9:out = 7'b0010000;             4'ha:out = 7'b0001000;             4'hb:out = 7'b0000011;             4'hc:out = 7'b1000110;             4'hd:out = 7'b0100001;             4'he:out = 7'b0000110;             4'hf:out = 7'b0001110;
endcaseendmodule

frequencydivider

module frequencydivider(clk,rst,fclk
);input clk,rst;
output reg fclk;reg [31:0]cnt;always@(posedge clk,negedge rst)
if(!rst) begincnt <= 0;fclk <= 0;
end
else if(cnt == 500) begincnt <= 0;fclk <= ~fclk;
end
elsecnt <= cnt + 1;endmodule

BCDDisplay

module BCDDisplay(clk,rst,data,lock595,out595,clk595
);
wire fclk;
input clk,rst;
input [31:0]data;
output lock595,out595,clk595;
reg flag;
reg [7:0]selecter;
reg [7:0]srcdata;
wire [7:0]dstdata;
reg [31:0]data_buffer;
reg lock;
wire busy;
reg doonce;
reg [7:0]cnt;localparam Wait_Busy = 1'b0;
localparam Circle_Play = 1'b1;BCDdecoder BCDdecoder_01(.data(srcdata),.out(dstdata)
);frequencydivider frequencydivider_01(.clk(clk),.rst(rst),.fclk(fclk)
);device_74hc595 device_74hc595_01(.clk(fclk),.rst(rst),.data({dstdata,selecter}),.busy(busy),.lock(lock),.lock595(lock595),.out595(out595),.clk595(clk595)
);
always@(posedge clk,negedge rst)
if(!rst) beginselecter <= 8'b0000_0001;data_buffer <= 32'b0;flag <= Circle_Play;srcdata <= 8'b0;lock <= 0;cnt <= 8'd4;doonce <= 0;
end
else begindata_buffer <= data;case(flag)Circle_Play: beginsrcdata <= data_buffer >> cnt;selecter <= {selecter[6:0],selecter[7]};flag <= Wait_Busy;doonce <= 0;if(cnt == 8'd28)cnt <= 8'b0;elsecnt <= cnt + 4;endWait_Busy:if(busy) beginlock <= 0;doonce <= 1;endelse if(doonce)flag <= Circle_Play;elselock <= 1;endcase
end
endmodule

顶层代码

module test_74hc595(clk,rst,key,lock595,out595,clk595
);
wire lock;
input clk;
input wire rst,key;
wire rst2;
reg [31:0]data;output lock595,out595,clk595;wire rst3;
wire clk2;inkey inkey_1(.in(key),.out(lock),.clk(clk)
);inkey inkey_2(.in(rst),.out(rst2),.clk(clk)
);BCDDisplay BCDDisplay_1(.clk(clk),.rst(rst3),.data(data),.lock595(lock595),.out595(out595),.clk595(clk595)
);frequencydivider frequencydivider2(.clk(clk),.rst(rst3),.fclk(clk2)
);always @(negedge rst3,posedge clk2)
begin
if(!rst3)data <= 0;
elsedata <= data + 1;
endassign rst3 = ~rst2;endmodule

AC620FPGA学习笔记——BCD数码管相关推荐

  1. AC620FPGA学习笔记——PLL与NCO

    AC620FPGA学习笔记--PLL与NCO PLL&NCO 整体框架 PLL配置 NCO配置 代码部分 顶层代码 PLL&NCO 工程地址:https://github.com/Ha ...

  2. 51单片机学习笔记之数码管1显示数字0以及使用蜂鸣器

    首先我们还是先定义数码管的引脚,打开原理图,我们将数码管的位选引脚初始化一下. 然后我们打开数码管1的总开关,关掉其余的三个数码管,不懂什么意思看我上一篇博客,下面是链接:https://blog.c ...

  3. 51单片机学习笔记之数码管工作原理

    昨天我们学习了按键的基本操作,今天我们来学习一下数码管的工作原理,如果觉得我博客更新的太快,没有关系,大家可以回顾我往期的博客,利用课下时间到社团补习,如果我博客哪里有写的不好的地方,大家也不用想太多 ...

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

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

  5. 学习笔记--八数码问题

    题目链接 https://www.luogu.org/problemnew/show/P1379 分析 经典的八数码问题,有双向BFS和\(IDA*\)的方法,这里使用的是\(A*\)启发式搜索. 简 ...

  6. 单片机学习笔记-数码管的显示

    单片机学习笔记-数码管的显示 数码管的显示 1.首先我们来看一下开发板的原理图 由管脚分配可知,数码管的末端(也就是LED端),是由74138译码器来控制的. 2.下面是数码管显示的函数 这里我们使用 ...

  7. STM32F103学习笔记(5)——数码管驱动TM1650使用

    一.简介 TM1650 是一种带键盘扫描接口的 LED(发光二极管显示器)驱动控制专用电路.内部集成有 MCU 输入输出控制数字接口.数据锁存器.LED 驱动.键盘扫描.辉度调节等电路.TM1650 ...

  8. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  9. C语言学习笔记06-占位符格式、C基本类型及逃逸字符一些细节(附介绍BCD码)

    主要整理有关占位符格式与逃逸字符的一些细节 朋友们,看栗子--"BCD解码" (文末附BCD码介绍) 一个BCD数的十六进制是0x12(对应二进制表示:0001 0010),它表达 ...

最新文章

  1. Auto ML自动特征工程
  2. Python_03-数据类型
  3. layui自定义查询条件html页面,Layui的数据表格+springmvc实现搜索功能的例子_飛雲_前端开发者...
  4. my40_MySQL锁概述之意向锁
  5. 笔记本电脑控制面板在哪_2020年滚筒洗衣机选购指南:滚筒洗衣机应该怎么选?哪一些滚筒洗衣机性价比更高?...
  6. C#3.0中的新特性
  7. poj 3624 Charm Bracelet (01背包)
  8. pandas填充空数组_Pandas 数据处理:空值清理、联级、合并、缺省空值填充
  9. linux创建自签名证书
  10. php博客平台 开源,PHP开源博客Blog - PHP开源网(PHP-OPEN.ORG)
  11. 戴戴戴师兄-数据分析课程笔记(第一讲)
  12. 【OpenCV实战】OpenCV实现人脸检测详解(含代码)
  13. Could not transfer artifact XXX:XXX:pom:XX from/to镜像地址
  14. P2738 [USACO4.1]篱笆回路Fence Loops
  15. avg制作工具 开源_23种开源视听制作工具
  16. 苹果内购噩梦条款3.1.1,知道这些小细节才不会被拒审
  17. 通过数据库存储过程调用Web服务的办法
  18. 利用金山快盘和TortoiseSVN搭建自己的svn服务器
  19. echarts柱状图属性
  20. 水压机机械液压驱动控制系统

热门文章

  1. 数据挖掘——模型融合
  2. 一个三线小镇的数字生活
  3. 在Elasticsearch中实现统计异常检测器——第三部分
  4. finallshell用密钥对链接阿里云服务器
  5. Js数组转字符串,字符串转数组
  6. P37-前端基础-浮动块元素和行内元素其他特点
  7. 包含视觉的多传感器融合的方案或者论文
  8. 中国烟草税率仅欧洲一半 烟价最便宜
  9. php记录xml到txt,提取xml文档的内容到.txt文件中
  10. 详细版mongodb下载安装教程----windows版