久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 數碼管的動態刷新Verilog源程序 [打印本頁]

作者: strelizia    時間: 2019-5-28 17:15
標題: 數碼管的動態刷新Verilog源程序
六位八段數碼管,最后兩位自加首先循環,同時在到特定的數字調用蜂鳴器“嗶~”


源程序如下:
  1. module Project_Segled2
  2. (        
  3.         //輸入端口
  4.         CLK_50M,CLK_1S,RST_N,
  5.         //輸出端口
  6.         SEG_DATA,SEG_EN,FM
  7. );
  8.         
  9. //---------------------------------------------------------------------------
  10. //--        外部端口聲明
  11. //---------------------------------------------------------------------------
  12. input                                         CLK_50M;                                //時鐘的端口,開發板用的50M晶振
  13. input                CLK_1S;
  14. input                                                RST_N;                                //復位的端口,低電平復位
  15. output reg         [ 5:0]         SEG_EN;                                //數碼管使能端口
  16. output reg         [ 7:0]         SEG_DATA;                        //數碼管數據端口(查看管腳分配文檔或者原理圖)
  17. output reg          FM;               //控制蜂鳴器

  18. //---------------------------------------------------------------------------
  19. //--        內部端口聲明
  20. //---------------------------------------------------------------------------
  21. reg                        [15:0]        time_cnt;                        //用來控制數碼管閃爍頻率的定時計數器
  22. reg                        [15:0]        time_cnt_n;                        //time_cnt的下一個狀態
  23. reg                        [ 2:0]        led_cnt;                                //用來控制數碼管亮滅及顯示數據的顯示計數器
  24. reg                        [ 2:0]        led_cnt_n;                        //led_cnt的下一個狀態
  25. reg                                           [3:0]         gewei;                                       // 后兩位的個位
  26. reg                                           [3:0]         shiwei;                                      //后兩位的十位
  27. reg                                           [7:0]         GE_DATA;                                //個位數碼管數據
  28. reg                                           [7:0]         SHI_DATA;                                //十位數碼管數據
  29. reg                                           [3:0]         gewei_n;                                       // 后兩位的個位  
  30. reg                                        beep_reg;                                //用來控制蜂鳴器發聲的寄存器
  31. reg                                        beep_reg_n;                                //beep_reg的下一個狀態

  32. //設置定時器的時間為1ms,計算方法為  (1*10^3)us / (1/50)us  50MHz為開發板晶振
  33. parameter SET_TIME_1MS = 16'd50_000;
  34. parameter freq = 16'd47774;
  35. initial
  36. begin
  37. gewei = 4'h5;                                                                          //初始化個位十位的值
  38. shiwei=4'h0;
  39. gewei_n=4'h5;
  40. end               

  41. //---------------------------------------------------------------------------
  42. //--        邏輯功能實現        
  43. //---------------------------------------------------------------------------
  44. //時序電路,用來給time_cnt寄存器賦值
  45. always @ (posedge CLK_50M or negedge RST_N)  
  46. begin
  47.         if(!RST_N)                                                                        //判斷復位
  48.                 time_cnt <= 16'h0;                                        //初始化time_cnt值
  49.         else
  50.                 time_cnt <= time_cnt_n;                                //用來給time_cnt賦值
  51. end


  52. always @ (posedge CLK_50M)  
  53. begin
  54.         if(time_cnt == SET_TIME_1MS)                        //判斷1ms時間
  55.                 time_cnt_n = 16'h0;                                        //如果到達1ms,定時計數器將會被清零
  56.         else
  57.                 time_cnt_n = time_cnt + 27'h1;        //如果未到1ms,定時計數器將會繼續累加
  58. end





  59. //時序電路,用來給led_cnt寄存器賦值
  60. always @ (posedge CLK_1S or negedge RST_N)  
  61. begin
  62.         if(!RST_N )                                                                        //判斷復位
  63. begin        
  64.                     gewei = 4'h5;                                                                          //初始化個位十位的值
  65.                 shiwei=4'h0;
  66. end        
  67.         else if(gewei==4'b1001)
  68. begin                 
  69.                 gewei=4'h0;
  70.                 shiwei=shiwei+1'h1;                                                           //如果個位到十就歸0且讓十位加一
  71. end
  72.    else if(shiwei==4'b0100)
  73. begin               
  74.                  shiwei=4'h0;                                                                        //判斷十位的值如果到4就歸0
  75. end
  76.    else
  77.        gewei=gewei_n;        
  78. end
  79. //組合電路,判斷時間,實現控制顯示計數器累加
  80. always @ (negedge CLK_1S)  
  81. begin

  82.                 gewei_n = gewei + 1'h1;                //如果到達1s,計數器進行累加
  83.         
  84.               
  85. end


  86. //時序電路,用來給gewei寄存器賦值
  87. always @ (posedge CLK_50M or negedge RST_N)  
  88. begin
  89.         if(!RST_N)                                                                        //判斷復位
  90.                 led_cnt <= 3'h0;                                                //初始化led_cnt值
  91.         else
  92.                 led_cnt <= led_cnt_n;                                //用來給led_cnt賦值
  93. end

  94. //組合電路,判斷時間,實現控制顯示計數器累加
  95. always @ (posedge CLK_50M)  
  96. begin
  97.         if(time_cnt == SET_TIME_1MS)                        //判斷1Ms時間        
  98.                 led_cnt_n = led_cnt + 1'h1;                //如果到達1ms,計數器進行累加
  99.         else
  100.                 led_cnt_n = led_cnt;                                        //如果未到1ms,計數器保持不變
  101. end
  102. //實現gewei數據到數碼管碼數的一致
  103. always @ (posedge CLK_50M)
  104. begin
  105.                case(gewei)
  106.                            4'b0000:GE_DATA= 8'b00111111;        //0
  107.                            4'b0001:GE_DATA= 8'b00000110;        //1
  108.                            4'b0010:GE_DATA= 8'b01011011;        //2
  109.                            4'b0011:GE_DATA= 8'b01001111;        //3
  110.                            4'b0100:GE_DATA= 8'b01100110;        //4
  111.                            4'b0101:GE_DATA= 8'b01101101;        //5
  112.                            4'b0110:GE_DATA= 8'b01111101;        //6
  113.                             4'b0111:GE_DATA= 8'b00000111;       //7
  114.                            4'b1000:GE_DATA= 8'b01111111;        //8
  115.                             4'b1001:GE_DATA= 8'b01101111;       //9
  116.                             default:GE_DATA=8'b10111111;
  117.                endcase
  118. end

  119. //實現shiwei數據到數碼管數的一致
  120. always @ (posedge CLK_50M)
  121. begin
  122.                case(shiwei)
  123.                             4'b0000:SHI_DATA= 8'b00111111;        //0
  124.                            4'b0001:SHI_DATA= 8'b00000110;        //1
  125.                            4'b0010:SHI_DATA= 8'b01011011;        //2
  126.                            4'b0011:SHI_DATA= 8'b01001111;        //3
  127.                            4'b0100:SHI_DATA= 8'b01100110;        //4
  128.                            default:SHI_DATA=8'b10111111;
  129.                endcase
  130. end

  131. //組合電路,實現數碼管的數字顯示
  132. always @ (posedge CLK_50M)
  133. begin
  134.         case (led_cnt)  
  135.                 3'b000 : SEG_DATA = 8'b00000111;        //當計數器為0時,數碼管將會顯示 "7"
  136.                 3'b001 : SEG_DATA = 8'b00000110;        //當計數器為1時,數碼管將會顯示 "1"
  137.                 3'b010 : SEG_DATA = 8'b01100110;        //當計數器為2時,數碼管將會顯示 "4"
  138.                 3'b011 : SEG_DATA = 8'b00111111;        //當計數器為3時,數碼管將會顯示 "0"
  139.                 3'b100 : SEG_DATA = SHI_DATA;                       //當計數器為4時,數碼管將會顯示 "十位"
  140.                 3'b101 : SEG_DATA = GE_DATA;                       //當計數器為5時,數碼管將會顯示 "個位"        
  141.                 default: SEG_DATA = 8'b10111111;        
  142.         endcase         
  143. end






  144. always @ (posedge CLK_50M)
  145. begin
  146.         case (led_cnt)  
  147.                 3'b000 : SEG_EN = 6'b111110;                //當計數器為0時,數碼管SEG1顯示
  148.                 3'b001 : SEG_EN = 6'b111101;                //當計數器為1時,數碼管SEG2顯示
  149.                 3'b010 : SEG_EN = 6'b111011;                 //當計數器為2時,數碼管SEG3顯示
  150.                 3'b011 : SEG_EN = 6'b110111;          //當計數器為3時,數碼管SEG4顯示
  151.                 3'b100 : SEG_EN = 6'b101111;                //當計數器為4時,數碼管SEG5顯示
  152.                 3'b101 : SEG_EN = 6'b011111;          //當計數器為5時,數碼管SEG6顯示               
  153.                 default: SEG_EN = 6'b111111;                        
  154.         endcase         
  155. end









  156. //控制蜂鳴器
  157. always @ (posedge CLK_50M or negedge RST_N)
  158. begin
  159.         if(!RST_N)                                                                        //判斷復位
  160.                 beep_reg <= 1'b0;                                                //初始化beep_reg值
  161.         else
  162.                 beep_reg <= beep_reg_n;                                //用來給beep_reg賦值
  163. end

  164. //組合電路,判斷頻率,使蜂鳴器發聲
  165. always @ (posedge CLK_50M)
  166. begin
  167.         if(time_cnt == freq)                                                //判斷分頻值
  168.                 beep_reg_n = ~beep_reg;                                //改變蜂鳴器的狀態
  169.         else
  170.                 beep_reg_n = beep_reg;                                //蜂鳴器的狀態保持不變
  171. end
  172. always @  (posedge CLK_50M)
  173. begin
  174.   if(gewei==4'h5 && shiwei==4'h0)
  175.   FM = beep_reg;
  176. end

  177. endmodule
復制代碼

所有資料51hei提供下載:
final.zip (3.37 MB, 下載次數: 10)







歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日本一区二区不卡 | 国产福利在线视频 | 日本黄色短片 | 超碰在线人人干 | 免费亚洲视频 | 久久色视频 | 二区三区视频 | 成av人电影在线 | 国产在线精品一区二区三区 | 欧美精品综合 | 精品国产乱码久久久久久影片 | 欧美一级二级视频 | 国产免费xxx | 免费av在线| 在线免费观看黄视频 | 国产成人在线一区二区 | 亚洲永久| 日韩国产专区 | 99re热精品视频 | 在线一区 | 亚洲一区久久久 | 天天看天天摸天天操 | av免费网站在线观看 | 成人免费一区二区三区牛牛 | 天堂色网 | 在线中文字幕亚洲 | 99精品国产一区二区三区 | 国产午夜精品视频 | 超碰人人人 | 欧美三级免费观看 | 欧美亚洲综合久久 | 国产亚洲精品区 | 在线观看视频福利 | 欧美精品一区二区三区四区 | se婷婷| 亚洲欧美在线观看 | 国产一区二区影院 | 色网在线观看 | 国产成人精品免高潮在线观看 | 国产精品亚洲一区二区三区在线观看 | 国产欧美一区二区三区在线看蜜臀 |