對於平常的七段數碼管我們應該是非常熟悉的,接出來8根線控制每一個燈的亮滅,那對於四位數碼管是如何用12根線來控制四個燈的亮滅的呢?下邊先講解一下共陽數碼管原理,然后附上MSP430的代碼
首先是他的接線原理圖(自己畫的比較丑)
原理圖
先忽略上邊的三極管的電路,單獨對這四個數碼管來說,我們是把他們的線都總到一起,本來是共接出8*4根線,現在只接出8根線(相同類型的),我們給他通電時,不考慮控制端的話他們是可以四個都會亮的,現在加上的控制端,即通過四個控制端來控制三極管的導通與截至,這樣每次上邊只會出現一個或者多個數碼管顯示同一個數字。
這時候可能有人有疑問了,既然顯示一次都是同一個數字那么比方說12怎么顯示的 ,其實數碼管是先在第一個管腳顯示1,再在第二個管腳顯示2,這樣來回循環,選好切換的時間延時,就可以在人體視覺上產生1和2同時顯示的錯覺。
引腳圖
從左下方,逆時針依次增加
控制端:12 9 8 6 接到三極端集電極
接線端: 11 7 4 2 1 10 5 3 需要按照這樣的順序接出來
整體圖(摘自網絡,侵權必刪)
實物圖(MSP430+自己外接的數碼管電路)
依次顯示1,2,3,4的程序
P3的低四位做控制端,P2做數碼管的顯示
#include <MSP430x14x.h> //共陽數碼管的顯示表 unsigned char table[16]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e}; //控制位依次循環 unsigned char sel[4]={0x0E,0x0D,0x0B,0x07}; void delay(void); void main( void ) { unsigned char i; // 用於上邊兩個表的索引 WDTCTL = WDTPW + WDTHOLD;//關閉開門狗 P3DIR=0XFF;P3OUT=0X00; P2DIR=0XFF;P2OUT=0XFF; while(1) { for(i=0;i<4;i++) { P3OUT=sel[i]; //控制位依次開啟 P2OUT=table[i+1];//顯示從1到4依次顯示 delay(); delay(); delay(); delay(); delay(); delay(); delay(); } } } void delay(void) { unsigned int tmp; for(tmp = 12000;tmp > 0;tmp--); }