打印

初学困惑,不吝赐教

[复制链接]
1677|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mengzs|  楼主 | 2007-3-27 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
se, AD, AN, fm, go
请那位大侠指点,小弟初入门墙不知这段程序中为何set的值只能加到1而不能加到大于1。 
void scan_key(void) 

 uchar  set 
 if(add==0)//按键进入 
 { delay();//延时10ms 
   delay(); 
   if(add==0) 
   { fmq=0; 
     set=set+1;// 
     if(set>=6)set=6;//档位加1 
     
    F0:if(add==0)goto F0; 
   } 
 } 

相关帖子

沙发
陈双君| | 2007-3-27 10:06 | 只看该作者

少用GOTO语句。

少用GOTO语句。初看起来没有问题,过一下我拿回去好好的看一下,是不是语句上真的有问题。

使用特权

评论回复
板凳
tdwmcu| | 2007-3-27 10:29 | 只看该作者

逻辑错误

或者中间漏了一句对add的操作,比如:add++,否则程序就会死循环在 F0:if(add==0)goto F0; 这句了
另:F0:if(add==0)goto F0; 可改为while(add == 0);

使用特权

评论回复
地板
mengzs|  楼主 | 2007-3-27 10:35 | 只看该作者

谢谢两位大哥!我再试试。

使用特权

评论回复
5
mengzs|  楼主 | 2007-3-28 14:09 | 只看该作者

按上方法用仿真器观察也不行,用汇编这样编成没问题。

不知用c语言怎样的格式可以正确编译,请指点。

使用特权

评论回复
6
popmu| | 2007-3-28 16:30 | 只看该作者

标号错误啊F0

F0应该在第2个if前面啊,否则set怎么会大于1呢,肯定只能=1啊:)

使用特权

评论回复
7
wb20022046| | 2007-3-28 17:06 | 只看该作者

我觉得楼主这样写可以啊

#define uchar unsigned char 
#define uint unsigned int 
#define ulong unsigned long 

#include <REG52.H>

sbit add   = P1^0;

void scan_key(void) 

  uchar  set;
  if(add==0)//按键进入 
  { 
    if(add==0) 
    { 
      set=set+1;// 
      if(set>=6)set=6;//档位加1 
      while(add==0);
    } 
  } 


main ()
{
  while(1)
  {
    scan_key();
  }
}

我用KEIL仿真了一下,可以实现啊

使用特权

评论回复
8
mengzs|  楼主 | 2007-3-29 16:15 | 只看该作者

6楼的大哥理解错了!

6楼的大哥理解成循环加数值了,这是一个档位计数程序,当按键按下set值加一,按一次只能加一档,最大值可加到6。再按7楼大哥的方法一试。

使用特权

评论回复
9
popmu| | 2007-3-29 16:19 | 只看该作者

不是理解错误啊,没给主函数,谁知道是按一下值+1啊:)

使用特权

评论回复
10
eastbest| | 2007-3-29 16:43 | 只看该作者

把set改为全局变量吧!

使用特权

评论回复
11
pttangpt| | 2007-3-30 00:51 | 只看该作者

改为全局变量

对,将set改为全局变量,在主函数中赋初值0肯定可以。

使用特权

评论回复
12
mengzs|  楼主 | 2007-3-30 10:15 | 只看该作者

按7楼大哥的方法用仿真器观察了一下,OK。

七楼大哥的主函数中加了while语句:
main ()
{
  while(1)
  {
    scan_key();
  }
}
若将while语句去掉变成如下:
main ()
{
      scan_key();
 }
这样set值就不能加多了。用反汇编观察前者在主程序中多了一条sjmp指令,是程序运行完成后跳到开始从头运行。后者没有simp指令当程序运行完成后不能从头开始,因此set值价不上去。 
不知这样解释是否准确,望各位指教。
再按九、十楼两位大哥的方法试一试。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

69

帖子

0

粉丝