導航:首頁 > 操作系統 > 單片機數碼管顯示數據編碼

單片機數碼管顯示數據編碼

發布時間:2022-09-04 09:46:07

『壹』 單片機開關控制LED數碼管的編碼

一,什麼是數碼管

數碼管,其實就是由多個led組合在一起的組合顯示塊;有共陰極的,也有共陽極的。使用的數碼管不同,裡麵包含的led個數也會有相關的差異。我們通常使用的數碼管,裡面有8個led燈,大家可以參照生活中的數碼管器件就一目瞭然了,你會發現,數碼管顯示的每一個數字或字母,都是一段一段組合拼接起來的,並不是像寫的那樣圓滑。其中,組合的每一個段,就是一個led燈。

二,點亮一個數碼管

2.1.在點亮數碼管之前,你還必須弄清楚,改數碼管的接是共陰極還是共陽極的接法;其次,還得弄清楚是那幾個(或一個) IO口是IO口 的斷選位(也就是控制顯示哪一個數碼管,通常由IO口控制一個解碼器來實現,因為這樣更節約IO口資源)。

2.2.弄清楚斷選位之後,還得知道,是哪些IO口控制我們的數碼管上的led;

比如:

P0.0 控制數碼管上的led.0;(注意:數碼管上對應的led位,可以參照原理圖上的或查閱相關資料獲得,這里僅僅舉列)

P0.1-->led.1 P0.2-->led2 ......

2.3.想要點亮數碼管很容易,只要開啟對應的數碼管斷選位,再設置數碼管上led的值為點亮(有的數碼管是共陰極接法,有的是共陽極接法,根據具體的設計,給出相關的高或低電平即可)就OK了。但是,我們要在數碼管上顯示我們想要的數字增么辦呢?這個時候,就是考研創造力的時候了,有的數碼管的資料會直接給出它的真值表,但有的卻不一定找得到。在這個時候,我們就得根據我們想要顯示的數字,點亮並熄滅對應數碼管上的led來實現。(推薦:你可以自己先實驗,找出0-9,或其他想要顯示的字元所對應的IO口的值,來保存起來,這樣你就可以重復利用啦!)

三,點亮多個數碼管

3.1 我們想要點亮多個數碼管,首先可以根據2.1,弄清楚你的數碼管的斷選位,然後周期性的改變斷選位的值,以此動態逐個顯示你的數碼管。

3.2 在顯示多個數碼管時,建議周期大於100hz,這樣人眼難以識別起關和開的瞬間,我們看起來就像時很多個數碼管同時點亮了一樣。

四,動態顯示數碼管

4.1 ,在動態顯示數碼管的值時,建議先根據2.2和2.3,把對應的數碼管顯示參數照準,並保存下來,這樣你用起來也方便。

4.2, 動態顯示數碼管,我們可以在規定的時間周期,改變數碼管對應led的開關個數來實現,比如說:

0 在數碼管中顯示的值為0xc0 1是0xf9

那麼我們就可以在規定的時間里,切換該值,從而達到動態效果。

4.3 我們應該注意的時,掃描數碼管(即顯示多個數碼管)應該與設置數碼管的值(數碼管中led的狀態更新)區分開,掃描周期我們可以放短一點,而改變它的值的周期我們可以一秒或者是2秒改變一次。

4.4 消除余暉,大家實驗後,可能會發現,你顯示的值有的時候並不是想要的,它會跳動或者是亮滅不清晰,這個我們就叫做余暉效應。

產生余暉效應的原因是因為你在選則下一個數碼管的時候,還保留了上一個數碼管的顯示值,所以我們消除余暉,只需要在改變數碼管顯示值的時候,先關閉所有數碼管的顯示,在值跟新完成後我們再打開顯示。這里你不用擔心關閉和開啟會有閃爍,更新值的時間會很短,肉眼時幾乎察覺不到滴。

5,示列代碼

/*

晶元:stc89c52

器件:38解碼器等

編譯環境:UV4,C語言

*/

#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

unsigned char code LedChar[] = {undefined

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e

};//數碼管顯示值真值表緩存數組

unsigned char LedBuff[6] = {undefined

0xff,0xff,0xff,0xff,0xff,0xff

};//數碼管顯示值緩存數組

void main()

{undefined

unsigned char i =0;

unsigned int cnt = 0;

unsigned long sec = 0;

ENLED = 0;

ADDR3 = 1;

TMOD = 0x01;

TH0 = 0xfc;

TL0 = 0x67;

TR0 = 1;

while(1)

{undefined

if(TF0==1)

{undefined

TF0 = 0;

TH0 = 0xfc;

TL0 = 0x67;

cnt++;

if(cnt>=1000)

{undefined

cnt = 0;

sec++;

LedBuff[0] = LedChar[sec%10];

LedBuff[1] = LedChar[sec/10%10];

LedBuff[2] = LedChar[sec/100%10];

LedBuff[3] = LedChar[sec/1000%10];

LedBuff[4] = LedChar[sec/10000%10];

LedBuff[5] = LedChar[sec/100000%10];

}

switch(i)

{undefined

case 0:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=LedBuff[0];ENLED = 0;break;

case 1:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=LedBuff[1];ENLED = 0;break;

case 2:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=0;i++;P0=LedBuff[2];ENLED = 0;break;

case 3:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=1;i++;P0=LedBuff[3];ENLED = 0;break;

case 4:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=LedBuff[4];ENLED = 0;break;

case 5:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=1;i=0;P0=LedBuff[5];ENLED = 0;break;

default:break;

}

}

}

}

