【文章內(nèi)容簡(jiǎn)介】
39。039。 then if clk39。event and clk=39。139。 then 信號(hào)為 1時(shí)有效 if(count=100) then 當(dāng)掃描為次數(shù)為 100 次時(shí) q=39。039。 count :=0。 else count:=count+1。 否則開始計(jì)數(shù) end if。 end if。 else q=39。139。 end if。 秒 /分 /時(shí)計(jì)數(shù)模塊的軟件設(shè)計(jì) entity count is port (cl_r,clk,add: in std_logic。 gsec,ssec: out std_logic_vector(3 downto 0)。 c: out std_logic)。 end entity 。 architecture art of count is signal co,rclk: std_logic。 begin process(cl_r,clk,rclk,co,add) is variable secg,secs,ad: std_logic_vector(3 downto 0)。定義 秒的端口 個(gè)位,十位 begin rclk=add xnor clk。 掃描時(shí)鐘要低于系統(tǒng)時(shí)鐘 if cl_r=39。039。 then secg:=0000。secs:=0000。co=39。039。 elsif (rclk=39。139。and rclk39。event) then If secg=1001 and secs=0101 then secg:=0000。secs:=0000。co=39。139。 elsif secg=1001 then secs:=secs+1。secg:=0000。co=39。039。 elsif secg1001 then secg:=secg+1。 end if。 當(dāng)計(jì)數(shù)個(gè)位為 9,十位為 5,計(jì)數(shù)值為 59 時(shí),秒的個(gè)位十位都為零,進(jìn)位為一,說(shuō)明此時(shí)計(jì)數(shù)為一分鐘。秒的個(gè)位一直計(jì)數(shù),計(jì)數(shù)值不到 9時(shí),一直加,直到出現(xiàn)個(gè)位出現(xiàn) 9,十位加一。 模式選擇模塊的軟件設(shè)計(jì) 15 entity slc is port( add: in std_logic_vector(2 downto 0)。 sel:in std_logic。 naout,clkout : out std_logic_vector(2 downto 0))。 end entity。 architecture art of slc is begin process(sel,add) begin if(sel=39。139。) then sel 為一時(shí),鬧 鐘模式開啟,否則繼續(xù)時(shí)鐘的顯示 naout=add。 else clkout=add。 數(shù)碼管 位選和段選 architecture art of sel is signal data: std_logic_vector(3 downto 0)。 begin process(sel,f0,f1,f2,f3,f4,f5) begin case sel is 數(shù)碼管的位選,數(shù)碼管為共陽(yáng)極的,秒分時(shí)共用六個(gè) when 000=data=f0。wei=111110。數(shù)碼管顯示 when 001=data=f1。wei=111101。 when 010=data=f2。wei=111011。 when 011=data=f3。wei=110111。 when 100=data=f4。wei=101111。 when 101=data=f5。wei=011111。 when others=data=f0。wei=111111。 end case。 end process。 process(data,sel) begin if sel=010 or sel=100 then 若是第二個(gè)或是第四個(gè)數(shù)碼管亮,則低位的兩個(gè)點(diǎn)要顯示,低電平有效。 case data is when0000=du=01000000。 16 when0001=du=01111001。 when0010=du=00100100。 when0011=du=00110000。 when0100=du=00011001。 when0101=du=00010010。 when0110=du=00000010。 when0111=du=01111000。 when1000=du=00000000。 when1001=du=00010000。 when others=du=01000000。 end case。 else case data is when0000=du=11000000。 when0001=du=11111001。 when0010=du=10100100。 when0011=du=10110000。 when0100=du=10011001。 when0101=du=10010010。 when0110=du=10000010。 when0111=du=11111000。 when1000=du=10000000。 when1001=du=10010000。 when others=du=11000000。 段選 end case。 end if。 end process。 鬧鐘模塊的軟件設(shè)計(jì) 鬧鐘能否正常計(jì)數(shù)、能否對(duì)計(jì)時(shí)時(shí)間進(jìn)行調(diào)整,定時(shí)鬧鈴功能是否正常,動(dòng)態(tài)掃描顯示是否正常。 原理框圖: 17 ( 1)計(jì)數(shù)模塊:按照時(shí)鐘模式完成一天 24小時(shí)的計(jì)時(shí)功能。 ( 2)譯碼模塊:根據(jù)計(jì)時(shí)模塊的狀態(tài)輸出值來(lái)確定對(duì)應(yīng)位的數(shù)據(jù)的,其輸出是 7段高低電平,以點(diǎn)亮相應(yīng)的數(shù)碼管; ( 3)計(jì)數(shù)控制模塊:根據(jù)外部控制信號(hào),進(jìn)行時(shí)鐘計(jì)數(shù)的調(diào)整和計(jì)時(shí)的控制; ( 4)響鈴控制模塊:根據(jù)外部鬧鐘控制信號(hào)完成鬧鐘的定時(shí),當(dāng)計(jì)數(shù)模塊技術(shù)到和該模塊所設(shè)定時(shí)間一致時(shí),該模塊將驅(qū)動(dòng)蜂鳴器響鈴。 ( 5)分頻 器:根據(jù)外部的輸入時(shí)鐘,將外部時(shí)鐘成兩路信號(hào),一路用于正常的計(jì)數(shù),一路用于七段顯示數(shù)碼管的動(dòng)態(tài)掃描輸出。 architecture art of beep is signal bep : std_logic。 begin process(bep,clk,hh1,hh2,mm1,mm2,h1,h2,m1,m2) begin if (h1=hh1 and h2=hh2 and mm1=m1 and mm2=m2 ) OR (mm1=0000 and mm2=0000) then 當(dāng)前時(shí)間的時(shí)分秒完全等于設(shè)置的鬧鐘時(shí)間,蜂鳴器才有效,否則蜂鳴器不響,繼續(xù)顯示當(dāng)前的時(shí)間 if clk=39。139。 and clk39。event then bep=not bep。 end if。 else bep=39。139。 end if。 18 系統(tǒng)時(shí)鐘的軟件設(shè)計(jì) process(clk) variable counts:integer range 0 to 50000000。 系統(tǒng)時(shí)鐘為 50MHZ begin if clk39。event and clk=39。139。 then 時(shí)鐘高電平有效 if(counts25000000) then 計(jì)數(shù)周期為 1ms,1ms 掃描 100 次, clks=39。139。 0 到 毫秒為高電平 counts:=counts+1。 elsif(counts50000000) then 毫秒到 1 毫秒為低電平 clks=39。039。 counts:=counts+1。 else counts:=0。 end if。 end if。 end process。 process(clk) variable countms:integer range 0 to 50000。 分頻段 begin if clk39。event and clk=39。139。 then 時(shí)鐘高電平有效 if(countms25000) then 計(jì)數(shù)周期為 到 毫秒為低電平 clkms=39。139。 countms:=countms+1。 elsif(countms50000) then 到 毫秒為低電平 clkms=39。039。 countms:=countms+1。 else countms:=0。 end if。 end if。 end process。 end architecture fenp。 end if。 c=co。 ssec=secs。 19 gsec=secg。 end process。 end architecture。 位選六位,段選 8 位 三個(gè)圖分別為秒分時(shí)的輸入端口 模式的切換,鬧鐘的輸入端口 時(shí)鐘信號(hào)的輸入 計(jì)數(shù)達(dá)到59 秒后本身清零, 進(jìn)位給分位,依次類推 動(dòng)態(tài)掃描,時(shí)間1s 20 硬件的測(cè)試 本次選用 EP2c5Q208C8N 芯片。外部需接幾上升沿按鍵,并接揚(yáng)聲器和不許譯碼器的數(shù)碼管。 下載測(cè)試后,按復(fù)位鍵后數(shù)碼管顯示 0時(shí) 0 分 0秒開始計(jì)數(shù),分秒時(shí)計(jì)數(shù)都正確。按動(dòng)調(diào)分鍵或調(diào)小時(shí)鍵后,分位或小時(shí)位開始自加,再按鍵后停止。當(dāng)時(shí)間到整點(diǎn)時(shí)會(huì)有十秒報(bào)時(shí),按動(dòng)停止鍵停止報(bào)時(shí),不按此鍵時(shí)自動(dòng)到十秒后停止報(bào)時(shí)。設(shè)計(jì)結(jié)果達(dá)到要求。 模擬時(shí)鐘電 路圖與實(shí)物圖 數(shù)字鐘實(shí)際上是一個(gè)對(duì)標(biāo)準(zhǔn)頻率( 1HZ)進(jìn)行計(jì)數(shù)的計(jì)數(shù)電路。由于計(jì)數(shù)的起始時(shí)間不可能與標(biāo)準(zhǔn)時(shí)間(如北京時(shí)間)一致,故需要在電路上加一個(gè)校時(shí)電路,同時(shí)標(biāo)準(zhǔn)的 1HZ 時(shí)間信號(hào)必須做到準(zhǔn)確穩(wěn)定。通常使用石英晶體振蕩器電路構(gòu)成數(shù)字鐘 實(shí)物電路圖: 21 22 此圖為撥碼開關(guān)的實(shí)物圖,當(dāng) 4 開關(guān)處于高電平時(shí),說(shuō)明選擇模式已經(jīng)打開了,你可以選擇是計(jì)數(shù)模式,還是顯示時(shí)分秒模式,還是鬧鐘模式 當(dāng)撥碼開關(guān) 2,撥至高電平時(shí),所有數(shù)碼管顯示的數(shù)值將全部清零 校對(duì)分的獨(dú)立按鍵,每按一下,計(jì)數(shù)值加一,計(jì)數(shù)范圍 0 到 59 校對(duì)時(shí)的獨(dú)立按鍵,每按一下,計(jì)數(shù)值加1,計(jì)數(shù)范圍 0 到 23 校對(duì)秒的獨(dú)立按鍵,每按一下,計(jì)數(shù)值加 1,計(jì)數(shù)范圍, 0 到 59 23 假使此刻時(shí)間為早上九點(diǎn)九分 57秒,我們?cè)谶x擇的模式(撥碼開關(guān))下,將狀態(tài)調(diào)為鬧鐘模式,將鬧鐘定為十點(diǎn)整,也就是 。然后將撥碼開關(guān)撥下,則數(shù)碼管繼續(xù)此刻的時(shí)間顯示,當(dāng)時(shí) 間顯示為 時(shí),此時(shí)蜂鳴器將產(chǎn)生滴答滴答的聲音。時(shí)間為一分鐘。 設(shè)計(jì)心得 通過(guò)兩星期的緊張工作,最后完成了我的設(shè)計(jì)任務(wù) —— 數(shù)字鐘的設(shè)計(jì)與制作。通過(guò) 本次課程設(shè)計(jì)的學(xué)習(xí),我深深的體會(huì)到設(shè)計(jì)課的重要性和目的性所在。本次設(shè)計(jì)課不僅僅培養(yǎng)了我們實(shí)際操作能力,也培養(yǎng)了我們靈活運(yùn)用課本知識(shí),理論聯(lián)系實(shí)際,獨(dú)立自主的進(jìn)行設(shè)計(jì)的能力。它不僅僅是一個(gè)學(xué)習(xí)新知識(shí)新方法的好機(jī)會(huì),同時(shí)也是對(duì)我所學(xué)知識(shí)的一次綜合的檢驗(yàn)和復(fù)習(xí),使我明白了自己的缺陷所在,從而查漏補(bǔ)缺。希望學(xué)校以后多安排一些類似的實(shí)踐環(huán)節(jié),讓同學(xué)們學(xué)以致用。 課程設(shè)計(jì)中要求要有耐心和毅力,還要細(xì)心,稍有不慎,一個(gè)小小的錯(cuò)誤就會(huì)導(dǎo)致結(jié)果的不正確,而對(duì)錯(cuò)