第三节 FPGA数码管驱动2
来源:互联网 发布:js date 输出格式 编辑:程序博客网 时间:2024/06/06 03:49
先附上代码:
module Nixie (LEDs ,Nixies,clk,rst);output [7:0] LEDs;output [6:0] Nixies;input clk,rst;reg [26:0] cnt;reg [6:0] NixieDisplay;reg [7:0] GE;parameter segment0 = 8'd1, segment1 = 8'd2, segment2 = 8'd3, segment3 = 8'd4, segment4 = 8'd5, segment5 = 8'd6, segment6 = 8'd7, segment7 = 8'd8, segment8 = 8'd9, segment9 = 8'd10, segment10 = 8'd11, segment11 = 8'd12, segment12 = 8'd13, segment13 = 8'd14, segment14 = 8'd15, segment15 = 8'd16;parameter duan0 = 8'Hc0, duan1 = 8'HF9, duan2 = 8'HA4, duan3 = 8'HB0, duan4 = 8'H99, duan5 = 8'H92, duan6 = 8'H82, duan7 = 8'HF8, duan8 = 8'H80, duan9 = 8'H90, duan10 = 8'H88, duan11 = 8'H83, duan12 = 8'Hc6, duan13 = 8'Ha1, duan14 = 8'H86, duan15 = 8'H8e;always @(posedge clk or negedge rst) begin if(!rst) begin cnt = 0; GE = 0; end else begin cnt = cnt + 27'b1; if(cnt >= 27'H2FAF080) begin cnt = 0; GE = GE + 8'b1; if(GE == 8'd16) GE = 0; end end endalways @(posedge clk) begin case(GE) segment0: NixieDisplay = duan0[6:0]; segment1: NixieDisplay = duan1[6:0]; segment2: NixieDisplay = duan2[6:0]; segment3: NixieDisplay = duan3[6:0]; segment4: NixieDisplay = duan4[6:0]; segment5: NixieDisplay = duan5[6:0]; segment6: NixieDisplay = duan6[6:0]; segment7: NixieDisplay = duan7[6:0]; segment8: NixieDisplay = duan8[6:0]; segment9: NixieDisplay = duan9[6:0]; segment10: NixieDisplay = duan10[6:0]; segment11: NixieDisplay = duan11[6:0]; segment12: NixieDisplay = duan12[6:0]; segment13: NixieDisplay = duan13[6:0]; segment14: NixieDisplay = duan14[6:0]; segment15: NixieDisplay = duan15[6:0]; default: NixieDisplay = duan0[6:0]; endcase end assign Nixies = NixieDisplay; assign LEDs = GE;endmodule
先定义数码管的每段的输出:output [6:0] Nixies;再定义时钟和复位按键输入:input clk,rst;定义计数器CNT的寄存器: reg [26:0] cnt;(因为使用的是25M的时钟,所以每次时钟反转的时间应该为1/25us,经计算需要 27'H2FAF080次才能到达1s)。因程序用到了case_endcase,所以定义了进入case的条件,类似C里面的数组或者宏定义。
parameter segment0 = 8'd1, segment1 = 8'd2, segment2 = 8'd3, segment3 = 8'd4, segment4 = 8'd5, segment5 = 8'd6, segment6 = 8'd7, segment7 = 8'd8, segment8 = 8'd9, segment9 = 8'd10, segment10 = 8'd11, segment11 = 8'd12, segment12 = 8'd13, segment13 = 8'd14, segment14 = 8'd15, segment15 = 8'd16;
因数码管显示数字需要按照数码管的格式进行显示,开发板上用到的是共阳极数码管所以直接到查找相关的码表。
parameter duan0 = 8'Hc0, duan1 = 8'HF9, duan2 = 8'HA4, duan3 = 8'HB0, duan4 = 8'H99, duan5 = 8'H92, duan6 = 8'H82, duan7 = 8'HF8, duan8 = 8'H80, duan9 = 8'H90, duan10 = 8'H88, duan11 = 8'H83, duan12 = 8'Hc6, duan13 = 8'Ha1, duan14 = 8'H86, duan15 = 8'H8e;
复位程序
always @(posedge clk or negedge rst) begin if(!rst) begin cnt = 0; GE = 0; end else
假如rst有下降沿进入always并判断此时的rst是否为低电平,假如是的话对计数和码值进行复位。
begin cnt = cnt + 27'b1; if(cnt >= 27'H2FAF080) begin cnt = 0; GE = GE + 8'b1; if(GE == 8'd16) GE = 0; end end
计数器不停的计数,到达1S清零并对GE加一。通过判断GE的值来case 相应的程序。
always @(posedge clk) begin case(GE) segment0: NixieDisplay = duan0[6:0]; segment1: NixieDisplay = duan1[6:0]; segment2: NixieDisplay = duan2[6:0]; segment3: NixieDisplay = duan3[6:0]; segment4: NixieDisplay = duan4[6:0]; segment5: NixieDisplay = duan5[6:0]; segment6: NixieDisplay = duan6[6:0]; segment7: NixieDisplay = duan7[6:0]; segment8: NixieDisplay = duan8[6:0]; segment9: NixieDisplay = duan9[6:0]; segment10: NixieDisplay = duan10[6:0]; segment11: NixieDisplay = duan11[6:0]; segment12: NixieDisplay = duan12[6:0]; segment13: NixieDisplay = duan13[6:0]; segment14: NixieDisplay = duan14[6:0]; segment15: NixieDisplay = duan15[6:0]; default: NixieDisplay = duan0[6:0]; endcase end
判断相应的GE赋值给显示缓存寄存器NixieDisplay。
assign Nixies = NixieDisplay; assign LEDs = GE;
把缓存寄存器的值放到输出wire上。
阅读全文
0 0
- 第三节 FPGA数码管驱动2
- 第三节 FPGA驱动数码管
- VerilogHDL实现FPGA的数码管驱动
- 2014-3-12 FPGA学习-数码管 2
- 三、SCM 数码管&FPGA 数码管
- iPhone第三节:UITableView(2)
- FPGA 按键控制数码管
- FPGA数码管计数功能
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--数码管电路驱动(八)
- FPGA学习(第6节)-Verilog计数器(实现流水灯+实现数码管秒表)
- FPGA让数码管亮起来
- 74HC595驱动数码管
- TM1637驱动数码管
- 驱动数码管的实验
- STM32CubeMX_SPI驱动数码管
- 《FPGA零基础入门到精通视频教程》-第005讲数码管显示(按键去抖,状态机,BCD码转换)
- 第三节 什么是ERP
- 第三节 CFileOpt类
- vim完整开发环境配置(taglist/cscope/nerdtree/ctrlp)
- vue.js入门(四)——自定义过滤器
- java 对象串行化
- 你真的会写二分查找吗
- [SCOI2008]配对
- 第三节 FPGA数码管驱动2
- chrome 查看Android本地api
- 【Java-集合】ArrayList的自动扩容
- ASP.NET总结
- Jump Game:依据数组下表以及数组元素之和能否大于数组长度的值
- Springboot单文件上传大小限制 FileUploadBase$FileSizeLimitExceededException:
- Java线程池 ExecutorService
- 整理一个带进度,带速度两用的ProgressBar
- 检索策略