以上代碼,僅供參考,您需要根據自己原理圖的設計來實現。

『貳』 單片機數碼管顯示

以四個數碼管為例,每個數碼管都有一個公共端,共陰或共陽,這個公共端就類似於開關了,四個數碼管還共用8跟數據線,應該共12根線……開始後,讓第一個開關打開,8位數據線輸入第一個數碼管要顯示的數字的編碼,保持幾十毫秒的延時後,把開關關閉(這步挺重要的),然後打開第二個開關,輸入第個數碼管要顯示的數字編碼……一直到第四個,再到第一個,不停的循環……由於兩個數碼管點亮的時間間隔太小,人眼是分辯不出來的,叫人眼的視覺暫留現象。這種數碼管顯示方法叫動態掃描顯示,可以節省數據借口,但耗費CPU……

這樣理解,四個喝醉的人,站在一起,都不穩,你看到一個要倒了,趕快去扶一下,然後扶下一個,來回的扶四個人,你扶的夠快的話,四個人是可以站在那兒的……

『叄』 C語言單片機代碼 數碼管動態顯示

這里的16個元素代表的是從十六進制數0~9、A、B、C、D、E、F的段碼,根據什麼來填這些數組元素?那就要看你設計程序時定義數組的作用才能確定.table[1]對應的元素為0x06,是十六進制數,轉換成二進制數是00000110B,分別對應於數碼管的Dp、g、f、e、d、c、b、a 腳,所以在共陰數碼管上點亮b、c兩段,顯示的是數字1,其它同理。

『肆』 單片機數碼管顯示的數值編碼

8位數據匯流排,16位地址匯流排的CPU;具有布爾處理能力和位處理能力;採用哈佛結構,程序存儲器與數據存儲器地址空間各自獨立,便於程序設計;相同地址的64KB程序存儲器和64KB數據存儲器;

0-8KB片內程序存儲器(8031無,8051有4KB,8052有8KB,89C55有20KB);128位元組片內數據存儲器(8051有256位元組);

32根雙向並可以按位定址的I/O線;兩個16位定時/計數器(8052有3個);一個全雙工的串列I/O介面;多個中斷源的中斷結構,具有兩個中斷優先順序;片內時鍾振盪器。


(4)單片機數碼管顯示數據編碼擴展閱讀:

單片機工作的三個條件分別是電源、時鍾晶振、復位。當單片機不能正常工作時,我們首先就要檢查這三個條件,用電壓表或者萬用表檢測他的電源和接地腳,檢測兩個引腳之間的電壓是不是5V左右;對於時鍾晶體振盪有沒有正常工作。

最好用示波器進行檢測,看能否檢測到相應頻率的正弦波脈沖;復位檢測比較簡單,單片機的復位電平一般是高電平復位,單片機在接通電源的時候一般復位引腳上會出現5V左右的高電平,另外在按下復位按鍵時,復位引腳上也會出現高電平,用一般的電壓表或者萬用表都可以進行檢測。

『伍』 單片機數碼管顯示程序中code是什麼意思

俺來幫你解答:
程序中uchar
code
table[]
是定義一個數組table[]
用來存放顯示編碼的數據。
為了不丟失
把該數組中的數據定義在程序存儲器里。
code
是指數據存儲的空間指定為程序存儲器。
滿意的話
請選擇:滿意回答
呵呵

『陸』 單片機數碼管編碼問題

該程序為時間顯示,各個位逐位掃描顯示
void display(void)
{
if(P1_3==1)
{
P2=0xfe; ;秒 個位 片選
P0=dispcode[miao%10]; ;秒 個位 輸出
delay(1); ;延時
P2=0xfd; ;秒 十位 片選
P0=dispcode[miao/10]; ;秒 十位 輸出
delay(1); ;延時
P2=0xff; ;片選全部無效,及所有數碼管熄滅
P0=dispcode[10];
delay(1); ;延時
P2=0xf7; ;分鍾 個位 片選
P0=dispcode[fen%10]; ;分鍾 個位 輸出
delay(1); ;延時
P2=0xef; ;分鍾 十位 片選
P0=dispcode[fen/10]; ;分鍾 十位 輸出
delay(1); ;延時
P2=0xff; ;片選全部無效,及所有數碼管熄滅
P0=dispcode[10];
delay(1); ;延時
P2=0xbf; ;小時 個位 片選
P0=dispcode[shi%10]; ;小時 個位 輸出
delay(1); ;延時
P2=0x7f; ;小時 十位 片選
P0=dispcode[shi/10]; ;小時 十位 輸出
delay(1); ;延時
}
}

