2388|5

961

帖子

24

TA的资源

纯净的硅(初级)

楼主
 

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

#include
#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     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();
}
}

最新回复

楼主应该把提示错误的信息帖上来才对。编译器有错误时,都会把错误原因列出来,最起码也给个错误代码。 由此来找错误的原因是很方便的。  详情 回复 发表于 2016-2-22 22:02
 
点赞 关注
个人签名这个人不懒,但是仕么都没留下

回复
举报

961

帖子

24

TA的资源

纯净的硅(初级)

沙发
 
然后这个是错误的地方  
break;
case 2:

break;
  case 3:

default:
break;这六处错误

AH}LL9O10~Z75WH68ATF7GD.png (14.41 KB, 下载次数: 0)

AH}LL9O10~Z75WH68ATF7GD.png
 
个人签名这个人不懒,但是仕么都没留下
 

回复

6040

帖子

196

TA的资源

版主

板凳
 
switch(setflag)
      case 1:


switch 语句后面,少大括号。

点评

谢谢了  详情 回复 发表于 2016-2-22 12:36
 
 
 

回复

961

帖子

24

TA的资源

纯净的硅(初级)

4
 
lcofjp 发表于 2016-2-22 12:32
switch(setflag)
      case 1:


switch 语句后面,少大括号。

谢谢了
 
个人签名这个人不懒,但是仕么都没留下
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

5
 
代码 太大 了,没有注释
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

6
 
楼主应该把提示错误的信息帖上来才对。编译器有错误时,都会把错误原因列出来,最起码也给个错误代码。

由此来找错误的原因是很方便的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表