智能车制作

标题: 碰到一个很好玩的问题、、高手进来看看咯 [打印本页]

作者: a959845298    时间: 2011-9-30 21:51
标题: 碰到一个很好玩的问题、、高手进来看看咯
我只把代码的位置交换了一下 却出现了不同的编译结果 请看下面
unsigned char x=0;
      flag=0;
      unsigned char i,j,temp,tab[]={0xfe,0xfd, 0xfb,0xf7};
报告错误

      然后下面就可以通过
      unsigned char x=0;
      unsigned char i,j,temp,tab[]={0xfe,0xfd, 0xfb,0xf7};
      flag=0;
作者: a959845298    时间: 2011-9-30 21:53
我的原程序中断查询键盘
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

unsigned char a[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F ,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76};
unsigned char flag;
void delay(unsigned char n)
{
  unsigned char j;
  for(j=1000;j>0;j--)
    for(n;n>0;n--);
}         




void main(void)
{
  TIOS_IOS0=0;
  TCTL4=0x01;
  TIE_C0I=1;//开通道0,上升沿捕捉
  DDRB=0xff;
  DDRK=0x0f;
   
  
  TSCR1_TEN=1;
  


        EnableInterrupts;


  for(;;) {
    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 tim0()
{
  DisableInterrupts;
  TFLG1_C0F=1;
  PORTK=0x0f;
  delay(5);
  if(PORTK&0xf0)
  {
      unsigned char x=0;
      unsigned char i,j,temp,tab[]={0xfe,0xfd, 0xfb,0xf7};
      flag=0;
      for(i=0;i<4;i++)
        {
          x=0;
          temp=0x01;
          PORTK=tab[i];
          delay(10);
          for(j=0;j<4;j++)
          {
            if(PORTK&temp)
              x=i*4+j;
            flag=1;
            break ;
              
          }
          temp=temp<<1;
          if(flag=1)
            {
              break;
            }
            
        }
      PORTB=a[x];
        
  }
  
  
  EnableInterrupts;
   
}
作者: a959845298    时间: 2011-9-30 21:58
中间程序有点小错误、、、if(PORTK&temp)
              x=i*4+j;
            flag=1;
            break ;
漏了一个括号
作者: wangzm    时间: 2011-9-30 22:57
回复 1# a959845298


    在c中,要先定义变量,给所有变量定义完后,才能做其他的,比如给变量赋值,你的报错的程序中,第一条为定义变量,第二条为给变量赋值,第三条又为定义变量,所以是错的。而没报错的程序中,前两条为定义变量,第三条为给变量赋值,所以是正确的。
作者: tongyonghua123    时间: 2011-10-6 22:53
楼上说的好
作者: wscjun    时间: 2011-10-30 21:23
学习
作者: starjiajia    时间: 2011-11-1 22:29
这与开发环境有关
作者: chiusir    时间: 2011-11-8 11:47
函数内部一般需要先声明变量,然后才能运算。在函数外部全局部分,只能声明及初始化,不能做运算,一般都是这种情况,呵呵。




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2