zoukankan      html  css  js  c++  java
  • FPGA自计数六位共阳极数码管动态显示2(调用task的方法)

      1 `timescale 1ns/1ps
      2 module adc_dis(
      3                clk ,
      4                rst_n ,       
      5                sm_seg ,
      6                sm_bit
      7                 );
      8                     
      9 input clk;//50HZ
     10 input rst_n;
     11 output[7:0] sm_seg;//段选
     12 output[5:0] sm_bit;//位选
     13 
     14 reg [7:0] sm_seg;
     15 reg [5:0] sm_bit;
     16 reg [31:0] count;
     17 reg [31:0] count2;
     18 reg [3:0] i;//数码管位数
     19 reg clk1, clk2;
     20 reg [3:0]ge,shi,bai,qian,wan,swan;
     21 reg [7:0] ge_reg,shi_reg,bai_reg,qian_reg,wan_reg,swan_reg;
     22 
     23 parameter//共阳极
     24         led_GYA0 = 8'hc0,     //'0'  
     25         led_GYA1 = 8'hf9,     //'1'
     26         led_GYA2 = 8'ha4,     //'2'
     27         led_GYA3 = 8'hb0,     //'3'
     28         led_GYA4 = 8'h99,     //'4'
     29         led_GYA5 = 8'h92,     //'5'
     30         led_GYA6 = 8'h82,     //'6'
     31         led_GYA7 = 8'hf8,     //'7'
     32         led_GYA8 = 8'h80,     //'8'
     33         led_GYA9 = 8'h90;     //'9'
     34 
     35 /****************分频1S*****************/        
     36 always@(posedge clk or negedge rst_n) begin
     37 if(!rst_n) begin //同步复位
     38            clk2  <= 1'b0;
     39            count2 <= 32'b0;
     40            end
     41 else if(count2 == 32'd24999999) begin //高低电平转换 5*10^7*20ns=10^9ns=1s
     42                                 clk2 <= ~clk2;
     43                                 count2 <= 32'b0;
     44                                 end
     45 else begin
     46      count2 <= count2 + 1'b1; //计数
     47      end
     48  end
     49         
     50 /******************计数*********************/
     51 always@(posedge clk2 or negedge rst_n) begin//个位处理
     52 if(!rst_n) begin
     53            ge <= 4'b0000;
     54            shi <= 4'b0000;
     55            bai <= 4'b0000;
     56            qian <= 4'b0000;
     57            wan <= 4'b0000;
     58            swan <= 4'b0000; 
     59            end
     60 else if(ge == 4'b1010) begin //个位等于10
     61                        ge  = 4'b0000;
     62                        shi = shi + 1'b1;
     63                        if(shi == 4'b1010) begin//十位等于10
     64                                           shi = 4'b0000;
     65                                           bai = bai + 1'b1;
     66                                           if(bai == 4'b1010) begin//百位等于10
     67                                                              bai  = 4'b0000;
     68                                                              qian = qian + 1'b1;
     69                                                              if(qian == 4'b1010) begin//千位等于10
     70                                                                                  qian = 4'b0000;
     71                                                                                  wan  = wan + 1'b1;
     72                                                                                  if(wan == 4'b1010) begin//万位等于10
     73                                                                                                     wan  = 4'b0000;
     74                                                                                                     swan = swan + 1'b1;
     75                                                                                                     if(swan == 4'b1010) begin//十万位等于10
     76                                                                                                                         ge <= 4'b0000;
     77                                                                                                                         shi <= 4'b0000;
     78                                                                                                                         bai <= 4'b0000;
     79                                                                                                                         qian <= 4'b0000;
     80                                                                                                                         wan <= 4'b0000;
     81                                                                                                                         swan <= 4'b0000; 
     82                                                                                                                         end
     83                                                                                                     end 
     84                                                                                  end
     85                                                              end 
     86                                         end
     87                          end
     88 else  begin
     89         ge <= ge + 1'b1;
     90         end
     91         
     92 end
     93                           
     94 /***************编码*******************/
     95 always@(posedge clk2 or negedge rst_n) begin
     96 //case(ge)
     97 //     4'b0000: ge_reg <= led_GYA0;
     98 //     4'b0001: ge_reg <= led_GYA1;
     99 //     4'b0010: ge_reg <= led_GYA2;
    100 //     4'b0011: ge_reg <= led_GYA3;
    101 //     4'b0100: ge_reg <= led_GYA4;
    102 //     4'b0101: ge_reg <= led_GYA5;
    103 //     4'b0110: ge_reg <= led_GYA6;
    104 //     4'b0111: ge_reg <= led_GYA7;
    105 //     4'b1000: ge_reg <= led_GYA8; 
    106 //     4'b1001: ge_reg <= led_GYA9;
    107 //     default: ge_reg <= led_GYA0; 
    108 //endcase
    109 //      
    110 //case(shi)
    111 //     4'b0000: shi_reg <= led_GYA0;
    112 //     4'b0001: shi_reg <= led_GYA1;
    113 //     4'b0010: shi_reg <= led_GYA2;
    114 //     4'b0011: shi_reg <= led_GYA3;
    115 //     4'b0100: shi_reg <= led_GYA4;
    116 //     4'b0101: shi_reg <= led_GYA5;
    117 //     4'b0110: shi_reg <= led_GYA6;
    118 //     4'b0111: shi_reg <= led_GYA7;
    119 //     4'b1000: shi_reg <= led_GYA8; 
    120 //     4'b1001: shi_reg <= led_GYA9;
    121 //     default: shi_reg <= led_GYA0; 
    122 //endcase
    123 //
    124 //case(bai)
    125 //     4'b0000: bai_reg <= led_GYA0;
    126 //     4'b0001: bai_reg <= led_GYA1;
    127 //     4'b0010: bai_reg <= led_GYA2;
    128 //     4'b0011: bai_reg <= led_GYA3;
    129 //     4'b0100: bai_reg <= led_GYA4;
    130 //     4'b0101: bai_reg <= led_GYA5;
    131 //     4'b0110: bai_reg <= led_GYA6;
    132 //     4'b0111: bai_reg <= led_GYA7;
    133 //     4'b1000: bai_reg <= led_GYA8; 
    134 //     4'b1001: bai_reg <= led_GYA9;
    135 //     default: bai_reg <= led_GYA0;
    136 //endcase
    137 //      
    138 //case(qian)
    139 //     4'b0000: qian_reg <= led_GYA0;
    140 //     4'b0001: qian_reg <= led_GYA1;
    141 //     4'b0010: qian_reg <= led_GYA2;
    142 //     4'b0011: qian_reg <= led_GYA3;
    143 //     4'b0100: qian_reg <= led_GYA4;
    144 //     4'b0101: qian_reg <= led_GYA5;
    145 //     4'b0110: qian_reg <= led_GYA6;
    146 //     4'b0111: qian_reg <= led_GYA7;
    147 //     4'b1000: qian_reg <= led_GYA8; 
    148 //     4'b1001: qian_reg <= led_GYA9;
    149 //     default: qian_reg <= led_GYA0;
    150 //endcase
    151 //      
    152 //case(wan)
    153 //     4'b0000: wan_reg <= led_GYA0;
    154 //     4'b0001: wan_reg <= led_GYA1;
    155 //     4'b0010: wan_reg <= led_GYA2;
    156 //     4'b0011: wan_reg <= led_GYA3;
    157 //     4'b0100: wan_reg <= led_GYA4;
    158 //     4'b0101: wan_reg <= led_GYA5;
    159 //     4'b0110: wan_reg <= led_GYA6;
    160 //     4'b0111: wan_reg <= led_GYA7;
    161 //     4'b1000: wan_reg <= led_GYA8; 
    162 //     4'b1001: wan_reg <= led_GYA9;
    163 //     default: wan_reg <= led_GYA0;
    164 //endcase
    165 //      
    166 //case(swan)
    167 //     4'b0000: swan_reg <= led_GYA0;
    168 //     4'b0001: swan_reg <= led_GYA1;
    169 //     4'b0010: swan_reg <= led_GYA2;
    170 //     4'b0011: swan_reg <= led_GYA3;
    171 //     4'b0100: swan_reg <= led_GYA4;
    172 //     4'b0101: swan_reg <= led_GYA5;
    173 //     4'b0110: swan_reg <= led_GYA6;
    174 //     4'b0111: swan_reg <= led_GYA7;
    175 //     4'b1000: swan_reg <= led_GYA8; 
    176 //     4'b1001: swan_reg <= led_GYA9;
    177 //     default: swan_reg <= led_GYA0;
    178 //endcase
    179 BIANMA(ge, ge_reg);
    180 BIANMA(shi, shi_reg);
    181 BIANMA(bai, bai_reg);
    182 BIANMA(qian, qian_reg);
    183 BIANMA(wan, wan_reg);
    184 BIANMA(swan, swan_reg);
    185 
    186 end
    187         
    188 /****************分频1MS*****************/        
    189 always@(posedge clk or negedge rst_n) begin
    190 if(!rst_n) begin //同步复位
    191            clk1  <= 1'b0;
    192            count <= 1'b0;
    193            end
    194 else if(count == 32'd24999)begin //高低电平转换 25000*20=500000ns=0.5ms
    195                            clk1 <= ~clk1;
    196                            count <= 1'b0;
    197                            end
    198 else begin
    199      count <= count + 1'b1; //计数
    200      end
    201  end
    202 
    203 /************数码管位数循环****************/    
    204 always@(posedge clk1 or negedge rst_n) begin
    205 
    206 if(!rst_n) begin //同步复位
    207             i <= 4'b0000;
    208             end
    209 else if(i == 4'b0101) begin 
    210                       i <= 4'b0000;
    211                       end
    212 else begin
    213      i <= i + 1'b1;
    214      end
    215 end
    216 
    217 /************数码管显示****************/
    218 always@(posedge clk1 or negedge rst_n) begin  
    219         case(i)
    220             4'b0000: begin sm_seg <= ge_reg;    sm_bit <= 6'b01_1111;  end
    221             4'b0001: begin sm_seg <= shi_reg;   sm_bit <= 6'b10_1111;  end
    222             4'b0010: begin sm_seg <= bai_reg;   sm_bit <= 6'b11_0111;  end
    223             4'b0011: begin sm_seg <= qian_reg;  sm_bit <= 6'b11_1011;  end
    224             4'b0100: begin sm_seg <= wan_reg;   sm_bit <= 6'b11_1101;  end
    225             4'b0101: begin sm_seg <= swan_reg;  sm_bit <= 6'b11_1110;  end
    226             default: begin sm_seg <= led_GYA0;  sm_bit <= 6'b11_1111;  end 
    227         endcase
    228    end         
    229 
    230 task BIANMA;
    231 input[3:0] wei;//哪个位
    232 output[7:0] wei_reg; //这个位上此时的数据
    233 reg [7:0] wei_reg;
    234 begin
    235 case(wei)
    236       4'b0000: wei_reg <= led_GYA0;
    237       4'b0001: wei_reg <= led_GYA1;
    238       4'b0010: wei_reg <= led_GYA2;
    239       4'b0011: wei_reg <= led_GYA3;
    240       4'b0100: wei_reg <= led_GYA4;
    241       4'b0101: wei_reg <= led_GYA5;
    242       4'b0110: wei_reg <= led_GYA6;
    243       4'b0111: wei_reg <= led_GYA7;
    244       4'b1000: wei_reg <= led_GYA8; 
    245       4'b1001: wei_reg <= led_GYA9;
    246       default: wei_reg <= led_GYA0;
    247 endcase
    248 end
    249 endtask
    250     
    251 endmodule
  • 相关阅读:
    github pages 正确访问方式
    jetty 热部署
    mysql 距离函数
    通过微信公众号ID生成公众号的二维码
    SQL Server 数据库备份失败解决方法
    js 替换部分内容为星号
    mysql 允许远程登录
    nginx 跨域配置
    两台阿里云服务器之间数据迁移
    新装修入住常识有什么
  • 原文地址:https://www.cnblogs.com/chasing/p/4045018.html
Copyright © 2011-2022 走看看