『柒』 51單片機的共陰數碼管怎麼顯示數字(c語言)

要讓51單片機共陰數碼管顯示數字,只需要將單片機的P2埠輸出數字對應的段碼即可。

以顯示數字「0」為例,c語言程序如下:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

//數碼管的段碼編碼

Uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void main(){//主函數

P0 = table[0];//顯示0,大家可以修改裡面的數據。

while(1);//程序不再執行其他步驟;

}

(7)單片機數碼管顯示數據編碼擴展閱讀:

數字0-9的對應段碼:

數字0 0x3f

數字1 0x06

數字2 0x5b

數字3 0x4f

數字4 0x66

數字5 0x6d

數字6 0x7d

數字7 0x07

數字8 0x7f

數字9 0x6f

『捌』 51單片機控制數碼管顯示不正常問題,為什麼後面4位數碼管1234和5678都是顯示亂碼呢該怎麼改

授人以魚不如授之以漁。先建立程序的一般結構,然後定義一個code數組,里邊存放數碼管顯示0~9的數據,之後定義一個display顯示函數,傳遞參數但不返回參數,然後將傳遞的參數(1234或5678)分解成4哥單個數,然後依次選擇要顯示的數碼管和數據,緊接消影和簡單暫時,這樣一個數碼管顯示就完成了,之後三個跟這個一樣。最後在主函數里調用這個顯示函數並傳遞參數。
希望我的回答能幫助到你。

『玖』 如何利用單片機讓4位數碼管顯示

程序如下(用的是STC89C52晶元):

#include<reg52.h>//52系列單片機頭文件

#defineucharunsignedchar

#defineuintunsignedint

uintx,y;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};//共陰極數碼管編碼

voiddisplay(uchar,uchar,uchar,uchar);//聲明子函數

voiddelay(int);//聲明子函數

voidmain()

{

while(1)

{

display(1,2,3,4);//主程序始終調用數碼管顯示子程序

}

}

voiddisplay(uchara,ucharb,ucharc,uchard)

{

P2=0xef;

P0=table[a];//給第一個數碼管送"a"

delay(1);//延時1ms

P2=0xdf;

P0=table[b];//給第二個數碼管送"b"

delay(1);//延時1ms

P2=0xbf;

P0=table[c];//給第三個數碼管送"c"

delay(1);//延時1ms

P2=0x7f;

P0=table[d];//給第三個數碼管送"d"

delay(1);//延時1ms

}

voiddelay(uintz)//延時子函數

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

(9)單片機數碼管顯示數據編碼擴展閱讀

led數碼管是由多個發光二極體封裝在一起組成「8」字型的器件,引線已在內部連接完成,只需引出它們的各個筆劃,公共電極。led數碼管常用段數一般為7段有的另加一個小數點,還有一種是類似於3位「+1」型。

位數有半位,1,2,3,4,5,6,8,10位等等,led數碼管根據LED的接法不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數碼管,除了它們的硬體電路有差異外,編程方法也是不同的。

『拾』 單片機數碼管如何顯示數字

從電路圖來看,是需要數碼管共陽極的,哪一位的三極體導通,則該位的數碼管就有被點亮的機會。

那麼七段碼數據,低電平的位對應該筆畫的LED亮。

大致代碼:

P2=0xff;

P0=s_code[1]; //0xF9

P2=0xfe;// P2.0=0

delay_ms();

P2=0xff;

P0=s_code[2]; //0xA4

P2=0xfd;// P2.1=0

delay_ms();

P2=0xff;

P0=s_code[3]; //0xB0

P2=0xfb;// P2.2=0

delay_ms();

P2=0xff;

P0=s_code[4]; //0x99

P2=0xf7;// P2.3=0

delay_ms();

閱讀全文

與單片機數碼管顯示數據編碼相關的資料

熱點內容
湛江中文編程數控系統代理 瀏覽:409
openglandroid書 瀏覽:170
奇妙組件安卓版叫什麼 瀏覽:729
微信授權什麼app權重最高 瀏覽:11
php循環數組foreach 瀏覽:78
zip和app有什麼區別 瀏覽:633
乖法快速演算法 瀏覽:871
日本程序員一年工資 瀏覽:199
出國做程序員怎麼樣 瀏覽:735
rar鎖定壓縮文件 瀏覽:871
安卓id號碼怎麼更換 瀏覽:524
db2如何連接伺服器資料庫 瀏覽:630
wordtopdf轉換 瀏覽:840
雲伺服器在哪設置ftp 瀏覽:622
黑客社會工程學攻擊pdf 瀏覽:998
專業中穎單片機程序開發 瀏覽:426
python多進程多線程實例 瀏覽:639
山東濟南生產伺服器雲主機 瀏覽:310
演算法員跳槽四年 瀏覽:730
秦九昭演算法v0怎麼求 瀏覽:384