//******************************************************************************
// 单片机型号: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;
}
文章评论(0条评论)
登录后参与讨论