|
勇敢的芯伴你玩轉Altera FPGA連載55:蜂鳴器開關實例 特權同學,版權所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD
我們已經在上一章的例程中,知道了蜂鳴器工作的基本原理,即FPGA輸出高電平就發出響聲,FPGA輸出低電平就停止發聲。在本節中,我們增加一個撥碼開關做控制,讓撥碼開關的ON或OFF狀態相應的去控制蜂鳴器的發聲與不發聲。 撥碼開關SW3的電路如圖8.1所示。撥碼開關與FPGA相連接的SW0信號的電平值取決于撥碼開關當前的位置,若它連接了2-3腳,那么SW0就是高電平狀態,若它連接了3-4腳,就是低電平狀態。
圖8.1 撥碼開關電路 如圖8.2所示,每一個撥碼開關的右側都有“ON”和“OFF”的絲印標示。“ON”對應的是3-4腳連接狀態,“OFF”對應的是2-3腳連接狀態。
圖8.2 撥碼開關實物照片 綜上所述,也就是當撥碼開關處于“ON”狀態時,SW0輸出低電平;當撥碼開關處于“OFF”狀態時,SW0輸出高電平。 而我們要實現的功能是,當撥碼開關處于“ON”狀態時,蜂鳴器發聲;當撥碼開關處于“OFF”狀態時,蜂鳴器不發聲。 本實例的工程代碼如下,只有cy4.v一個Verilog源文件。 module cy4( input ext_clk_25m, //外部輸入25MHz時鐘信號 input ext_rst_n, //外部輸入復位信號,低電平有效 input[0:0] switch, //撥碼開關SW3輸入,ON -- 低電平;OFF-- 高電平 output reg beep //蜂鳴器控制信號,1--響,0--不響 ); //------------------------------------- //蜂鳴器發聲控制 always @ (posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) beep <= 1'b0; else if(!switch[0]) beep <=1'b1; //蜂鳴器響 else beep <= 1'b0; //蜂鳴器不響 endmodule 這段代碼中,ext_rst_n是復位信號,當它為低電平的時候,也就是復位按鍵被按下的時候,beep信號為低電平,即蜂鳴器不發聲。而當ext_rst_n為高電平的時候,也就是系統正常運行時,蜂鳴器控制信號beep的高低電平狀態則由撥碼開關switch[0]決定,即由撥碼開關SW3的狀態決定。當SW3處于ON狀態(低電平)時,蜂鳴器發聲;當SW3處于OFF狀態(高電平)時,蜂鳴器不發聲。 |