请教:switch,case嵌套

[复制链接]
5310|13
 楼主| yuanquan12345 发表于 2011-3-11 09:01 | 显示全部楼层 |阅读模式
switch(key1n)
    {
   case 1:
        switch(key3n)
        {
      
         case 1:
         
           lcd_wcmd(0x80);   //一号阀自动
           lcd_wdat(0x31);   //1
           lcd_wdat(0x23);   //#
         
           lcd_wdat(0xd7);
           lcd_wdat(0xd4);   //自
           lcd_wdat(0xb6);
           lcd_wdat(0xaf);   //动
     
           lcd_wcmd(0x90);   //在第二行显示:是
           lcd_wdat(0xca);
           lcd_wdat(0xc7);     //是
           lcd_wdat(0x20);
           lcd_wdat(0x20);     //空格
     
           lcd_wcmd(0x88);   //在第三行显示:否
           lcd_wdat(0xb7);
           lcd_wdat(0xf1);    //否
           lcd_wdat(0x20);
           lcd_wdat(0x20);     //空格
           lcd_wcmd(0x0c);   //将光标关掉
           break;
         case 2:
           flag=1;
              lcd_wcmd(0x80);   //一号阀自动
           lcd_wdat(0x31);   //1
           lcd_wdat(0x23);   //#
           lcd_wdat(0xb7);   //阀
           lcd_wdat(0xa7);
           lcd_wdat(0x20);   //空格
           lcd_wdat(0x20);
        
           
           lcd_wcmd(0x90);
           lcd_wdat(0x20);   //空格
           lcd_wdat(0x20);
           lcd_wdat(0x20);
           lcd_wdat(0x20);
        
           lcd_wcmd(0x88);
           lcd_wdat(0xd7);
           lcd_wdat(0xd4);
           lcd_wdat(0xb6);
           lcd_wdat(0xaf);
           lcd_wcmd(0x0c);   //将光标关掉
           break;

            default:
              
           flag=0;
           key3n=0;
          // xianshi();
           lcd_wcmd(0x80);   //一号开阀
           lcd_wdat(0x31);    //1
           lcd_wdat(0x23);    //#
           lcd_wdat(0xbf);
           lcd_wdat(0xaa);    //开
           lcd_wcmd(0x90);      //一号阀停止
           lcd_wdat(0x31);      //1
           lcd_wdat(0x23);      //#
           lcd_wdat(0xcd);    //停
           lcd_wdat(0xa3);
           lcd_wcmd(0x88);     //一号关阀
           lcd_wdat(0x31);     //1
           lcd_wdat(0x23);     //#
         
           lcd_wdat(0xb9);     //关
           lcd_wdat(0xd8);
              lcd_wcmd(0x82);  
           lcd_wdat(0x20);
           lcd_wdat(0x20);   //空格
           lcd_wcmd(0x0c);   
          // break;
           }
            
        case 2:
       switch(key3n)
       {
        case 1:
          flag=0;
          flag1=1;
         // xianshi();
             lcd_wcmd(0x80);   //显示:手
          lcd_wdat(0xca);
          lcd_wdat(0xd6);    // 手
          lcd_wdat(0x20);
          lcd_wdat(0x20);
         
         
             break;
           default:
            
          flag1=0;
          key3n=0;
         // xianshi();
          lcd_wcmd(0x80);   //一号开阀
          lcd_wdat(0x31);    //1
          lcd_wdat(0x23);    //#
          lcd_wdat(0xbf);
          lcd_wdat(0xaa);    //开
             lcd_wcmd(0x82);  
          lcd_wdat(0x20);    //空格
          lcd_wdat(0x20);
          lcd_wcmd(0x0c);
         // break;
       }
 楼主| yuanquan12345 发表于 2011-3-11 09:05 | 显示全部楼层
现在的问题:Key1n=1时,直接就进入case2,了。当key3n=2时,又回到key1n的case1了。
弄了两天了。
请指点。
谢谢。
OpCode 发表于 2011-3-11 12:59 | 显示全部楼层
外围的CASE貌似没见到break;
心静自然凉 发表于 2011-3-11 13:04 | 显示全部楼层
看的好累,你先把帖子内容简化一下,比如把一堆lcd_wdat(0x20); 用“程序内容”4个字来表示
wang_2003 发表于 2011-3-11 14:39 | 显示全部楼层
这个感觉太乱了,自己好好用流程图看看吧
 楼主| yuanquan12345 发表于 2011-3-11 14:47 | 显示全部楼层
谢谢大家。
问题已解决,外围没有break。
谢谢。
 楼主| yuanquan12345 发表于 2011-3-11 14:50 | 显示全部楼层
楼上提的建议,我会采纳,以后慢慢改正。
谢谢。
sdpz 发表于 2011-3-11 19:44 | 显示全部楼层
看着蛋疼
joyme 发表于 2011-3-12 11:43 | 显示全部楼层
书写不规范,自己检查也麻烦,没有break就会顺序执行下面的代码。写代码的时候,先不要写处理代码,先把switch...case...的架构写好就不会出这么弱的问题了
ddtx 发表于 2011-3-12 15:46 | 显示全部楼层
外围的SWITCH没有break啊
肯定会出现你说的情况的
ji_dan 发表于 2011-3-12 16:29 | 显示全部楼层
就是那个原因
abin0415 发表于 2011-3-12 18:25 | 显示全部楼层
可以用数组,这样就可以节省一些代码。
 楼主| yuanquan12345 发表于 2011-3-13 07:50 | 显示全部楼层
谢谢大家。
学习了。
nan_banqiu 发表于 2011-3-13 10:15 | 显示全部楼层
低级的错误难找啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1155

帖子

3

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