1. 如何利用單片機讓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--);
}
(1)數碼管顯示b單片機擴展閱讀
led數碼管是由多個發光二極體封裝在一起組成「8」字型的器件,引線已在內部連接完成,只需引出它們的各個筆劃,公共電極。led數碼管常用段數一般為7段有的另加一個小數點,還有一種是類似於3位「+1」型。
位數有半位,1,2,3,4,5,6,8,10位等等,led數碼管根據LED的接法耐昌不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數碼管,除了它們的硬體電路有差異外,編程方法也是不同的。
2. 單片機數碼管顯示的數值編碼
昏,你學過數字電路么?關於7段數碼管的部分(其實我們用的是8段),數碼管中有8斷二極體,從最上到小數點,分別是a,b,c,d,e,f,g,h(這個是小數點),8個數碼管統一接在地線或者高電平,所以只要看二極體的那一面接為啥,這也就是什麼共陽極和共陰極了,你可以手工自己面一下碼,比如說你上面所說的共陽極吧,如果想要顯示1的話,是不是b段,c段為低電平呀,其他為高呀,對應的編碼是不是1111
1001.(最低位是a,次位為b,後c,。。。。)
,那不是0xf9么?。。。。
3. 單片機數碼管顯示的原理(CA CC) 字型的顯示 動態顯示的原理 大概的說下 採納的再加分
數碼管,舉個例子,8段共陰極數碼管。其實它的結構很簡單,就是8個LED發光二極體,這8個LED發光二極體的正極就是a b c d e f g dp(小數點)這8個,負極就8個LED連接在一起。
單片機I/O口比如P0什麼的不是有8個?正好連接到8個發光二極體的正極。然後把數碼管負極接地。當你要顯示數字,比如2時,2對應a b d e g這幾個字母對應的LED亮,所以只要單片機接到abdeg的IO口置高電平就行了,正高負低,LED不就亮了?對應的LED亮了,不就顯示對應的數字了?
至於動態顯示,一般是8個數碼管吧?段的介面不變,還是P0口,而它們的負極呢,不再接地了,而是接到P2口(P1什麼的都行)。P2口來控制哪個數碼管亮。只有當P2口為低電平的時候,LED才有可能導通並亮。
比如你要顯示12345678,你可以先把P0口的段碼調到1,也就是bc亮,P1.1、P1.2置高電平,這樣就是顯示1了,然後就是位選了,1是顯示在第一位,所以你應該把P2.0置低電平,其他位置高電平,這樣,第一個數碼管就顯示1了。顯示2,則把P2.1拉低,其他拉高。這樣弄一個循環,數碼管不就從1依次顯示到8了?
不過由於單片機執行指令很快,如果直接12345678這樣顯示,由於太快,會導致數碼管很暗,所以,你可以在切換數碼管的時候,加上一點點的延時,不過不能太長,不然就會閃了。當然你也可以把顯示程序放到中斷里,比如沒過10ms就顯示一次,這樣會更好一點。
懂了嗎?
4. 51單片機怎樣用鍵盤控制數碼管顯示
51單片機怎樣用鍵盤控制數碼管顯示的方法。
如下參考:
1.首先,編寫代碼並點亮數碼管。