有趣的流水灯写法。

AI助手已提取文章相关产品:

偶然间看到了这段代码,是freescale的示例代码,先看看这段代码。

void main(void) {
  const char flags[] = {1<<0, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5, 1<<6, 1<<7};
  char c;

  EnableInterrupts;
  asm_main(); /* call an assembly function (for demo purpose) */
  srand(PARTIDH); /* just some 'random' start value as seed */  
  DDRB = 0xff; PORTB = 0;
  for(;;) {
    for(c=0;c<=6;c++) {
      delay();
      Random();
      PORTB = ~flags[c]; 
    }
    for(c=7;c>=1;c--) {
      delay();
      Random();
      PORTB = ~flags[c];
} }/* wait forever */ /* please make sure that you never leave this function */}

自然地,如果是嵌入式设计的话,不可避免地要写流水灯。不过,这段代码,我觉得很简单,很容易懂。至少比我原来的写法

const char flags[]={0xFE,0xFD,0xFB,0xF7,0x7F,0xBF,0XDF,0xEF};

因为不是很喜欢用移位的方法,所以自然选择了那个方法。移位应该就是这样子了:

for(i=0;i<8;i++){
    delay();
    PORTB=PORTB<<1;
}

自然地这是简练多了,可能表示的时候不是很方便,比如要让特定的LED亮,不过也是可以的。

PORTB=0x01<<i;

当然,移位方法也是多种多样的。但是,这不像一个 pythonic的作法。

const char flags[] = {1<<0, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5, 1<<6, 1<<7};

这段代码比0xFE,0b00001111什么的优雅多了。

而且,可以优雅的指定让某个led亮。

PORTB = ~flags[c];





                

您可能感兴趣的与本文相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值