下面是通過38解碼器實現位選的數碼管動態顯示程式,請回答程式中標記的那個for迴圈的作用

2021-03-22 05:27:31 字數 5574 閱讀 1550

1樓:匿名使用者

完全可以 154是4-16線解碼器 138是3-8解碼器 你肯定知道 解碼原理相同 只是注意一下使能端即可

2樓:匿名使用者

重複for(j=0;j<8;j++)

{p3=led_w[j];

delay(1);

位選100次,在這個程式中其實有沒有都一樣,因為外面有了乙個while(1)的死迴圈,加上for(k=100;k>0;k--);只是多此一舉。

數碼管位選的問題

3樓:匿名使用者

不需要改硬體電路。

你看的資料基本上都是:點亮1位的數碼管,然後在主程式流程中通過迴圈延時的方式保持一段時間,再去點亮第2個數碼管,再保持一段時間,。。。如此迴圈。

你說的沒錯,這種方式相當於對cpu的佔用率達到100%。

這裡的關鍵在延時時間,完全可以使用微控制器的定時中斷來完成這項工作。

程式中可以定義1個全域性變數(如果是彙編的話就指定1個位元組),用於儲存4位數碼管送顯示的指標,比如=1時送第1位、=2時送第2位.。。。。。計數達到4清0。

再將中斷設定成10ms一次(4位數碼管每位保持顯示10ms時間就行了),進入中斷服務程式中可以根據上面的變數確定送哪一位顯示,然後將該位的顯示內容讀入送顯,該變數+1用於下一次中斷時的定位。送顯占用中斷的時間不用擔心,頂多幾十us,而中斷是10ms一次。

通過這種方法,可以將送顯示的工作放在中斷中完成,尤其是摘掉了主程式中的延時流程,徹底釋放了cpu資源。

當然如果送顯示過於複雜比如需要幾個毫秒,你可以在設定乙個標誌,每次進中斷後將該標誌置起,主程式只有見到該標誌有效時才去處理切換顯示的操作,然後再清除標誌,一樣能達到目的。其它的延時也可以採用設標誌的方法來做。

其實這才是微控制器定時中斷的最大作用。

4樓:匿名使用者

建議用解碼器和微控制器的io口相連再去驅動數碼管,即用二進位制的微控制器io輸出訊號來實現位選,0001為1號,0010為2

請大蝦們幫下忙。微控制器。如何點亮所有的數碼管

5樓:匿名使用者

你這個圖是用138解碼器控制位選的,所以不能用這種靜態顯示,這種連線方法是不能靜態顯示的。只能動態顯示。

看的出來你這是郭天祥的程式吧,呵呵。並不是所有的電路板都是那樣連線。我給你個程式吧。你這個圖跟我的板子是一樣的,正好有乙個,拿去用吧。好好看看。

這個程式是我以前做的,八只管顯示0-7

#include

#define uchar unsigned charuchar code table=;

uchar a;

sbit d=p3^7;

void delay(uchar z)

void main()}}

6樓:手機使用者

這就是所謂的「數碼管動態掃瞄」

依次點亮的時間很快,人眼分辨不出來,就像是全亮了。

7樓:匿名使用者

對於多個數碼管,而且只有一組i/o口控制,只能利用動態顯示方法。就是迴圈點亮,利用人的「視覺延時」,感覺所有的數碼管都是一起亮的。動態顯示會降低顯示的亮度,但是不影響顯示結果

8樓:匿名使用者

138是個3-8解碼器,要在abc輸入0-7的值才會點亮對應的數碼管,沒有輸入ttl型晶元預設輸入都是高電平,所以最後乙個亮,

要全部點亮,就是給abc輸入0-7的值,並快速的變化,造**眼無法分辨,看上去都是亮的

9樓:匿名使用者

你這個圖八個數碼管一塊亮是不可能的,只能迴圈亮,不過延時時間短的話人眼看起來就是一塊亮的了

用c51系列的微控制器控制 在8位數碼管動態顯示秒錶 要c語言版程式 謝謝

10樓:匿名使用者

顯示程式和硬體關聯,如驅動方式、位數等,所以沒有統一的程式,假定動態顯示,大概思路如下:

1、設定定時中斷,定時中斷時間是5毫秒;

2、中斷程式完成秒計時,秒數發生變化時,要將秒數對應的顯示碼放到顯示緩衝區;

3、每次中斷迴圈顯示一位數碼管;

下面是我曾經寫的乙個顯示程式(顯示緩衝區g_disp_buf):

#define pin_sdin p0_0#define pin_st p0_1

#define pin_sh p0_2

#define loc_d1 0x08

void display(void)

pin_st=1; // character readyp0 |=loc; // set d1,d2,d3 or d4 ,enable display

g_disp_location++;}

11樓:煙火夜空

lz很多東西沒講明白:

1.晶振多大?

2.數碼管型別,共陽?共陰?

3.數碼管段選,即資料介面在**?

4.數碼管位選介面在**?低電平選通 還是 高電平選通?

5.八位數碼管,僅顯示秒錶?秒錶就是說,全是秒,高位表示 幾萬 或 幾千 秒,而不是分。

4位8段數碼管動態顯示 如何用2個74hc573實現 如何連線? 求圖 15

12樓:董斌

