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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3539|回復: 0
打印 上一主題 下一主題
收起左側

vhdl測量頻率并用數碼管顯示程序

[復制鏈接]
跳轉到指定樓層
樓主

資料下載:
adc.rar (3.92 MB, 下載次數: 18)

  1. module adc (
  2.             clk,rst_n,clk_beep,
  3.             eoc,
  4.             start,oe,ale,adda,
  5.             data,data_r,led,
  6.             key_smg_n,
  7.             smg1,smg2,smg3,smg5,smg6,
  8.             led1,led2,led3,beep
  9.             );
  10. input key_smg_n;
  11. output reg beep;  // 蜂鳴器         
  12. input clk_beep;  //蜂鳴器時鐘         
  13. output reg led2; //整形后得到的脈沖            
  14. output reg led1;//量程進位需要的小數點,用燈來控制
  15. output reg led3; //超量程警告           
  16. output reg[3:0]smg1; //smg1,smg2,smg3 數碼管顯示測得頻率  具有自動轉換量程的功能
  17. output reg[3:0]smg2;
  18. output reg[3:0]smg3;
  19. output reg[3:0]smg5; //smg5 smg6  數碼管顯示  占空比
  20. output reg[3:0]smg6;            
  21. output reg start,oe,ale,adda;
  22. input eoc,clk,rst_n;
  23. input [7:0] data;
  24. output reg led;

  25. //===========================================================================================================
  26. //ADC初始化,用來進行模數轉化
  27. //===========================================================================================================
  28. output reg [7:0] data_r;
  29. reg[4:0] CS,NS;
  30. parameter IDLE = 5'b00001,START_H = 5'b00010,START_L = 5'b00100,CHECK_END = 5'b01000,GET_DATA = 5'b10000;
  31. always @ (posedge clk)
  32. case(CS)
  33. IDLE: NS = START_H;
  34. START_H: NS=START_L;
  35. START_L: NS=CHECK_END;
  36. CHECK_END: begin if(eoc==1'b1) NS=GET_DATA;
  37.                          else NS = CHECK_END;
  38.                    end
  39. GET_DATA:NS=IDLE;
  40. default : NS = IDLE;
  41. endcase

  42. always @ (posedge clk)
  43. if(!rst_n) CS<=IDLE;
  44. else CS<=NS;

  45. always @(posedge clk)
  46. case(NS)
  47. IDLE:begin oe<=0; start <=0; ale <= 0; adda<=1; end
  48. START_H: begin oe<=0; start<=1;ale<=1;adda<=1; end
  49. START_L: begin oe<=0; start<=0;ale<=1; end
  50. CHECK_END: begin oe <= 0; start<=0; ale<=0;end
  51. GET_DATA: begin oe<=1;data_r<=data;start<=0;ale<=0;end

  52. endcase
  53. //****************************************************************************************************
  54. //****************************************************************************************************


  55. //==========================================
  56. //整形模塊,無論是方波還是三角波或者正選波,
  57. //都能變為高低脈沖
  58. //=======================================
  59. always @ (posedge clk)
  60. if(!rst_n) led <= 1'b0;
  61. else if(data_r<=8'd127) led <= 1'b0;
  62.           else led<=1'b1;
  63. //********************************************************************************




  64. /*===================================================================================================
  65. 測量頻率模塊
  66. 利用往后打一拍的原理,來控制信號
  67. ====================================================================================================*/
  68. parameter CLK_1HZ = 25'd3000000;
  69. reg[24:0] delay_cnt1;
  70. always@(posedge clk or negedge rst_n) begin
  71. if(!rst_n) delay_cnt1 <= 1'b0;
  72. else if(delay_cnt1<=CLK_1HZ)
  73.          delay_cnt1<=delay_cnt1+1'b1;
  74.          else
  75.          delay_cnt1<= 1'b0;
  76. end

  77. wire delay_1ss = (delay_cnt1==CLK_1HZ)?1'b1:1'b0;     //  利用該信號清零
  78. wire delay_1s  = (delay_cnt1==CLK_1HZ-1'b1)?1'b1:1'b0;//  利用該信號存儲信號

  79. reg [24:0] cnt_n;
  80. always@(posedge clk or negedge rst_n) begin
  81. if(!rst_n) cnt_n <= 1'b0;
  82. else if(delay_1ss == 1'b0)begin  
  83.          if(count_an == 1'b1) //檢測是否有下降沿
  84.                  cnt_n <= cnt_n+1'b1;
  85.                  
  86.          else cnt_n<=cnt_n;
  87.          end
  88.          else cnt_n <= 1'b0;
  89. end



  90. always@(posedge clk or negedge rst_n) begin
  91. if(!rst_n) begin smg1<=1'b0;smg2<=1'b0;smg3<=1'b0;smg5<=1'b0;smg6<=1'b0;led1<=1'b0;led2<=1'b0;led3<=1'b0; end
  92. else if(key_smg_n == 1)
  93.      
  94.       begin         smg5<=1'b0;
  95.                                         if(delay_1s == 1'b1) begin
  96.                                         if(cnt_n < 14'd999) begin  //低量程 0~999hz
  97.                                         led1<=1'b0;
  98.                                         led3<=1'b0;
  99.                                         smg6 <= cnt_n  % 4'd10;
  100.                                         smg1 <= cnt_n / 4'd10 %4'd10;
  101.                                         smg2 <= cnt_n /7'd100 %4'd10;
  102.                                         smg3 <= cnt_n /10'd1000 %4'd10;
  103.                                         end
  104.                                         else if(cnt_n<=15'd3000)begin // 高量程 1000~3000hz
  105.                                         led1<=1'b1;
  106.                                         led3<=1'b0;
  107.                                         smg1 <= cnt_n / 4'd10 % 4'd10;
  108.                                         smg2 <= cnt_n / 7'd100 %4'd10;
  109.                                         smg3 <= cnt_n /10'd1000 %4'd10;
  110.                                         smg6 <= cnt_n  % 4'd10;
  111.                                         end
  112.                                         else begin   //    超量程 蜂鳴器響,燈亮
  113.                                         beep <= clk_beep;
  114.                                         led3<=1'b1;
  115.                                         end
  116.                         end
  117.         end
  118.         else begin
  119.             smg1<=1'b0;smg2<=1'b0;smg3<=1'b0;
  120.             if(delay_1s) begin
  121.                
  122.                 smg5 <= (cnt_up *7'd100 / cnt_down) % 4'd10 ;
  123.                 smg6 <= (cnt_up *7'd100 / cnt_down) / 4'd10;
  124.             end
  125.             end
  126. end
  127. //**************************************************************************************************



  128. /*==================================================================================================
  129. 占空比測量信號
  130. 待測脈沖高電平的時候用一個計數器計數
  131. 低電平的時候用另一個計數器計數
  132. 高電平計數與總共的比值。
  133. ====================================================================================================*/
  134. reg [31:0] cnt_up;
  135. reg [31:0] cnt_down;
  136. always@(posedge clk or negedge rst_n) begin
  137. if(!rst_n) begin cnt_up<=1'b0; cnt_down<=1'b0; end
  138. else if(delay_1ss == 1'b0) begin
  139.          if(led == 1'b1)  begin cnt_up<=cnt_up+1'b1; cnt_down<=cnt_down+1'b1; end
  140.      else begin cnt_down <= cnt_down + 1'b1; cnt_up<=cnt_up; end
  141.          end
  142.          else begin  cnt_up <= 1'b0; cnt_down <= 1'b0;  end
  143. end

  144. /*
  145. always@(posedge clk or negedge rst_n) begin
  146. if(!rst_n)begin smg5<=1'b0;smg6<=1'b0; end
  147. else if(key_smg_n == 0) begin
  148.          if(delay_1s) begin
  149.                 smg5 <= (cnt_up *7'd100 /(cnt_up+cnt_down)) % 4'd10 ;
  150.                 smg6 <= (cnt_up *7'd100 /(cnt_up+cnt_down)) / 4'd10;
  151.         end
  152.         end
  153. end

  154. */

  155. //====================================================================
  156. //脈沖邊沿檢測模塊
  157. //每來一個下降沿就會檢測出來,利用這個
  158. //原理便能測量脈沖的頻率   
  159. //===================================================================
  160. reg count_rst;  
  161. always @(posedge clk  or negedge rst_n)
  162.     if (!rst_n) count_rst <= 1'b1;
  163.     else count_rst <= led;

  164. reg count_rst_r;      

  165. always @ ( posedge clk  or negedge rst_n )
  166.     if (!rst_n) count_rst_r <= 1'b1;
  167.     else count_rst_r <= count_rst;
  168.    

  169. wire count_an = count_rst_r & (~count_rst);




  170. endmodule
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人免费视频 | 欧美三级成人理伦 | 九九久久久 | 国产小视频在线观看 | 久久久精品综合 | 亚洲视频在线观看免费 | 日韩在线小视频 | 日本污视频 | 免费在线观看av网址 | 久久久www成人免费精品 | 中文字幕一区二区三区不卡 | 中文字幕一区二区三区精彩视频 | 精品一区二区三区四区五区 | 亚洲日本欧美日韩高观看 | 国产综合在线视频 | 日韩中文字幕 | 亚洲精品乱码 | 免费高潮视频95在线观看网站 | 毛片网站在线观看视频 | 天天草夜夜骑 | 成人一区二区三区在线观看 | 亚洲国产aⅴ精品一区二区 免费观看av | 成人在线观看免费视频 | 日韩在线免费视频 | 欧美日韩不卡合集视频 | 粉嫩av在线 | 国产区免费视频 | 中文字幕亚洲在线 | 本道综合精品 | 狠狠操电影 | 99日韩| 日韩三 | 亚洲国产精品一区二区久久 | 久久精品日产第一区二区三区 | 国产久 | 在线观看中文字幕视频 | 久久精品视频播放 | 黄色精品 | 欧美日韩亚 | 亚洲精品中文字幕在线观看 | 九九九视频精品 |