打印
[MSP430]

关于switch语句使用问题

[复制链接]
3274|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;//闪烁一个
是不是也影响到其他位了。

使用特权

评论回复
5
longmaodo| | 2014-8-11 10:16 | 只看该作者
楼上说的对
你这样做 每次的运行都受上一次运算的结果的限制
程序这样写不容易修改 也不好判断逻辑
建议你修改一下写法

不要用^  这个是按位异或会修改你不想动的那一位

使用特权

评论回复
6
weiwu0809|  楼主 | 2014-8-11 13:31 | 只看该作者
longmaodo 发表于 2014-8-11 10:16
楼上说的对
你这样做 每次的运行都受上一次运算的结果的限制
程序这样写不容易修改 也不好判断逻辑

大哥,我是自学的,想分别实现各个语句的功能,你能不能帮我改改。跪谢~~

使用特权

评论回复
7
-|continue;|-| | 2014-8-11 13:44 | 只看该作者
最大的问题就在case 0用了异或,流水灯用移位最佳

使用特权

评论回复
8
weiwu0809|  楼主 | 2014-8-11 14:09 | 只看该作者
-|continue;|- 发表于 2014-8-11 13:44
最大的问题就在case 0用了异或,流水灯用移位最佳

恩,那么,下面case1和case2我只想让它两一个灯该怎么办呢,那样写还需要改吗

使用特权

评论回复
9
longmaodo| | 2014-8-11 14:57 | 只看该作者
能不能说说你要的结果:
第一次8个灯都亮灭一次;
第二次8个灯都灭 只有第一个灯亮灭一次;
第三次8个灯都灭,只有第二个灯亮灭一次;
……
是这样吗?

使用特权

评论回复
10
weiwu0809|  楼主 | 2014-8-11 15:02 | 只看该作者
longmaodo 发表于 2014-8-11 14:57
能不能说说你要的结果:
第一次8个灯都亮灭一次;
第二次8个灯都灭 只有第一个灯亮灭一次;

恩恩。是的,但我无法实现这样的功能

使用特权

评论回复
11
玄德| | 2014-8-11 15:21 | 只看该作者
把显示时间加长,再看看。

使用特权

评论回复
12
-|continue;|-| | 2014-8-11 15:22 | 只看该作者
weiwu0809 发表于 2014-8-11 14:09
恩,那么,下面case1和case2我只想让它两一个灯该怎么办呢,那样写还需要改吗 ...

用|置位,用&请零,亮灭随你

使用特权

评论回复
13
longmaodo| | 2014-8-11 15:50 | 只看该作者
放弃你那个for 和 switch 你应该看看编程基础的书
正确理解循环和分支你才能用好他们

使用特权

评论回复
14
weiwu0809|  楼主 | 2014-8-11 16:14 | 只看该作者
longmaodo 发表于 2014-8-11 15:50
放弃你那个for 和 switch 你应该看看编程基础的书
正确理解循环和分支你才能用好他们 ...

恩,就是之前看了中断 ,有用switch的。所以以为可以在LED可以用的。

使用特权

评论回复
15
hjl714016| | 2014-8-11 16:20 | 只看该作者
你先将单独一个状态调通,再整合起来不就简单多了吗?

使用特权

评论回复
16
le062| | 2014-8-11 23:41 | 只看该作者
看到delay_ms就不想多说了
你去学下这个帖子,http://www.amobbs.com/thread-4585393-1-1.html

使用特权

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

本版积分规则

6

主题

28

帖子

1

粉丝