4位數碼管輪流點亮迴圈掃瞄就能完成顯示,如果你用573鎖存器,如果保持靜態顯示,可以用4片,8個輸出引腳分別接上對應的8個數碼管引腳,鎖存低電平有效,可以再加乙個解碼器做片選,或者分成控制器的4個引腳做片選,le高電平時寫入資料之後拉低,再寫下乙個,一次完成。

如何利用verilog hdl語言實現6位數字動態掃瞄電路

13樓:匿名使用者

因為是用語言做你的6位數字動態掃瞄電路,所以你大可不必追求某個器件,某個引腳,因為器件是你自己編,有用的埠做出來,沒用的就可以不做,哥們我耗時3個小時幫你做了這個,時間緊湊,只是實現了你的需求,沒有更多的修飾,當然想我幫你修飾也可以,條件嘛,面談! 好了,現在開始給你帖我的做法,對了,我是用vhdl實現的! 並且在quartus ii 5.

1版本軟體下編譯成功! 首先是4位鎖存器**:library ieee;

use ieee.std_logic_1164.all;entity reg4 is

port(

din : in std_logic_vector(3 downto 0);

dout: out std_logic_vector(3 downto 0);

ena: in std_logic

);end reg4;

architecture art of reg4 is

begin

process(ena)

begin

if ena='1' then dout<=din; --ena=1時,置數

else dout<="zzzz"; --ena=0時,高阻

end if;

end process;

end art; 這個是6位解碼器(其實就是3-8解碼,最高2位不用)用來選擇鎖存器的輸出與數碼管:library ieee;

use ieee.std_logic_1164.all;entity decoder is

port(

add:in std_logic_vector(2 downto 0);

sel:out std_logic_vector(5 downto 0)

);end decoder;architecture art of decoder is

begin

sel(5)<='1' when add="110" else '0';

sel(4)<='1' when add="101" else '0';

sel(3)<='1' when add="011" else '0';

sel(2)<='1' when add="010" else '0';

sel(1)<='1' when add="001" else '0';

sel(0)<='1' when add="000" else '0';

end art; 這個是6位計數器,用來提供選址(時鐘訊號需要50hz,因為人眼暫留時間臨界為25hz,而我的程式中是二分頻後的計數):library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;entity **t6 is

port(

clk: in std_logic;

cq: out std_logic_vector(2 downto 0)

);end **t6;

architecture art of **t6 is

signal cqi: std_logic_vector(2 downto 0);

begin

process(clk)

begin

if clk 'event and clk='1' then --同步清零

if cqi<"101" then

cqi<=cqi+1;

else

cqi<="000";

end if;

end if;

end process;

end art; 這個是類似與7448的7段解碼器,沒寫那麼多控制引腳,因為這個簡易版用不到:entity decoder7 is

port(

inp: in std_logic_vector(3 downto 0);

outp:out std_logic_vector(6 downto 0)

);end decoder7;

architecture art of decoder7 is --因為你需要接共陰極數碼管,所以輸出高電平驅動

begin

with inp select

outp<="1111110" when "0000",

"0110000" when "0001",

"1101101" when "0010",

"1111001" when "0011",

"0110011" when "0100",

"1011011" when "0101",

"0011111" when "0110",

"1110000" when "0111",

"1111111" when "1000",

"1110011" when "1001",

"zzzzzzz" when others;

end art; 接下來是總程式:……不行,毫無保留的給你,你這傢伙肯定要賴賬,答謝我以後給你! 給你來張原理圖,讓你更明白點: 請追加分數,要不你實在對不起哥!!

protues**軟體動態掃瞄數碼管時新增74ls138解碼器顯示出錯

14樓:還是呼喚

不知道你的出錯是**出錯還是數碼管顯示出錯

你的數碼管應該是共陰的把 你在看看你的程式有沒有問題 38解碼器輸出的好像是低電平!

38解碼器與與非門實現416解碼器

3 8解碼器,需要兩個。與非門,用不著。如何將兩個3 8線解碼器擴散成乙個4 16線解碼器 這個很簡單的 bai.我的想du法是這樣的.設兩個zhi3 8線解碼dao 器分別為解碼器y1和y.y1控制版端權分別為c1,b1,a1,y控制端分別為c,b,a,接下來就擴充套件了.m3 m2 m1 m0 ...

什麼是網路矩陣,網路矩陣和解碼器到底有什麼區別哪個適用一些

網路bai矩du 陣zhi 簡捷dao安內防容 doorsky.網路矩陣和解碼器到底有什麼區別哪個適用一些?我是業內人士。說白了數字矩陣其實就是多個解碼器整合到一起,兩者功能是一樣的,因為數字矩陣不透明,利潤高,所以有的廠家把功能說的比較強和複雜,其實都是把數碼訊號轉換成模擬訊號上牆。你兩種都對比下...

138解碼器控制的數碼管如何消隱

數碼管分共陰和共陽,不同的電路對應不同的型號,如果你要是用錯了型號就不會亮了。如果你感覺電流不夠,可以用9012三極體進行功率放大,就可以帶動數碼管了。e1 e2 0,e3 1時 138輸出 可以讓e3 0 實現消隱 51微控制器138解碼器如何讓數碼管全部亮起 按順序先亮第乙個再第二個再最後乙個 ...