MSP430-四位数码管及其代码讲解

对于平常的七段数码管我们应该是非常熟悉的,接出来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--);
}
原文地址:https://www.cnblogs.com/CaiFengYuanXing/p/13616536.html