【正文】
Index,en) BEGIN IF en=39。 THEN Tone=11111111111。 WHEN 0001 = Tone=01100000101 。 WHEN 0011 = Tone=10000001100 。 WHEN 0110 = Tone=10100001010 。 WHEN 1000 = Tone=10110000010 。 WHEN 1010 = Tone=11000000110 。 WHEN 1101 = Tone=11010000100 。 WHEN OTHERS = NULL。 END IF。 END。 USE 。 USE 。 inclock : IN STD_LOGIC 。 END music。 COMPONENT altsyncram GENERIC (intended_device_family : STRING。 widthad_a : NATURAL。 operation_mode : STRING。 address_aclr_a : STRING。 width_byteena_a : NATURAL。 lpm_hint : STRING。 PORT ( clock0 : IN STD_LOGIC 。 q_a : OUT STD_LOGIC_VECTOR (3 DOWNTO 0))。 BEGIN q = sub_wire0(3 DOWNTO 0)。 END SYN。仿真波形: 圖 當(dāng) A=0, B=0,C=0 時(shí)是對(duì)時(shí)鐘進(jìn)行校分,分個(gè)位和分 十位會(huì)以六十進(jìn)制循環(huán)增加,并且不對(duì)時(shí)進(jìn)位 。仿真波形: 圖 當(dāng) A=0, B=0,C=1 時(shí)是對(duì)鬧鐘進(jìn)行校 時(shí) ,鬧鐘分個(gè)位和分十位會(huì)以六十進(jìn)制循環(huán)增加,并且不對(duì)時(shí)進(jìn)位 。 仿真波形: 圖 另外當(dāng)計(jì)數(shù)的時(shí),分和鬧鐘所事先設(shè)置時(shí) 、 分相等時(shí), “ 梁祝 ” 這首歌會(huì)響起,作為鬧鐘并且維持一分鐘,一分鐘歌曲自動(dòng)停止。在 QuartusⅡ開(kāi)發(fā)環(huán)境中進(jìn)行管腳鎖定,連接好數(shù)碼管驅(qū)動(dòng)電路,然后將目標(biāo)文件下載到器件中。 在此次的數(shù)字鐘設(shè)計(jì)過(guò)程中,更進(jìn)一步地熟 悉有關(guān)數(shù)字電路的知識(shí)和具體應(yīng)用。并能根據(jù)仿真結(jié)果分析設(shè)計(jì)的存在的問(wèn)題和缺陷,從而進(jìn)行程序的調(diào)試和完善。再加上器件對(duì)信號(hào)的延時(shí)等問(wèn)題,實(shí)際下載到實(shí)驗(yàn)箱上后會(huì)出現(xiàn)一系列的問(wèn)題,因此仿真圖和電路連接圖還是有一定區(qū)別的??偟膩?lái)說(shuō),通過(guò)這次的設(shè)計(jì)實(shí)驗(yàn)更進(jìn)一步地增強(qiáng)了實(shí)驗(yàn)的動(dòng)手能力,對(duì)數(shù)字鐘的工作原理也有了更加透徹的理解。 59時(shí)變 0時(shí),分計(jì)數(shù)模塊滯后計(jì)數(shù),考慮的器件的延時(shí),將程序中秒的進(jìn)位信號(hào)提前 1秒。 研究展望 本設(shè)計(jì)中雖然有控制鍵對(duì)時(shí)鐘進(jìn)行控制,但是用到的按鍵太多,在實(shí)際應(yīng)用上存在不足。這樣可以節(jié)省按鍵資源,以供更多的功能的使用。設(shè)計(jì)的過(guò)程變的相對(duì)簡(jiǎn)單,容易修改等優(yōu)點(diǎn),相信隨著電子技術(shù)的發(fā)展,數(shù)字鐘 的功能會(huì)更加多樣化,滿足人們的各種需要。許金星 老師以其淵博的學(xué)識(shí)、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度、求實(shí)的工作作風(fēng)和他敏捷的思維給我留下了深刻的印象,我將終生難忘 。為此,我向熱心幫助過(guò)我的所有老師和同學(xué)表示由衷的感謝 ! 特別感謝我的師姐 吳謙謙 對(duì)我的學(xué)習(xí)和生活所提供的大力支持和關(guān)心 !還要感謝一直關(guān)心幫助我成長(zhǎng)的室友 鄧森 、 王蒙 ! 在我即將完成學(xué)業(yè)之際,我深深地感謝我的家人給予我的全力支持! 最后,衷心地感謝在百忙之中評(píng)閱論文和參加答辯的各位專(zhuān)家、教授 ! 展望與總結(jié) 21 參考文獻(xiàn) 22 參考文獻(xiàn) 1. 張竹生 .微分半動(dòng)力系統(tǒng)的不變集 [D]:[博士學(xué)位論文 ].北京 :北京大學(xué)數(shù)學(xué)系 ,1983 2. 劉君,常明,秦娟,基于硬件描述語(yǔ)言( VHDL)的數(shù)字時(shí)鐘設(shè)計(jì),天津理工大學(xué)學(xué)報(bào), 2020,第 23 卷 第 4 期, 4041 3. 廖日坤, CPLD/FPGA 嵌入式應(yīng)用開(kāi)發(fā)技術(shù)白金手冊(cè),中國(guó)電力出版社, 2020,212218。 5. 趙保經(jīng) , 中國(guó)集成電路大全 , 國(guó)防工業(yè)出版社 ,1985。 7. 呂思忠 , 數(shù)子電路實(shí)驗(yàn)與課程 設(shè)計(jì) , 哈爾濱工業(yè)大學(xué)出版社 , 2020。 8. 趙志杰 , 集成電路應(yīng)用識(shí)圖方法 , 機(jī)械工業(yè)出版社 , 2020, 3540。 參考文獻(xiàn) 23 附 錄 24 附錄 1 部分模塊代碼 ( 1)分頻器關(guān)鍵代碼 entity div22118400 is port(clk:in std_logic。 end div22118400。 begin process(clk) begin if rising_edge(clk) then temp=temp+1。139。039。 end if。 end behave。 alarm,ok:in std_logic。 min_tune:in std_logic。 sec,min:out integer range 0 to 59。 end alarm_set。 signal hour_temp:integer range 0 to 23。139。min_temp=0。 elsif rising_edge(hz1) then if alarm=39。 and ok=39。 then 附錄 25 if sec_tune=39。 then if sec_temp=59 then sec_temp=0。 end if。 if min_tune=39。 then if min_temp=59 then min_temp=0。 end if。 if hour_tune=39。 then if hour_temp=23 then hour_temp=0。 end if。 else null。 end if。 sec=sec_temp。 hour=hour_temp。 ( 3)定時(shí)模塊關(guān)鍵代碼 entity stop_watch is port(rst,hz1:in std_logic。 ok:in std_logic。 min_tune:in std_logic。 stop_sec,stop_min:out integer range 0 to 59。 index:out std_logic。 end stop_watch。 附 錄 26 signal a_hour:integer range 0 to 23。139。039。039。139。039。139。 else a_sec=a_sec+1。 end if。139。 else a_min=a_min+1。 end if。139。 else a_hour=a_hour+1。 end if。139。139。139。139。039。 a_min=59。 end if。 a_sec=59。 else a_sec=a_sec1。039。139。 else disp=39。 end if。 end process。 stop_min=a_min。 end behave。模塊的實(shí)現(xiàn)方法是先判斷是否有按鍵按下,如有按鍵按下則延時(shí)一段時(shí)間,待抖動(dòng)過(guò)去之后再讀行線狀態(tài),如果仍有低電平行線,則確定有按鍵按下,然后產(chǎn)生一個(gè)有按鍵按下的信號(hào)。該模塊的邏輯框圖如圖 46 所示。 use 。 use 。 row:in std_logic_vector(3 downto 0)。 end qudou。 signal tmp1,sig2:std_logic。 tmp1=sig1(0)and sig1(1)and sig1(2)and sig1(3)。 process(clk1) begin if(clk139。139。039。039。139。 end if。139。039。 else counter=counter+39。 end if。 end if。 end behav。 圖 47 按鍵掃描模塊 CLKY 為輸入時(shí)鐘,該時(shí)鐘是分頻模塊分出的 4MHZ 的時(shí)鐘信號(hào),之所以在這里采用頻率高的時(shí)鐘信號(hào)就是因?yàn)殒I掃描是一個(gè)快過(guò)程,不需要太慢的時(shí)鐘。 ROW[3..0]是行輸入信號(hào),與鍵盤(pán)的行線相連, COM[3..0]是列輸出信號(hào),與鍵盤(pán)的列線相連。 鍵掃描的基本方法是將列線逐一置成低電平,然后讀行線輸入端口,如果行線中有低電平出現(xiàn),說(shuō)明按鍵已經(jīng)確定,將行向量和列向量讀入鍵碼中即可。 use 。 use 。 row:in std_logic_vector(3 downto 0)。 scan_code:out std_logic_vector(7 downto 0))。 architecture behav of ajsm is signal sig_:std_logic_vector(3 downto 0)。 signal tmp,sig1,sig2:std_logic。 tmp=row(0) and row(1) and row(2) and row(3)。event and clky=39。)then 計(jì)數(shù)進(jìn)程 if(sig2=39。)then if(counter=11)then sig1=39。 counter=00。139。139。 else sig1=’0’。 end if。 end process。 begin if(clky39。139。139。 for i in 3 downto 1 loop sig_(i)=sig_(i1)。 sig_(0)=jt。 end if。 end process。event and clky=39。)then if(sig1=39。)then =sig_。 end if。 end process。event and clky=39。)then 附 錄 30 if(sig1=39。)then if(tmp=39。)then scan_code=row amp。 else scan_code=11111111。 else scan_code=11111111。 end if。 end behav。 USE 。 CLK8HZ : IN STD_LOGIC。 CLK : IN STD_LOGIC。 KEY2 : IN STD_LOGIC_VECTOR(1 DOWNTO 0)。 END。 md1 : in std_logic。 clken : out std_logic。 END COMPONENT。 ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) )。 COMPONENT ToneTaba PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) 。 en : in std_logic)。 COMPONENT Speakera PORT ( clk : IN STD_LOGIC。 SpkS : OUT STD_LOGIC )。 SIGNAL Tone :STD_LOGIC_VECTOR (10 DOWNTO 0)。 SIGNAL clken :STD_LOGIC。 BEGIN u1 : Shizhong PORT MAP (clk=CLK,md1=KEY1,md2=KEY2,clken=en, h1=h1,h2=h2,m1=m1,m2=m2,s1=s1,s2=s2)。 u3 : ToneTaba PORT MAP (Index=ToneIndex,Tone=Tone,en=en)。