#include "msp430x44x.h "
//-------------------------------------------------------------
//MSP-Test44x Demo led dishplay the timer
// 该程序是用F449驱动74HC373驱动LED显示时钟。
//
// MSP430F449
// -----------------
// /|\| XIN|-
// | | | 74HC373(1)&(2)
// --|RST XOUT|- ---------------
// | | | | LED
// | P3.1|------>|D0 | -------
// | . | . |. | | |
// | P3.7|------>|D7 | | |
// | P4.0|------>|bit /CE choose | -------->|-------|
// | P4.1|------>|seg /CE choose | -------->| |
// | | | | | |
// | | | | -------
// Lierda, Inc
// Built with IAR Embedded Workbench Version: 3.40a
// ID: MSP430-TEST44X
// REV: V2.0B。
// 1、硬件连接:必须连接所有短接器,同时,必须将拨动开关P1的P3和P4拨到ON的位置。
// 2、显示数据:实时时钟
//---------------------------------------------------------
//----------------------------------------------------------
/************************************************************************
**用法:
** 只需将要显示的数据送入 led_Buf[LED_IN_USE] 中即可在数码管上显示。
**
**************************************************************************/
#define LED_IN_USE 6
const unsigned char NUM_LED[17]={
0xd7, //*"0"*//
0x14, //*"1"*//
0xcd, //*"2"*//
0x5d, //*"3"*// //LED显示代码 LED 共阴
0x1e, //*"4"*//
0x5b, //*"5"*//
0xdb, //*"6"*//
0x15, //*"7"*//
0xdf, //*"8"*//
0x5f, //*"9"*//
0x9f,0xda,0xc3,0xcc,0xcf,0x8b, // a ~ f
0x00, //*"no"*//
};
unsigned char led_Buf[LED_IN_USE];// LED显示缓冲区 ,存放要显示数据
unsigned char led_Ctrl;
void init_LED(void){
char tmpv,i=0;
P3DIR = 0xff; // 设置 p3 输出
P3OUT = 0x00; // 设置 初始值为0
P4DIR |= 0x03; // 设置 p4.0,p4.1 输出
P4OUT &= 0xfc; // 设置初始值,使得P4.0=1,P4.1=1;
led_Ctrl = 0; // led_Ctrl用于控制那个LED可显示
for(tmpv=0;tmpv<LED_IN_USE;tmpv++)
{ // 初始化缓冲区
led_Buf[tmpv] = i;
i++;
}
}
void led_Display(){
unsigned tmp ,j;
tmp = 0x01;
P3OUT = NUM_LED [ led_Buf [led_Ctrl] ]; // 设置显示值
P4OUT |= 0x02; // 打开数据锁存器 ,P4.1=1;
P4OUT &= 0XFD; // 关闭数据锁存,P4.1=0;
P3OUT = ~(tmp<<led_Ctrl); // 设置哪只LED显示,使 对应显示位 的 位选 为 低 电平
P4OUT |= 0x01; // 打开控制锁存P4.0=1;
P4OUT &= 0XFE; // 关闭控制锁存,P4.0=0;
led_Ctrl= (led_Ctrl +1) % LED_IN_USE; // 设置下一个要显示的LED
for(j=0;j<450;j++); //用于设置每一位数码管的延时时间,这个数值数码管刚好不会闪
}
void main()
{
WDTCTL = WDTPW + WDTHOLD;
init_LED();
while(1)
{
led_Display();
}
}