【正文】
狀態(tài),如果仍有低電平行線,則確定有按鍵按下,然后產(chǎn)生一個有按鍵按下的信號。如圖24所示為消抖模塊符號圖。由于時鐘脈沖為1kHZ,故從有按鍵按下到輸入信號產(chǎn)生大概需要1ms。如圖25所示為按鍵消抖模塊波形仿真圖。如圖29所示為秒計數(shù)模塊符號圖。圖29 秒計數(shù)模塊符號圖如圖26所示波形仿真圖。圖26 秒計數(shù)模塊波形仿真圖如圖27所示為分計數(shù)模塊符號圖。圖27 分計數(shù)模塊符號圖如圖28所示為分計數(shù)模塊波形仿真圖。圖28 分計數(shù)模塊波形仿真圖圖29 時計數(shù)模塊符號圖如圖29所示為時計數(shù)模塊符號圖。圖210時計數(shù)模塊波形仿真圖時計數(shù)模塊波形仿真圖如圖210所示。圖211調(diào)時模塊符號圖如圖211所示為調(diào)時模塊符號圖。由此可知當key為低電平時可進行調(diào)時、調(diào)分。當key為低電平時,調(diào)時模塊輸出b的脈沖;當key為高電平時,輸出a的脈沖。圖213 鬧鐘模塊總體設計框圖如圖213所示為鬧鐘模塊總體設計框圖。定時控制模塊有復位鍵、調(diào)時調(diào)分切換鍵、累加鍵,來設定鬧鐘時間。輸入端口reset是定時模塊的復位信號,也是整個打鈴器的使能信號,低電平有效; k1是鬧鐘時間設定時、分切換按鍵,高電平時對時進行調(diào)節(jié),低電平時對分進行調(diào)節(jié);up_key是調(diào)整鬧鐘時間的累加按鍵,另一端接按鍵消抖模塊,每按一次計數(shù)加一;Q_tmpma、Q_tmpmb、Q_tmpha、Q_tmphb分別為鬧鐘時間的分低位、分高位、時低位時高位。當復位鍵為高電平、k1為低電平時,每按下一次up_key鬧鐘分低位就計一個數(shù),計到9時向高位進一,當計到59時重新從0開始計數(shù);當復位鍵為高電平、k1為高電平時,開始對時計數(shù),up_key每來一個脈沖時低位就計一個數(shù),計到9時變?yōu)?,高位進位,計到23時重新計數(shù),由波形仿真克制此模塊滿足設計要求。設計思路為:將鬧鐘設定的時間與及時模塊的時間分別比較,即時高位、時低位、分高位、分低位分別進行比較,若時間相等,則輸出高電平,輸出信號與1Hz時鐘信號相與,獲得的信號接蜂鳴器,可實現(xiàn)時隔一秒報警一次,報警時長為一秒。Clk0為比較模塊的時鐘,接200分頻器輸出的1Hz時鐘信號;QH_B[3..0]為時鐘的時高位,QH_A[3..0]為時鐘的時低位,QMB[3..0]為時鐘的分高位,QM_A[3..0]為時鐘的分低位;HARM_B[3..0]為鬧鐘時間的時高位,HARM_A[3..0]為鬧鐘時間的時低位,MARM_B[3..0]為鬧鐘時間的分高位,MARM_A[3..0]為鬧鐘時間的分低位;SPEAK為比較模塊的輸出,接報警時長設定模塊的輸入。給clk0一定時鐘,設定鬧鐘時間時高位為1,時低位為2,分高位、分低位都為0,即鬧鐘時間為十二點整,;首先設定時鐘模塊的時高位設定為1,時低位為1,分高位為5,分低位為9,即十一點五十九分,再設定為十二點整;由波形仿真圖可知,當時鐘時間由十一點五十九分變?yōu)槭c整時,speak輸出時鐘波形,可知比較模塊的設計滿足要求。模塊包括作息選擇和時間比較部分,其設計思路為:通過k3進行春夏作息時間選擇,將時鐘的時高位、時低位、分高位、分低位分別于打鈴時間數(shù)據(jù)進行比較,若相等,則Q_Y輸出高電平,否則輸出低電平。K3為切換春夏作息時間的按鍵,當K3為高電平時選擇春季作息時間,方為低電平時選擇夏季作息時間;Q_HB[3..0]接時鐘時間的時高位,Q_HA[3..0]接時鐘時間的時低位,Q_MB[3..0]接時鐘時間的分高位,Q_MA[3..0]接時鐘時間的時低位;Q_Y為打鈴模塊的輸出,接報警模塊的輸入??梢钥闯觯寒擪3為高電平時,選擇春季作息時間,當時鐘時間由八點二十九分跳變?yōu)榘它c三十分時,Q_Y由低電平變?yōu)楦唠娖?,此為春季作息時間上午的的八點三十分;當K3為低電平時,選擇夏季作息時間,當時鐘時間由八點二十九分跳變?yōu)榘它c三十分時,Q_Y由低電平變?yōu)楦唠娖剑藶橄募咀飨r間上午的八點三十分;當K3為高電平時,選擇春季作息時間,當時鐘時間由十三點二十九分跳變?yōu)槭c三十分時,Q_Y由低電平變?yōu)楦唠娖剑藶榇杭咀飨r間下午的十三點三十分;當K3為低電平時,選擇夏季作息時間,當時鐘時間由十三點五十九分跳變?yōu)槭狞c整時,Q_Y由低電平變?yōu)楦唠娖?,此為夏季作息時間下午的十四點整。報警模塊主要包括報警時長設定模塊和蜂鳴器發(fā)生模塊,實現(xiàn)學校作息時間報時和鬧鐘報警的功能。其中Reset為復位端,低電平有效;up_key為調(diào)節(jié)報警時間的按鍵,時長可從一秒調(diào)至十五秒,連接按鍵模塊;speaktime[3..0]為報警時長的輸出,連接蜂鳴器發(fā)生模塊的輸入端。復位按鍵reset設為高電平,給up_key一定脈沖時鐘,沒到達一次脈沖上升沿,speaktime就加一,當計到15時重新從0開始,實現(xiàn)了報警時長在1至15秒內(nèi)自由設定的要求。如圖224所示為蜂鳴器發(fā)聲模塊符號圖和RTL圖。 圖224 蜂鳴器發(fā)聲模塊符號圖如圖225所示為蜂鳴器發(fā)聲模塊波形仿真圖。由此可知,蜂鳴器發(fā)生模塊滿足設計要求,可實現(xiàn)115秒自由調(diào)節(jié)。如圖226所示為時間切換模塊設計框圖。圖226 時間切換模塊設計框圖 圖227 時間切換模塊符號圖如圖227所示為時間切換模塊符號圖。 設定時鐘時間為21點34分52秒,定時時間為12點整;當K2為高電平時,模塊輸出為時鐘時間21點34分52秒;當K2為低電平時,模塊輸出為定時時間十二點整。所謂動態(tài)顯示就是一位一位地輪流點亮各位顯示器(掃描),對于顯示器的每一位而言,每隔一段時間點亮一次。顯示器的亮度既與點亮時的導通電流有關,也與點亮時間和間隔時間的比例有關[10]。調(diào)整電流和時間參烽,可實現(xiàn)亮度較高較穩(wěn)定的顯示[11]。當發(fā)光二極管導通時,相應的一個點或一個筆畫發(fā)光。發(fā)光二極管的陽極連在一起的稱為共陽極數(shù)碼管,陰極連在一起的稱為共陰極數(shù)碼管,本設計使用共陰數(shù)碼管,如圖228所示為七段共陰數(shù)碼管結(jié)構(gòu)圖。動態(tài)掃描電路將計數(shù)器輸出的8421BCD碼轉(zhuǎn)換為數(shù)碼管需要的邏輯狀態(tài),并且輸出數(shù)碼管的片選信號和位選信號[12]。這樣做可以使每一個顯示塊顯示與自己相對應的數(shù)據(jù)。一般每一位的顯示時間為1~10ms。該模塊的輸入端口clk是頻率為5kHZ的掃描時鐘,需要掃描8個數(shù)碼管。其它輸入端口接計數(shù)模塊輸出的數(shù)據(jù);輸出端口segout[7..0]動態(tài)輸出掃描的數(shù)據(jù);端口selout[7..0]輸出數(shù)碼管的片選信號。給定一定時鐘脈沖,設定時鐘時間為21點01分25秒,隨著脈沖上升沿的到來,數(shù)碼管的片選信號逐一變?yōu)榈碗娖?,分別輸出時鐘時間或定時時間,以及報警時長,有波形仿真圖可知此模塊滿足設計要求。由于按鍵電路比較簡單,在此主要介紹按鍵各自完成的功能。其中2個撥碼開關分別用于調(diào)節(jié)報警時長以及鬧鐘定時時間的調(diào)節(jié);另外6個機械式開關分別用于復位,數(shù)碼管顯示切換,鬧鐘定時時、分切換,作息時間切換,時鐘時間時、分調(diào)節(jié)。為鬧鐘設定時間的顯示,通過時鐘、鬧鐘顯示切換按鍵來進行切換,當為低電平時顯示鬧鐘時間,可通過定時調(diào)時調(diào)分切換按鍵來選擇調(diào)整時或分,按下鬧鐘時間調(diào)節(jié)的撥碼開關進行鬧鐘時間設定,圖中數(shù)碼管顯示從左到右依次為:報警時長高位、低位,定時時間時高位、時低位,分高位、分地位,秒高位、秒低位,當前顯示鬧鐘設定時間為十二點十三分,報警時長為五秒,當時鐘時間為十二點十三分時,蜂鳴器報警,時長為五秒。 自動打鈴器的設計重點在于按鍵的控制和各個模塊代碼的編寫,雖然能把鍵盤接口和各個模塊的代碼編寫出來,并能正常顯示,但對于各個模塊的優(yōu)化設計還有一定的缺陷和不足。在本設計調(diào)試過程中遇到了一些難點問題,經(jīng)過努力加以解決:當程序下載到實驗箱上后,數(shù)碼管顯示全部為零,計數(shù)器不工作,經(jīng)分析得知程序中的總的清零信號保持有效狀態(tài),改動程序后計數(shù)器開始計數(shù)。在對學校打零時間設置及更改的問題上,一開始想通過ROM實現(xiàn),但思考之后還是采用了通過程序?qū)崿F(xiàn)的方法,因為ROM只能讀不能寫。 本設計是采用硬件描述語言和FPGA芯片相結(jié)合進行的學校打鈴器的研究,從中可以看出EDA技術的發(fā)展在一定程度上實現(xiàn)了硬件設計的軟件化,設計的過程相對簡單,容易修改。另外,在本設計的基礎上還可以進行一系列的創(chuàng)新,比如增加音樂報警的功能,取代稍有刺耳的蜂鳴聲,會使用戶在實際應用中多一份樂趣,還可以加入遙控功能、語音識別等等,相信隨著電子技術的發(fā)展,打鈴器的功能會更加多樣化,滿足人們的各種需要,為人們以后的工作和生活提供更多的方便。在此期間我也失落過,也曾一度熱情高漲。 通過這次課外學分設計,加強了我的動手、思考和解決問題的能力。我深知以后要走的路將會更長更曲折,不過不要緊,我有信心和毅力走下去,摔倒了再爬起來,沒有什么,因為我們年輕,我們有激情和熱血。對我而言,知識上的收獲重要,精神上的豐收更加可喜。這次經(jīng)歷讓我受益匪淺。use 。 co:out std_logic)。Architecture art of fenpin25k issignal cqi : integer range 1 to 25000。139。039。039。event and clk=39。then if cqi=25000 then cqi=1。 end if。 end process。(2)library ieee。entity t5 is port( clk :in std_logic。end entity。beginco=39。 when cqi=5 and clk=39。else 39。 process (clk) is beginif clk39。139。 else cqi=cqi+1。 end if。 end architecture art。use 。 co:out std_logic)。Architecture art of t200 issignal cqi : integer range 1 to 200。139。039。039。event and clk=39。then if cqi=200 then cqi=1。 end if。 end process。(4)library ieee。entity t50e is port( clk :in std_logic。end entity。beginco=39。 when cqi=50e3 and clk=39。else 39。 process (clk) is beginif clk39。139。 else cqi=cqi+1。 end if。 end architecture art。use 。 co:out std_logic)。Architecture art of t250 issignal cqi : integer range 1 to 139。039。039。event and clk=39。then if cqi=250 then cqi=1。 end if。 end process。library ieee。entity Dcfq isport(d,clk:in std_logic。end entity Dcfq。event and clk=39。) thenq=d。end process。(1)秒計數(shù)模塊library ieee。use 。 sqmsl,sqmsh:out std_logic_vector(3 do