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[:] sm_seg;//段选
  12. output[:] sm_bit;//位选
  13.  
  14. reg [:] sm_seg;
  15. reg [:] sm_bit;
  16. reg [:] count;
  17. reg [:] count2;
  18. reg [:] i;//数码管位数
  19. reg clk1, clk2;
  20. reg [:]ge,shi,bai,qian,wan,swan;
  21. reg [:] ge_reg,shi_reg,bai_reg,qian_reg,wan_reg,swan_reg;
  22.  
  23. parameter//共阳极
  24. led_GYA0 = 'hc0, //''
  25. led_GYA1 = 'hf9, //''
  26. led_GYA2 = 'ha4, //''
  27. led_GYA3 = 'hb0, //''
  28. led_GYA4 = 'h99, //''
  29. led_GYA5 = 'h92, //''
  30. led_GYA6 = 'h82, //''
  31. led_GYA7 = 'hf8, //''
  32. led_GYA8 = 'h80, //''
  33. led_GYA9 = 'h90; //''
  34.  
  35. /****************分频1S*****************/
  36. always@(posedge clk or negedge rst_n) begin
  37. if(!rst_n) begin //同步复位
  38. clk2 <= 'b0;
  39. count2 <= 'b0;
  40. end
  41. else if(count2 == 'd24999999) begin //高低电平转换 5*10^7*20ns=10^9ns=1s
  42. clk2 <= ~clk2;
  43. count2 <= 'b0;
  44. end
  45. else begin
  46. count2 <= count2 + 'b1; //计数
  47. end
  48. end
  49.  
  50. /******************计数*********************/
  51. always@(posedge clk2 or negedge rst_n) begin//个位处理
  52. if(!rst_n) begin
  53. ge <= 'b0000;
  54. shi <= 'b0000;
  55. bai <= 'b0000;
  56. qian <= 'b0000;
  57. wan <= 'b0000;
  58. swan <= 'b0000;
  59. end
  60. else if(ge == 'b1010) begin //个位等于10
  61. ge = 'b0000;
  62. shi = shi + 'b1;
  63. if(shi == 'b1010) begin//十位等于10
  64. shi = 'b0000;
  65. bai = bai + 'b1;
  66. if(bai == 'b1010) begin//百位等于10
  67. bai = 'b0000;
  68. qian = qian + 'b1;
  69. if(qian == 'b1010) begin//千位等于10
  70. qian = 'b0000;
  71. wan = wan + 'b1;
  72. if(wan == 'b1010) begin//万位等于10
  73. wan = 'b0000;
  74. swan = swan + 'b1;
  75. if(swan == 'b1010) begin//十万位等于10
  76. ge <= 'b0000;
  77. shi <= 'b0000;
  78. bai <= 'b0000;
  79. qian <= 'b0000;
  80. wan <= 'b0000;
  81. swan <= 'b0000;
  82. end
  83. end
  84. end
  85. end
  86. end
  87. end
  88. else begin
  89. ge <= ge + '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 <= 'b0;
  192. count <= 'b0;
  193. end
  194. else if(count == 'd24999)begin //高低电平转换 25000*20=500000ns=0.5ms
  195. clk1 <= ~clk1;
  196. count <= 'b0;
  197. end
  198. else begin
  199. count <= count + 'b1; //计数
  200. end
  201. end
  202.  
  203. /************数码管位数循环****************/
  204. always@(posedge clk1 or negedge rst_n) begin
  205.  
  206. if(!rst_n) begin //同步复位
  207. i <= 'b0000;
  208. end
  209. else if(i == 'b0101) begin
  210. i <= 'b0000;
  211. end
  212. 212 else begin
  213. i <= i + 'b1;
  214. end
  215. end
  216.  
  217. /************数码管显示****************/
  218. always@(posedge clk1 or negedge rst_n) begin
  219. case(i)
  220. 'b0000: begin sm_seg <= ge_reg; sm_bit <= 6'b01_1111; end
  221. 'b0001: begin sm_seg <= shi_reg; sm_bit <= 6'b10_1111; end
  222. 'b0010: begin sm_seg <= bai_reg; sm_bit <= 6'b11_0111; end
  223. 'b0011: begin sm_seg <= qian_reg; sm_bit <= 6'b11_1011; end
  224. 'b0100: begin sm_seg <= wan_reg; sm_bit <= 6'b11_1101; end
  225. 'b0101: begin sm_seg <= swan_reg; sm_bit <= 6'b11_1110; end
  226. default: begin sm_seg <= led_GYA0; sm_bit <= 'b11_1111; end
  227. endcase
  228. end
  229.  
  230. task BIANMA;
  231. input[:] wei;//哪个位
  232. output[:] wei_reg; //这个位上此时的数据
  233. reg [:] wei_reg;
  234. begin
  235. case(wei)
  236. 'b0000: wei_reg <= led_GYA0;
  237. 'b0001: wei_reg <= led_GYA1;
  238. 'b0010: wei_reg <= led_GYA2;
  239. 'b0011: wei_reg <= led_GYA3;
  240. 'b0100: wei_reg <= led_GYA4;
  241. 'b0101: wei_reg <= led_GYA5;
  242. 'b0110: wei_reg <= led_GYA6;
  243. 'b0111: wei_reg <= led_GYA7;
  244. 'b1000: wei_reg <= led_GYA8;
  245. 'b1001: wei_reg <= led_GYA9;
  246. default: wei_reg <= led_GYA0;
  247. endcase
  248. end
  249. endtask
  250.  
  251. endmodule

FPGA自计数六位共阳极数码管动态显示2(调用task的方法)的更多相关文章

  1. FPGA六位共阳极数码管动态显示

    `timescale 1ns/1ps module adc_dis( clk , rst_n , sm_seg , sm_bit ); input clk;//50HZ input rst_n; :] ...

  2. 共阳极RGB LED二极管

    1)RGB LED二极管有四个引脚,它把3个普通led被封装在其内部,这三个led颜色分别为红.绿.蓝三种颜色,通过控制各个LED的亮度,你可以混合出几乎任何你想要的颜色,如下图: 2)RGB LED ...

  3. 数码管显示“0~F”的共阳共阴数码管编码表

    嵌入式设备中数码管显示“0~F”的方式是:定义了一个数组,里面含有16个元素,分别代表0~F,这样可以方便以后的调用.共阳极数码管编码表:unsigned char table[]={0xc0,0xf ...

  4. [51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY

    目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动( ...

  5. 80C51 数码管动态显示0~7

    所使用的开发板 普中科技HC6800-ES V2.0 PC:win7 64位 编译软件: keil uversion2 烧写工具: 普中科技开发的PZ-ISP V1.82 烧写方式:热烧写 #incl ...

  6. 数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)

    一个数码管有九个引脚,控制八段二极管的亮灭,用以显示需要的数字. 当有N个数码管时,一个一个控制的话需要N x 9 个引脚,消耗资源较多. 因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态显示 ...

  7. 计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task

    E. A Simple Task Problem's Link: http://codeforces.com/problemset/problem/558/E Mean: 给定一个字符串,有q次操作, ...

  8. 【FPGA】always (*) 后代码全部显示注释字体的颜色之解决方法

    2015年08月26日 09:44:05 风雨也无晴 阅读数:1289    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/scottly1/art ...

  9. 数码管动态显示——74HC04

    1.电路设计: p0实现段选,p2实现位选,74hc04是反相器,有反向和放大的双重作用. 2.程序设计: #include<reg52.h> code unsigned char sev ...

随机推荐

  1. F. Count Prime Pairs

    单点时限: 2.0 sec 内存限制: 512 MB 对于数组a,如果i≠j并且ai+aj是一个质数,那么我们就称(i,j)为质数对,计算数组中质数对的个数. 输入格式 第一行输入一个n,表示数组的长 ...

  2. python做个谷歌内核浏览器

    源码: import sys,os os.chdir(os.path.dirname(os.path.abspath(__file__))) from PyQt5.QtGui import * fro ...

  3. radio取值

    假设代码如下: 1) <input type="radio"   name="radio"   id="radio1"  checke ...

  4. redis: Jedis API(十四)

    1.Key操作 package com.kuang; import redis.clients.jedis.Jedis; import java.util.Set; public class Test ...

  5. Neo4J 查找两节点之间的路径

    # 两节点之间的所有路径MATCH p=(a)-[*]->(b)RETURN p # a->b 直接连接MATCH p=(a)-[]->(b)RETURN p # a-...> ...

  6. sk-learn实现L2岭回归,对线性回归正则化

    岭回归算法: from sklearn.datasets import load_boston from sklearn.externals import joblib from sklearn.li ...

  7. EVE模拟器的配置

    (注:本文整理自达叔的EVE模拟器使用说明https://blog.51cto.com/dashu666/1971728) 基础部署篇 所需要准备的东西: 1.VMWare (虚拟化软件,用来承载模拟 ...

  8. 解决 docker.io 上拉取 images Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout

    处理方式 使用如下命令获取 registry-1.docker.io 可用的 ip dig @114.114.114.114 registry-1.docker.io 看到如下输出结果 ; <& ...

  9. 1309:【例1.6】回文数(Noip1999)

    传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1309 [题目描述] 若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文 ...

  10. F查询,Q查询,事物,only与defer

    F查询 之前的单表查询多表查询筛选条件都是一个固定的值,那么如何用字段来筛选呢? 比如 :           查询卖出数大于库存数的商品 这个时候我们就可以用到django里面的F查询了 查询示例表 ...