Blog

Blog

PHODAL

有趣的流水灯写法。

偶然间看到了这段代码,是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&lt;=6;c++) {
      delay();
      Random();
      PORTB = ~flags[c]; 
    }
    for(c=7;c&gt;=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<


或许您还需要下面的文章:

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

标签