一、數碼管介紹:
1.什么是數碼管?
多個LED組合成8字顯示器。
2.一位數碼管的引腳(只有一個8):
數碼管的引腳為1-10,其中公共極為3,8,其余八位分別對應一個二極管,如下圖:
若3,8為公共陰極,則各引腳接高電平1為亮;
若3,8為公共陽極,則各引腳接低電平0為亮;
3.多位數碼管的引腳(四個8):
其中每個8的對應位置(如A),都鏈接在一個引腳上,故只需要12(4+8)個引腳。
4.多位數碼管的缺點與解決:
缺點:因為4個8的同一位置鏈接在同一引腳,故只能顯示同一數字(如同時顯示四個1)。
解決:動態數碼管,利用人眼分辨率低,快速切換四個數字,讓每個數字高速頻閃,欺騙眼睛。
(即第一個數字顯示1,立刻關閉第一個,并讓第二個顯示2 。。。)
二、靜態數碼管實戰:LED6顯示6
1.51單片機數碼管端口介紹:
? ?由P2_2 - P2_4控制8個8的亮滅,三個端口,二進制轉十進制,2^3=8,遵循CBA。
(例:101(CBA)=5,使Y5端口對應LED6亮)
由P0_0 - P0_7控制每個8的每個二極管亮滅。
2.實戰代碼:
void main()
{P2_4 = 1;P2_3 = 0;P2_2 = 1;P0 = 0x7D;// 0111 1101 分別對應P0_7-P0_0,注意是倒著的while (1);
}
3.進階代碼:設計子函數,可直接指定對應位置顯示對應數字:
void Nixie(unsigned char Location, int Number)
{switch (Location){case 1:P2_4 = 1; P2_3 = 1; P2_2 = 1; break;case 2:P2_4 = 1; P2_3 = 1; P2_2 = 0; break;case 3:P2_4 = 1; P2_3 = 0; P2_2 = 1; break;case 4:P2_4 = 1; P2_3 = 0; P2_2 = 0; break;case 5:P2_4 = 0; P2_3 = 1; P2_2 = 1; break;case 6:P2_4 = 0; P2_3 = 1; P2_2 = 0; break;case 7:P2_4 = 0; P2_3 = 0; P2_2 = 1; break;case 8:P2_4 = 0; P2_3 = 0; P2_2 = 0; break;}unsigned char NixieTable[10] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };P0 = NixieTable[Number]; Delayms(1);P0 = 0x00;//顯示一下后清零
}
三、動態數碼管實戰:顯示123:
void main()
{while (1){Nixie(1, 1);Delayms(200);Nixie(2, 2);Delayms(200);Nixie(3, 3);Delayms(200);}
}