智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2164|回复: 7
打印 上一主题 下一主题

碰到一个很好玩的问题、、高手进来看看咯

[复制链接]

34

主题

214

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2544
威望
1322
贡献
564
兑换币
175
注册时间
2011-7-12
在线时间
329 小时
跳转到指定楼层
1#
发表于 2011-9-30 21:51:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我只把代码的位置交换了一下 却出现了不同的编译结果 请看下面
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;

34

主题

214

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2544
威望
1322
贡献
564
兑换币
175
注册时间
2011-7-12
在线时间
329 小时
2#
 楼主| 发表于 2011-9-30 21:53:10 | 只看该作者
我的原程序中断查询键盘
#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;
   
}
回复 支持 反对

使用道具 举报

34

主题

214

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2544
威望
1322
贡献
564
兑换币
175
注册时间
2011-7-12
在线时间
329 小时
3#
 楼主| 发表于 2011-9-30 21:58:42 | 只看该作者
中间程序有点小错误、、、if(PORTK&temp)
              x=i*4+j;
            flag=1;
            break ;
漏了一个括号
回复 支持 反对

使用道具 举报

6

主题

35

帖子

0

精华

版主

Rank: 9Rank: 9Rank: 9

积分
4948
威望
2274
贡献
2584
兑换币
2
注册时间
2010-6-8
在线时间
45 小时
4#
发表于 2011-9-30 22:57:44 | 只看该作者
回复 1# a959845298


    在c中,要先定义变量,给所有变量定义完后,才能做其他的,比如给变量赋值,你的报错的程序中,第一条为定义变量,第二条为给变量赋值,第三条又为定义变量,所以是错的。而没报错的程序中,前两条为定义变量,第三条为给变量赋值,所以是正确的。
回复 支持 反对

使用道具 举报

16

主题

352

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2535

优秀会员奖章活跃会员奖章

QQ
威望
888
贡献
1261
兑换币
10
注册时间
2011-8-31
在线时间
193 小时
5#
发表于 2011-10-6 22:53:17 | 只看该作者
楼上说的好
回复 支持 反对

使用道具 举报

2

主题

148

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1922
QQ
威望
987
贡献
311
兑换币
50
注册时间
2011-3-25
在线时间
315 小时
6#
发表于 2011-10-30 21:23:37 | 只看该作者
学习
回复 支持 反对

使用道具 举报

7

主题

182

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1558
威望
893
贡献
449
兑换币
334
注册时间
2009-9-22
在线时间
108 小时
7#
发表于 2011-11-1 22:29:16 | 只看该作者
这与开发环境有关
回复 支持 反对

使用道具 举报

80

主题

1045

帖子

0

精华

跨届大侠

北京龙邱智能科技有限公司

Rank: 10Rank: 10Rank: 10

积分
10332

论坛元老奖章

QQ
威望
2905
贡献
6151
兑换币
4515
注册时间
2008-6-7
在线时间
638 小时
8#
发表于 2011-11-8 11:47:48 | 只看该作者
函数内部一般需要先声明变量,然后才能运算。在函数外部全局部分,只能声明及初始化,不能做运算,一般都是这种情况,呵呵。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-18 16:31 , Processed in 0.063055 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表