日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VHDL实现数码管30s倒计时

發布時間:2024/1/18 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VHDL实现数码管30s倒计时 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VHDL實現數碼管30s倒計時

一、設計要求

當設計文件加載到目標器件后,將數字信號源模塊的時鐘選擇為1KHZ,數碼管實現30秒倒計時,當倒計時結束后重新開始倒計時。

二、設計原理

七段數碼管是電子開發過程中常用的輸出顯示設備。在實驗系統中使用的是兩個四位一體、共陰極型七段數碼管。其單個靜態數碼管如下圖3-1所示。

由于七段數碼管公共端連接到GND,當數碼管的中的另一個端被輸入高電平,則相應的這一段被點亮,反之則不亮。四位一體的七段數碼管在單個靜態數碼管的基礎上加入了用于選擇哪一位數碼管的位選信號端口。八個數碼管的a、b、c、d、e、f、g、dp都連接在了一起,八個數碼管分別由各自的位選信號來控制被選通的數碼管顯示數據,其余關閉。

三、代碼實現

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); --存放借位次數VARIABLE c:STD_LOGIC_VECTOR(1 DOWNTO 0); --存放數碼管掃描狀態VARIABLE b:STD_LOGIC_VECTOR(1 DOWNTO 0); --存放十位VARIABLE a:STD_LOGIC_VECTOR(3 DOWNTO 0); --存放個位VARIABLE count:STD_LOGIC_VECTOR(9 DOWNTO 0); --計數變量BEGINIF clk'EVENT AND clk='1' THEN --時鐘上升沿檢測count:=count+1; --每次時鐘上升沿計數+1c:=c+1;IF count = "1111101000"THEN --當計數計到“1111101000”時,即1秒時a:=a-1; --個位-1END IF; IF a = "1111"THEN --當個位為0不夠-1時,向十位借1a:="1001"; --個位變成1001,即9b:=b-1; --十位減去1d := d+1; --記錄借位的次數END IF;IF d >= "100" THEN --當借位次數達到4此時,即個位和十位皆為0a := "0000"; --個位、十位和借位次數皆復位b := "00";d := "000";END IF;CASE c IS --數碼管位選在000001之間循環,達到動態顯示WHEN "00"=>sel<="000"; WHEN "01"=>sel<="001";WHEN "10"=>sel<="000";WHEN "11"=>sel<="001";WHEN OTHERS =>NULL;END CASE;--顯示個位的數碼管譯碼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--顯示十位的數碼管譯碼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倒计时的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。