VHDL实现数码管30s倒计时
生活随笔
收集整理的這篇文章主要介紹了
VHDL实现数码管30s倒计时
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
VHDL實現(xiàn)數(shù)碼管30s倒計時
一、設計要求
當設計文件加載到目標器件后,將數(shù)字信號源模塊的時鐘選擇為1KHZ,數(shù)碼管實現(xiàn)30秒倒計時,當?shù)褂嫊r結束后重新開始倒計時。
二、設計原理
七段數(shù)碼管是電子開發(fā)過程中常用的輸出顯示設備。在實驗系統(tǒng)中使用的是兩個四位一體、共陰極型七段數(shù)碼管。其單個靜態(tài)數(shù)碼管如下圖3-1所示。
由于七段數(shù)碼管公共端連接到GND,當數(shù)碼管的中的另一個端被輸入高電平,則相應的這一段被點亮,反之則不亮。四位一體的七段數(shù)碼管在單個靜態(tài)數(shù)碼管的基礎上加入了用于選擇哪一位數(shù)碼管的位選信號端口。八個數(shù)碼管的a、b、c、d、e、f、g、dp都連接在了一起,八個數(shù)碼管分別由各自的位選信號來控制被選通的數(shù)碼管顯示數(shù)據(jù),其余關閉。
三、代碼實現(xiàn)
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY TEST4 ISPORT(clk:IN STD_LOGIC;leds7:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END TEST4; ARCHITECTURE behave OF TEST4 IS BEGINPROCESS(clk)VARIABLE d:STD_LOGIC_VECTOR(2 DOWNTO 0); --存放借位次數(shù)VARIABLE c:STD_LOGIC_VECTOR(1 DOWNTO 0); --存放數(shù)碼管掃描狀態(tài)VARIABLE b:STD_LOGIC_VECTOR(1 DOWNTO 0); --存放十位VARIABLE a:STD_LOGIC_VECTOR(3 DOWNTO 0); --存放個位VARIABLE count:STD_LOGIC_VECTOR(9 DOWNTO 0); --計數(shù)變量BEGINIF clk'EVENT AND clk='1' THEN --時鐘上升沿檢測count:=count+1; --每次時鐘上升沿計數(shù)+1c:=c+1;IF count = "1111101000"THEN --當計數(shù)計到“1111101000”時,即1秒時a:=a-1; --個位-1END IF; IF a = "1111"THEN --當個位為0不夠-1時,向十位借1a:="1001"; --個位變成1001,即9b:=b-1; --十位減去1d := d+1; --記錄借位的次數(shù)END IF;IF d >= "100" THEN --當借位次數(shù)達到4此時,即個位和十位皆為0a := "0000"; --個位、十位和借位次數(shù)皆復位b := "00";d := "000";END IF;CASE c IS --數(shù)碼管位選在000和001之間循環(huán),達到動態(tài)顯示WHEN "00"=>sel<="000"; WHEN "01"=>sel<="001";WHEN "10"=>sel<="000";WHEN "11"=>sel<="001";WHEN OTHERS =>NULL;END CASE;--顯示個位的數(shù)碼管譯碼IF (c = "00" OR c = "10")THEN CASE a ISWHEN "0000"=> leds7 <="00111111"; --0WHEN "0001"=> leds7 <="00000110"; --1WHEN "0010"=> leds7 <="01011011"; --2WHEN "0011"=> leds7 <="01001111"; --3WHEN "0100"=> leds7 <="01100110"; --4WHEN "0101"=> leds7 <="01101101"; --5WHEN "0110"=> leds7 <="01111101"; --6WHEN "0111"=> leds7 <="00000111"; --7WHEN "1000"=> leds7 <="01111111"; --8WHEN "1001"=> leds7 <="01101111"; --9WHEN OTHERS => NULL;END CASE;ELSE--顯示十位的數(shù)碼管譯碼CASE b IS WHEN "01"=> leds7 <="00111111"; --0WHEN "10"=> leds7 <="00000110"; --1WHEN "11"=> leds7 <="01011011"; --2WHEN "00"=> leds7 <="01001111"; --3WHEN OTHERS => NULL;END CASE;END IF;END IF;END PROCESS; END behave;總結
以上是生活随笔為你收集整理的VHDL实现数码管30s倒计时的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一次前端实习所学内容
- 下一篇: BZOJ2144跳跳棋——LCA+二分