偶然间看到了这段代码,是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<
或许您还需要下面的文章: