[MSP430] 关于switch语句使用问题

[复制链接]
3813|16
 楼主| weiwu0809 发表于 2014-8-10 23:35 | 显示全部楼层 |阅读模式
#include <msp430f149.h>
#define CPU_F ((double)12000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
void main(void)
{
  unsigned int i;
  P2DIR=0xff;//p2作为输出端口
  while(1)
  {
    for(i=0;i<10;i++)
    {  
      switch(i)
       {
          case 0:
           P2OUT^=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7;//取反,8个LED闪烁
           delay_ms(50);
           
          break;
          case 1:
            P2OUT^=BIT0;//闪烁一个
            delay_ms(500);
              
            break;
          case 2:
            P2OUT^=BIT1;
            delay_ms(100);
              
            break;
          case 3:
           P2OUT^=BIT2;
           delay_ms(100);
              
           break;
          case 4:
            P2OUT^=BIT3;
            delay_ms(100);
               
           break;
          case 5:
            P2OUT^=BIT4;
            delay_ms(100);
              
           break;
          case 6:
            P2OUT^=BIT5;
            delay_ms(100);
           
            
            break;
          case 7:
            P2OUT^=BIT6;
            delay_ms(100);
              
            break;
          case 8:
            P2OUT^=BIT7;
            delay_ms(100);
              break;
          case 9:i=0;break;
        default:
         break;
    }
  }
}
}
我运行的时候8个灯一直闪烁,虽然单步调试显示都运行每个语句了,但是板子上只显示8个LED都闪烁,其他的没有现象可看,麻烦大侠帮我看看什么情况,我就是想实现分别运行下面语句,达到效果,第一次是8个LED都闪,第二次是闪烁一个,第三次一次类推。。。
江枫渔火 发表于 2014-8-10 23:49 | 显示全部楼层
流程没想清楚,错得太多,没处说起,自己在想想了。
wangch_sh 发表于 2014-8-11 08:35 | 显示全部楼层
闪烁是运行两次,一次亮,一次灭。你程序里只能运行一次。
icekoor 发表于 2014-8-11 08:59 | 显示全部楼层
P2OUT^=BIT0;//闪烁一个
是不是也影响到其他位了。
longmaodo 发表于 2014-8-11 10:16 | 显示全部楼层
楼上说的对
你这样做 每次的运行都受上一次运算的结果的限制
程序这样写不容易修改 也不好判断逻辑
建议你修改一下写法

不要用^  这个是按位异或会修改你不想动的那一位
 楼主| weiwu0809 发表于 2014-8-11 13:31 | 显示全部楼层
longmaodo 发表于 2014-8-11 10:16
楼上说的对
你这样做 每次的运行都受上一次运算的结果的限制
程序这样写不容易修改 也不好判断逻辑

大哥,我是自学的,想分别实现各个语句的功能,你能不能帮我改改。跪谢~~
-|continue;|- 发表于 2014-8-11 13:44 | 显示全部楼层
最大的问题就在case 0用了异或,流水灯用移位最佳
 楼主| weiwu0809 发表于 2014-8-11 14:09 | 显示全部楼层
-|continue;|- 发表于 2014-8-11 13:44
最大的问题就在case 0用了异或,流水灯用移位最佳

恩,那么,下面case1和case2我只想让它两一个灯该怎么办呢,那样写还需要改吗
longmaodo 发表于 2014-8-11 14:57 | 显示全部楼层
能不能说说你要的结果:
第一次8个灯都亮灭一次;
第二次8个灯都灭 只有第一个灯亮灭一次;
第三次8个灯都灭,只有第二个灯亮灭一次;
……
是这样吗?
 楼主| weiwu0809 发表于 2014-8-11 15:02 | 显示全部楼层
longmaodo 发表于 2014-8-11 14:57
能不能说说你要的结果:
第一次8个灯都亮灭一次;
第二次8个灯都灭 只有第一个灯亮灭一次;

恩恩。是的,但我无法实现这样的功能
玄德 发表于 2014-8-11 15:21 | 显示全部楼层
把显示时间加长,再看看。

-|continue;|- 发表于 2014-8-11 15:22 | 显示全部楼层
weiwu0809 发表于 2014-8-11 14:09
恩,那么,下面case1和case2我只想让它两一个灯该怎么办呢,那样写还需要改吗 ...

用|置位,用&请零,亮灭随你
longmaodo 发表于 2014-8-11 15:50 | 显示全部楼层
放弃你那个for 和 switch 你应该看看编程基础的书
正确理解循环和分支你才能用好他们
 楼主| weiwu0809 发表于 2014-8-11 16:14 | 显示全部楼层
longmaodo 发表于 2014-8-11 15:50
放弃你那个for 和 switch 你应该看看编程基础的书
正确理解循环和分支你才能用好他们 ...

恩,就是之前看了中断 ,有用switch的。所以以为可以在LED可以用的。
hjl714016 发表于 2014-8-11 16:20 | 显示全部楼层
你先将单独一个状态调通,再整合起来不就简单多了吗?
le062 发表于 2014-8-11 23:41 | 显示全部楼层
看到delay_ms就不想多说了
你去学下这个帖子,http://www.amobbs.com/thread-4585393-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

28

帖子

1

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