【正文】
。 WHEN 0110011000101 = Q_Y=39。 WHEN 0110010000000 = Q_Y=39。 WHEN 0101111000000 = Q_Y=39。 WHEN 0101101010101 = Q_Y=39。 WHEN 0101101000101 = Q_Y=39。 WHEN 0101100000000 = Q_Y=39。 WHEN 0101011010000 = Q_Y=39。 WHEN 0101010000101 = Q_Y=39。 WHEN 0101001010101 = Q_Y=39。 WHEN 0101000010000 = Q_Y=39。 WHEN 0101000000000 = Q_Y=39。 西安歐亞學院本科畢業(yè)論文(設計) 37 WHEN 0100010110000 = Q_Y=39。 WHEN 0100001000101 = Q_Y=39。 WHEN 0100000110101 = Q_Y=39。 WHEN 0010011010000 = Q_Y=39。 WHEN 0010010110000 = Q_Y=39。 WHEN 0010001000101 = Q_Y=39。 WHEN 0010000110101 = Q_Y=39。 WHEN 0001111010000 = Q_Y=39。 WHEN 0001111000000 = Q_Y=39。 THEN CASE QTIME IS WHEN 0001101010000 = Q_Y=39。 PROCESS(QTIME,K3) BEGIN IF K3=39。 Q_MB amp。 QTIME=Q_HB amp。 Q_MA = conv_std_logic_vector (QM_A,4)。 BEGIN Q_HA = conv_std_logic_vector (QH_A,4)。 SIGNAL Q_MA:STD_LOGIC_VECTOR (3 DOWNTO 0)。 SIGNAL Q_HA:STD_LOGIC_VECTOR(3 DOWNTO 0)。 END COMP_TIME。 QM_B: IN INTEGER RANGE 0 TO 10。 QH_A,QM_A: IN INTEGER RANGE 0 TO 10。 USE 。 本模塊的代碼如下: LIBRARY ieee。 頂層模塊圖如下圖所示: 圖 415 定時鬧鐘比較模塊頂層圖 校園打鈴鬧鈴模塊 校園打鈴模塊 校園打鈴的 原 理和定時鬧鈴相似,只是沒有設置模塊,所有的打鈴時間都是預設好的,并且分為春季作息時間和夏季作息時間。039。139。 西安歐亞學院本科畢業(yè)論文(設計) 35 BEGIN SPEAK=CLK0 AND Y。 END parer。 MARM_B: IN INTEGER RANGE 0 TO 10。 HARM_A,MARM_A: IN INTEGER RANGE 0 TO 10。 QH_B: IN INTEGER RANGE 0 TO 10。 ENTITY parer IS PORT( CLk0: IN STD_LOGIC。 的代碼如下: LIBRARY ieee。 END a。 Q_minuea=Q_tmpma。 Q_houra=Q_tmpha。 END IF 。 END IF。 Q_tmpmb:=Q_tmpmb+1。 Q_tmpma:=0 。 END IF。 Q_tmphb:=Q_tmphb+1。 Q_tmpha:=0 。139。139。 ELSIF up_key39。Q_tmpha:= 0。 THEN Q_tmpma:= 0。 BEGIN IF reset=39。 VARIABLE Q_tmpha: INTEGER RANGE 0 TO 10。 ARCHITECTURE a OF ctrl_memo IS BEGIN PROCESS(reset,k1,up_key) VARIABLE Q_tmpma: INTEGER RANGE 0 TO 10。 Q_minuea : OUT INTEGER RANGE 0 TO 10)?!皶r ”高位 Q_houra : OUT INTEGER RANGE 0 TO 10。 ENTITY ctrl_memo IS PORT( reset,k1,up_key: IN STD_LOGIC。 鬧鈴控制模塊 控制部分的代碼如下所示: LIBRARY ieee。其中,控制部分的功能和時鐘校時模塊的功能相同,但是實現(xiàn)方式不太相同。 帶校時功能的整體時鐘模塊 將上面的模塊聯(lián)合在一起,就得到了整體時鐘模塊,并且可以實現(xiàn)校時功能。 END PROCESS COM1 。 WHEN OTHERS = y=11 。 WHEN st1 = y = 01 。 END PROCESS COMREG 。 END CASE 。 WHEN st2 = STX = st0。 THEN CASE STX IS WHEN st0 = STX = st1。EVENT AND CLK = 39。 THEN STX = st0。 西安歐亞學院本科畢業(yè)論文(設計) 30 BEGIN COMREG : PROCESS(CLK,RESET) BEGIN 決定轉換狀態(tài)的進程 IF RESET =39。 ARCHITECTURE behav OF StateMachine IS TYPE states IS (st0, st1, st2)。 y : OUT STD_LOGIC_VECTOR(1 DOWNTO 0))。 USE 。利用上述計數(shù)電路的特點,可通過人為產生脈沖的方法來產生計數(shù)的增加,以便實現(xiàn)校時功能。 END a。QSB=tmpsb。 END IF 。 END IF。COUT1=39。 tmpSb:=tmpSb+1。139。 tmpSb:=0 。139。139。 ELSIF CLK39。 COUT1=39。 THEN tmpsb := 0。 BEGIN IF CLRN=39。 ARCHITECTURE a OF clock_24 IS BEGIN PROCESS(CLK,CLRN) VARIABLE tmpsa: INTEGER RANGE 0 TO 10。 Qsb : OUT INTEGER RANGE 0 TO 10)。 cout1: out STD_LOGIC。 USE 。 圖 412 秒計數(shù)模塊框圖 同樣,輸入端口 EN 是秒時鐘使能信號,也是整個數(shù)字鐘的使能信號,高電平有效; CLRN 是異步清零信號; CLK 是秒脈沖輸入端口,當秒計數(shù)到 23 時輸出高電平,其它時候輸出低電平。分計數(shù)和時計數(shù)模塊的設計原理與秒模塊的類似。 END a。QSB=tmpsb。 END IF 。 END IF。COUT1=39。 tmpSb:=tmpSb+1。139。 tmpSb:=0 。139。139。 ELSIF CLK39。 COUT1=39。 THEN tmpsb := 0。 BEGIN IF CLRN=39。 ARCHITECTURE a OF clock_60 IS BEGIN PROCESS(CLK,CLRN) VARIABLE tmpsa: INTEGER RANGE 0 TO 10。 Qsb : OUT INTEGER RANGE 0 TO 10)。 cout1: out STD_LOGIC。 USE 。 西安歐亞學院本科畢業(yè)論文(設計) 26 圖 410 秒計數(shù)模塊框圖 輸入端口 EN 是秒時鐘使能信號,也是整個數(shù)字 鐘 的使能信號,高電平有效; CLRN 是異步清零信號; CLK 是秒脈沖輸入端口,當秒計數(shù)到 59 時輸出高電平,其它時候輸出低電平。 完整的鍵盤程序應加上剛開始介紹的分頻模塊,鍵盤接口電路總的邏輯連接框圖如圖 48 所示。 END PROCESS COM1 。 。 WHEN OTHERS = y=39。139。 。 COM1: PROCESS(STX) BEGIN CASE STX IS WHEN st0 = y = 39。 END IF。 WHEN OTHERS = STX = st0。 THEN CASE STX IS WHEN st0 = STX = st1。EVENT AND CLK = 39。 THEN STX = st0。 BEGIN COMREG : PROCESS(CLK,RESET) BEGIN IF RESET =39。 ARCHITECTURE behav OF KeySwitch IS TYPE states IS (st0, st1, st2)。 y : OUT STD_LOGIC)。 USE 。 西安歐亞學院本科畢業(yè)論文(設計) 24 圖 47 按鍵掃描模塊 本系統(tǒng)給出的解決方案是,定時鬧鈴和時鐘的校時按鍵復用,而另外用一個按鍵控制復用和顯示切換,而第四個按鍵控制春季和夏季作息時間的切換。 系統(tǒng)需要兩個時鐘校時按鍵,兩個鬧鐘校時按鍵,另外還需要一個顯示切換按鍵和一個春夏作息時間按鍵,這樣就一共需要 6 個按鍵,而本系統(tǒng)的硬件電路板只提供了 4 個按鍵,所以需要按鍵復用電路。 如果有按鍵抖動的話, 狀態(tài)機 會在 初始狀態(tài)和最終狀態(tài) 之間變動多次 ,但不會輸出高電平, 所以 按鍵輸出就不會 受抖動影響。 程序說明: 這段程序是實現(xiàn)按鍵消抖 的,實現(xiàn) 較簡單,原理是當有按鍵按下的時候, din 會變成低電平,這時 狀態(tài)機會進入下一個狀態(tài) ,如果此時 din 不為 低電平 時, 便會跳轉回初始狀態(tài);當 din 為高電平 時,狀態(tài)機會繼續(xù)進入下一個狀態(tài) 。 END PROCESS P1。 西安歐亞學院本科畢業(yè)論文(設計) 23 end if。 then next_s = s0。 if din = 39。 when s3 = dout = 39。 else next_s = s3。139。139。 end if。 then next_s = s0。 if din = 39。 when s1 = dout = 39。 else next_s = s1。139。139。 END PROCESS P0。 else null。 then pre_s = s0。 begin P0:PROCESS(reset, clkin) BEGIN if reset = 39。 architecture Behavioral of qudou is TYPE state IS( s0,s1,s2,s3)。 dout: OUT STD_LOGIC)。 reset: IN STD_LOGIC 。