原创 [博客大赛]msp430控制数码管动态显示源程序,短小精悍

2013-5-3 08:59 1436 11 11 分类: MCU/ 嵌入式

 

//******************************************************************************
//  单片机型号:MSP430F系列
//
//  描述:在八位数码管上显示八个数字01234567
//  时钟:ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz
//  示意:
//                      MSP430F系列
//                    --------------------
//                   |                   XIN|-
//                   |                           |
//                -->|RST    XOUT  |-
//                   |                           |
//                  -|P4.0                  |-
//                   |…                       |
//                   |P4.7                  |-
//  7SEG-MPX8-CC-BLUE   |            
//                   |P5.0                  |
//                   |…                      |
//                  -|P5.7                 |
//
//
//******************************************************************************
 
#include  
 
typedef unsigned char uchar;
typedef unsigned int uint;
 
uchar scandata[16] = {0x3f,0x06,0x5b,0x4f,
                      0x66,0x6d,0x7d,0x07,
                      0x7f,0x6f,0x77,0x7c,
                      0x39,0x5e,0x79,0x71};  // 数码管7位段码:0~F
uchar cnt = 0;                               // 记录显示位数的全局变量     
 
void main(void)
{
  WDTCTL = WDT_ADLY_1_9;                     // 设置内部看门狗工作在定时器模式,1.9ms
  IE1 |= WDTIE;                              // 使能看门狗中断
  
  P4DIR = 0xff;                              // 设置P4,P5的IO方向为输出
  P5DIR = 0xff;
  
  P4OUT = 0x00;                              // 设置P4,P5的输出初值
  P5OUT = 0xff; 
  _BIS_SR(LPM0_bits + GIE);                  // CPU进入低功耗模式LPM3,同时打开全局中断
}
 
//******************************************************************************
// 函数名称:watchdog_timer
// 功    能:看门狗中断服务函数,在这里输出数码管的段选和位选信号
// 参    数:无
// 返 回 值:无
//******************************************************************************
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
  P5OUT = 0xff;        
  P4OUT = scandata[cnt];                     // 输出段选信号
  P5OUT &= ~(1 << cnt);                      // 输出位选信号
  
  cnt++;                                     // 位计数变量在0~7之间循环
  if(cnt == 8) cnt = 0;
}
 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条