对于平常的七段数码管我们应该是非常熟悉的,接出来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--); }