设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 250|回复: 0
收起左侧

Quartus Verilog HDL/FPGA 8段数码管段码交换实现:水平镜像,垂直镜像,180度旋转显示

[复制链接]
发表于 2023-3-22 09:04:16 | 显示全部楼层 |阅读模式
main.png
  1. `define fosc 50000000                //时钟频率 单位:HZ
  2. module main(
  3.         input clk,                                //时钟输入 Pin17
  4.         output [7:0] seg                //1位共阴数码管 Pin: DP:40,G:42,F:44,E:47,D:51,C:53,B:57,A:59
  5. );

  6. function [7:0] seg_mirror;                //数码管段码镜像 (返回镜像后的数码管段码,与共阴共阳无关)
  7.         input [7:0] seg;                //数码管段码 其中 <=> 符号表示段码位置交换
  8.         input x;                        //是否水平镜像
  9.         input y;                        //是否垂直镜像
  10.         begin
  11.                 seg_mirror[7:6] = seg[7:6];                //段码G与小数点
  12.                 case({y,x})
  13.                 2'b01:begin                        //水平镜像:B<=>F,C<=>E
  14.                         seg_mirror[5:0] = {seg[1],seg[2],seg[3],seg[4],seg[5],seg[0]};
  15.                 end
  16.                 2'b10:begin                        //垂直镜像:A<=>D,B<=>C,F<=>E
  17.                         seg_mirror[5:0] = {seg[4],seg[5],seg[0],seg[1],seg[2],seg[3]};
  18.                 end
  19.                 2'b11:begin                        //水平加垂直镜像:A<=>D,B<=>E,C<=>F (旋转180度)       
  20.                         seg_mirror[5:0] = {seg[2],seg[1],seg[0],seg[5],seg[4],seg[3]};
  21.                 end
  22.                 default:begin                //不镜像
  23.                         seg_mirror[5:0] = seg[5:0];               
  24.                 end
  25.                 endcase
  26.         end
  27. endfunction

  28. function [7:0] display;                        //16进制共阴数码管段码查询
  29.         input [3:0] hex;
  30.         begin
  31.         case(hex)
  32.                 4'h0:display = 8'h3F;
  33.                 4'h1:display = 8'h06;
  34.                 4'h2:display = 8'h5B;
  35.                 4'h3:display = 8'h4F;
  36.                 4'h4:display = 8'h66;
  37.                 4'h5:display = 8'h6D;
  38.                 4'h6:display = 8'h7D;
  39.                 4'h7:display = 8'h07;
  40.                 4'h8:display = 8'h7F;
  41.                 4'h9:display = 8'h6F;
  42.                 4'hA:display = 8'h77;
  43.                 4'hB:display = 8'h7C;
  44.                 4'hC:display = 8'h39;
  45.                 4'hD:display = 8'h5E;
  46.                 4'hE:display = 8'h79;
  47.                 4'hF:display = 8'h71;       
  48.         endcase
  49.         end
  50. endfunction


  51. integer i;
  52. reg [3:0] j;
  53. assign seg = seg_mirror(display(j),1'b1,1'b1);
  54. always @(posedge clk) begin
  55.         i = i + 1;
  56.         if(i >= `fosc) begin
  57.                 i = 0;
  58.                 j <= j + 4'd1;
  59.         end
  60. end
  61. endmodule
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-29 19:53 , Processed in 0.405023 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表