数码管动态显示学号程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "msp430x44x.h "
unsigned char dispbuf[8]={5,1,6,0,0,1,5,6};
unsigned char dispbuf1[8]={11,11,11,11,11,11,11,11};
unsigned char seg[]={
0xd7,
0x14,
0xcd,
0x5d,
0x1e,
0x5b,
0xdb,
0x15,
0xdf,
0x5f,
0x00,
0x00
};
unsigned char neg[]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
int i=0;
int j=0;
int a=-1;
void qingping(void);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
BTCTL=BTDIV+BTIP2+BTIP1; // BT 0.5S中断
IE2|=BTIE; // enable BT int
TACTL=TASSEL0+TACLR; // Timer_a的时钟源为ACLK,
CCTL0=CCIE;
CCR0=100; // 100/32.768K=3ms中断 用于LED显示刷新频率
TACTL|=MC0;
_EINT();
P3DIR=0xff;
P4DIR=0x03;
}
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer (void)
{
if(a<8)a++;
else a=0;
if(a<8)
{
dispbuf1[7]=dispbuf1[6];
dispbuf1[6]=dispbuf1[5];
dispbuf1[5]=dispbuf1[4];
dispbuf1[4]=dispbuf1[3];
dispbuf1[3]=dispbuf1[2];
dispbuf1[2]=dispbuf1[1];
dispbuf1[1]=dispbuf1[0];
dispbuf1[0]=dispbuf[a];
}
else qingping();
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
if(i<5)i++;
else i=0;
P4OUT=BIT0;
P3OUT=neg[i];
P4OUT&=~BIT0;
P4OUT=BIT1;
P3OUT=seg[dispbuf1[i]];
P4OUT&=~BIT1;
}
void qingping(void)
{
int j;
for(j=0;j<6;j++)
{
dispbuf1[j]=11;
}
}