程序跳转问题

[复制链接]
3060|13
 楼主| hanwe 发表于 2011-4-11 20:24 | 显示全部楼层 |阅读模式
se, ge, ps, AN, ck
程序运行后,执行 Open_Lock()或者 psw_change()时,只要当flag_tz=0时,怎样从当前运行的函数中回到主程序呢?程序如下:
void main()
{
  while (1)
  {
     dis_Ds1302();   
     switch (getpsw())
      {
      case 0:
              Open_Lock();   
              delay1(50);   
               break;
      case 1:
              psw_change();  
              delay1(50);
              break;
      case 2:
              dis_again();  
              delay1(50);
              break;
      case 3:
             flag_tz=0;  //返回
             break;   
     default: break;
     }
  }
}
yufe 发表于 2011-4-11 20:29 | 显示全部楼层
“当前运行的函数”是指Open_Lock()和 psw_change()吗?
 楼主| hanwe 发表于 2011-4-11 20:50 | 显示全部楼层
是呀,只要满足flag_tz=0时,程序就跳转回主程序,好像不能用goto。。。
llia 发表于 2011-4-11 21:27 | 显示全部楼层
建议楼主先学习一下模块化编程的理念,而不是具体的小技巧。
wangpe 发表于 2011-4-11 21:46 | 显示全部楼层
执行一个软复位指令自然就到main函数去执行了
langgq 发表于 2011-4-11 21:55 | 显示全部楼层
while(1)改为while(flag_tz)
zhsymy 发表于 2011-4-12 14:30 | 显示全部楼层
当执行完flag_tz=0时,自动就回到MAIN函数了
wangzsa 发表于 2011-4-12 18:36 | 显示全部楼层
flag_tz对Open_Lock()或者 psw_change()内部是不可见的,你怎么判断
做参数送进去或者改成全局的
zhuww 发表于 2011-4-12 18:54 | 显示全部楼层
从楼主的程序和提出的要求来看,可以换一种实现方法,即直接把   dis_Ds1302(); 放到中断函数中,并想办法让 flag_tz 触发该中断即可。
zhanglli 发表于 2011-4-12 19:03 | 显示全部楼层
把flag_tz做成全局变量或者当成参数送进函数(用指针传递),然后在那两个函数体内部循环判断这个参数的值
 楼主| hanwe 发表于 2011-4-12 19:05 | 显示全部楼层
我的程序其实也不是很复杂的,一个密码锁程序,就是上电后显示时钟,然后等待键盘的操作 ,并根据按键值执行相应的程序,当按下开锁键后执行Open_Lock(),按下修改密码键后执行psw_change()。。等,程序执行完后回到主程序,显示时钟。
   但是,假如在执行Open_Lock()或 psw_change()中,只要按下返回键后(标志位flag_tz),就能从当前执行的程序中回到主程序,显示时钟。
  谢谢楼上各位的建议!!!
lium 发表于 2011-4-12 19:18 | 显示全部楼层
正在执行open_lock()或psw_change()时碰到返回键,就不继续执行下去,而是直接返回了?
不符合密码锁的要求吧
guoyt 发表于 2011-4-12 19:26 | 显示全部楼层
如果一定硬要从当前运行的函数中回到 main,  不建议直接在函数中调用 main , 建议使用软复位,有利于模块化结构化编程。
 楼主| hanwe 发表于 2011-4-12 19:41 | 显示全部楼层
好吧,我再消化消化
您需要登录后才可以回帖 登录 | 注册

本版积分规则

979

主题

8749

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部