写了一个24小时计时的程序,有错误,麻烦帮我看看哪里有问题

2019-03-24 09:33发布

#include<msp430x43x.h>
#define uint unsigned int
#define uchar unsigned char
#define hourH LCDMEM[10]
#define hourL LCDMEM[11]
#define miniteH LCDMEM[12]
#define miniteL LCDMEM[13]
#define secondeH LCDMEM[0]
#define secondeL LCDMEM[1]
#define KEY1 BIT2
#define KEY2 BIT3
uchar seconde=0;//秒
uchar minite=0;//分
uchar hour=0; //时
uchar hfsec;
int setflag;
char tab[10]={0xbf,0xb0,0xdb,0xf9,0xf4,0x7d,0x7f,0xb8,0xff,0xfd};//下0 1 2 3 4 5 6 7 8 9,带第八位
char lcd_sed[10]={0xaf,0xa0,0xcb,0xe9,0xe4,0x6d,0x6f,0xa8,0xef,0xed};//下0 1 2 3 4 5 6 7 8 9 不带第八位
char lcd_tab[3]={0x00,0x50,0x60};//时钟的显示 时 的高位
void delay(uint k)
{
  uint j,l;
  for(j=0;j<k;j++)
    for(l=0;l<100;l++);
}
/****LCD初始化*************/
void LCD_clear(){
   unsigned char i;
   for(i=0;i<20;i++)
     LCDMEM[i]=0x00;
}
void P2_Init(void)
{
P2DIR&=~(KEY1|KEY2);
P2IE|=KEY1|KEY2;         //开中断
P2IES|=KEY1|KEY2;        //下降沿
}
void LCDInit()
{
  WDTCTL=WDTPW+WDTHOLD;
  LCDCTL=0XFD;
  BTCTL=0X2d;            //定时器时钟设置 中断频率为2^15/256/64
  SCFQCTL=SCFQ_64K;
  P5SEL=0XFC;
  P4SEL|=0XFC;           //P4端口功能选择外接模块
  LCD_clear();
}
/*********LCD全部置零********/
void Resit()
{
  for(int i=0;i<20;i++)
    LCDMEM[i]=0x00;
}
void display()//
{   
    secondeL=lcd_sed[seconde%10];//秒低位
    secondeH=lcd_sed[seconde/10];//秒高位
    miniteL=lcd_sed[minite%10];//分的低位
    miniteH=lcd_sed[minite/10];//分的高位
    hourL=lcd_sed[hour%10];//时的低位
    hourH=lcd_tab[hour/10];//时的高位
}
void main()
{
  WDTCTL=WDTPW+WDTHOLD;
  FLL_CTL0|=XCAP18PF;
  IE2|=0X80;
  P2_Init();
  LCDInit();
  _EINT();         //打开全局中断
  for(;;)
  {
    LPM3;
  }
}
#pragma vector=PORT2_VECTOR   //P2端口中断子程序
__interrupt void PORT2_ISR(void)
{
  LPM3_EXIT;
  if(P2IFG&KEY1)
  {
    delay(200);
    if(P2IFG&KEY1)
    {
    setflag++;
    setflag&=0x07;
    display();
    P2IFG&=~KEY1;
    }
  }
  else if(P2IFG&KEY2)
  {
    delay(200);
    {
      if(P2IFG&KEY2)
      {
       switch(setflag)
      case 1:
        hour++;
        if(hour==24)
          hour=0;
        hourL=lcd_sed[hour%10];
        hourH=lcd_sed[hour/10];
       break;
       case 2:
        minite++;
        if(minite==60)
          minite=0;
        miniteL=lcd_sed[minite%10];
        miniteH=lcd_sed[minite/10];
        break;
      case 3:
        seconde++;
        if(seconde==60)
          seconde=0;
        secondeH=lcd_sed[seconde/10];
        secondeL=lcd_sed[seconde%10];
      default:
        break;
      }
    }
  }
    P2IFG&=~KEY2;
  }


#pragma vector=BASICTIMER_VECTOR  //P2端口中断子程序
__interrupt void BT_ISR(void)
{
  LPM3_EXIT;
  hfsec++;
  hfsec&=0x01;    //满2进1
  LCDM12^=0x10;   //秒点闪烁,不改变其他位
  if(setflag)
  {
    switch(setflag)
    {
    case 1:
      hourH=hfsec*lcd_tab[hour/10];
      hourL=hfsec*lcd_sed[hour%10];
      break;
    case 2:
     miniteH=hfsec*lcd_sed[minite/10];
     miniteL=hfsec*lcd_sed[minite%10];
      break;
    case 3:
      secondeH=hfsec*lcd_sed[seconde/10];
      secondeL=hfsec*lcd_sed[seconde%10];
    default:
      break;
    }
  }
  else if(hfsec)
  {
    seconde++;
  if(seconde==60)
  {
    seconde=0;
    minite++;
    if(minite==60)
    {
      minite=0;
      hour++;
      if(hour==24)
        hour=0;
    }
  }
  display();
}
}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
jiangjian0206
2019-03-25 03:25
代码 太大 了,没有注释

一周热门 更多>

相关问题

    相关文章