例程如下:
/**********************************************
程序功能:在八位数码管上显示八个数字01234567
-----------------------------------------------
测试说明:观察数码管显示
***********************************************/
#include <msp430x14x.h>
typedef unsigned char uchar;
#define wei_h P5OUT|= BIT5
#define wei_l P5OUT&= ~BIT5
#define duan_l P6OUT &= ~BIT6
#define duan_h P6OUT |= BIT6
//数码管7位段码:0--f
uchar scandata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//记录显示位数的全局变量
uchar cnt = 0;
/********************主函数********************/
void main(void)
{
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
WDTCTL = WDT_ADLY_1_9; // 设置内部看门狗工作在定时器模式,1.9ms中断一次
IE1 |= WDTIE; // 使能看门狗中断
P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换
_BIS_SR(LPM3_bits + GIE); //CPU进入LPM3低功耗模式,同时打开全局中断
}
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
P4OUT = scandata[cnt]; //输出段选信号
duan_h;
duan_l;
P4OUT = ~(1 << cnt); //输出位选信号
wei_h;
wei_l;
cnt++; //位计数变量在0~5之间循环
if(cnt == 8) cnt = 0;
}
哪位大神能告知一下问题一为什么我感觉提供的开发板原理图的数码管的段选和位选,在同时选中时感觉会有冲突,比如说位选0x3f,和段选0x4f;问题二或者说根据我的这个原理图段选和位选可以不同时选?感觉中断函数的这一块不是特别明白。这个数码管应该是共阴极的吧。
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
P4OUT = scandata[cnt]; //输出段选信号
duan_h;//打开锁存器
duan_l;//关闭锁存器,数据依然在
P4OUT = ~(1 << cnt); //输出位选信号
wei_h;//同理
wei_l;
一周热门 更多>