📄 数码管 数码时钟.txt
字号:
#include "msp430x22x4.h"
int s,d, res;
int TAB[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xBF};
int *p00=TAB,*p1=TAB,*p2=TAB,*p3=TAB,*p4=TAB,*p5=TAB,*p6=TAB ,*p7=(TAB+10),*p8=(TAB+10);
int *p01=(TAB+7),*p02=(TAB+1),*p03=TAB,*p04=(TAB+8),*p05=TAB,*p06=(TAB+2),*p07=(TAB+6),*p08=TAB;
void keyprocess( void );
void init_port( void );
void Delay(void);
void main(void)
{
init_port();
while(1)
{
if (p00==(TAB+5)) //显示日期
{
for(s=0;s<=200;s++)
{
// if( res==6) s=0,p00=TAB;
P4OUT= 0X01;
P3OUT = *p01;
Delay();
P4OUT=0X02;
P3OUT = *p02;
Delay();
P4OUT=0X04;
P3OUT = *p07; //if(d==0) s=0;
Delay();
P4OUT=0X08;
P3OUT = *p03;
Delay();
P4OUT=0X10;
P3OUT = *p04;
Delay();
P4OUT=0X20;
P3OUT =*p08;
Delay();
P4OUT=0X40;
P3OUT = *p05;
Delay();
P4OUT=0X80;
P3OUT=*p06;
Delay();
}
if(res==5) p00=TAB;
}
else //ooooooooooooooooooo
{ //显示时间
P4OUT=0X01;
P3OUT = *p1;
Delay();
P4OUT=0X02;
P3OUT = *p2;
Delay();
P4OUT=0X04;
P3OUT =0xBF; //两点
Delay();
P4OUT=0X08;
P3OUT = *p3;
Delay();
P4OUT=0X10;
P3OUT = *p4;
Delay();
P4OUT=0X20;
P3OUT =0xBF; //两点
Delay();
P4OUT=0X40;
P3OUT=*p5;
Delay();
P4OUT=0X80;
P3OUT=*p6;
Delay();
}
}
}
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_VECTOR1(void)
{ _NOP();
Delay();
keyprocess(); //BIC_SR_IRQ(LPM3_tits+GIE);
P1OUT=0x00;
P1IFG=0X0;
}
void Delay(void) //延时子程序
{ int i;
for(i=200;i>0;i--);
}
void init_port(void) //初始化子程序
{
WDTCTL=WDTPW+WDTHOLD;
BCSCTL1 =CALBC1_1MHZ;
DCOCTL =CALDCO_1MHZ;
P1DIR=0;
P1SEL=0;
P1DIR=0x0f;
P1OUT=0x00;
P1IE =0;
P1IES =0;
P1IFG =0;
P1IE =0xf0;
P1IES =0xF0;
P4SEL=0;
P3SEL=0;
P4DIR =0xff;
P3DIR =0XFF;
TACTL=TASSEL_1+TACLR;
TACCR0 = 32768;
TACTL |=MC0;
TACCTL0 |=CCIE;
_BIS_SR(GIE);
}
void keyprocess(void ) //按键判断程序
{
P1OUT=0x0e;
if((P1IN&0xf0)==0xe0)res=0;
else if((P1IN&0xf0)==0xd0)res=1;
else if((P1IN&0xf0)==0xb0)res=2;
else if((P1IN&0xf0)==0x70)res=3;
else
{
P1OUT=0x0d;
if((P1IN&0xf0)==0xe0)res=4;
else if((P1IN&0xf0)==0xd0)res=5;
else if((P1IN&0xf0)==0xb0)res=6;
else if((P1IN&0xf0)==0x70)res=7;
}
if(res==6) p00=(TAB+5);
if(res==5||p00==(TAB+5))
{
p00=(TAB+5); //年月日
if(res==1)
{
p01++; //修正日
if(p01==(TAB+10)) p01=TAB,p02++;
if(p02==(TAB+3)&&p01==(TAB+2) ) p01=TAB,p02=TAB;
}
else if(res==2)
{
p07++; //修正月
if(p07==(TAB+10)) p07=TAB,p03++;
if(p03==(TAB+1)&&p07==(TAB+3) ) p03=TAB,p07=TAB;
}
else if(res==3)
{
p04++; //修正年
if(p04==(TAB+10)) p04=TAB,p08++;
if(p08==(TAB+10))
{ p04=TAB;
p08=TAB;
p05++;
if(p05==(TAB+10)) p05=TAB,p06++;
if(p06==(TAB+10)&&p05==(TAB+5) ) p5=TAB,p6=TAB;
}
}
}
else
{
if (res==0)
TACCTL0 &=~CCIE; //关定时中断
else if(res==1)
{p1++; //修正秒
if(p1==(TAB+10)) p1=TAB,p2++;
if(p2==(TAB+6)&&p1==(TAB+1) ) p1=TAB,p2=TAB;
}
else if(res==2)
{p3++; //修正分
if(p3==(TAB+10)) p3=TAB,p4++;
if(p4==(TAB+6)&&p3==(TAB+1) ) p3=TAB,p4=TAB;
}
else if(res==3)
{ p5++; //修正时
if(p5==(TAB+10)) p5=TAB,p6++;
if(p6==(TAB+2)&&p5==(TAB+5) ) p5=TAB,p6=TAB;
}
}
if(res==4) TACCTL0 |=CCIE;
}
#pragma vector = TIMERA0_VECTOR //ccr0中断服务
__interrupt void ta0_isr(void)
{
P3OUT^=BIT7;
p1++;
if(p1==(TAB+10))
{ p1=TAB;
p2++;
if(p2==(TAB+6))
{
p2=TAB;
p3++;
if(p3==(TAB+10))
{ p4++;
p3=TAB;
if(p4==(TAB+6))
{p5++;
p4=TAB;
if(p5==(TAB+10))
{ p6++;
p5=TAB;
if(p6==(TAB+2))
{ p01++;
p6=TAB;
if(p01==(TAB+10))
{ p02++;
p01=TAB;
if(p02==(TAB+3))
{ p07++;
p02=TAB;
if(p07==(TAB+1))
{ p03++;
p07=TAB;
if(p03==(TAB+2))
{ p04++;
p03=TAB;
if(p04==(TAB+10))
{ p08++;
p04=TAB;
if(p08==(TAB+10))
{ p05++;
p08=TAB;
if(p05==(TAB+10))
{ p06++;
p05=TAB;
if(p06==(TAB+10)&&p05==(TAB+10)) p1=TAB,p2=TAB,p3=TAB,p4=TAB,p5=TAB,p6=TAB;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -