zhangjg09 发表于 2009-9-11 17:36:57

讨论:编程的思路与方法(从循环流水灯想到的)

看AVR视频,有个课后习题,8个发光管由上至下点亮,再由下至上点亮,重复此过程。
对于这个习题,编程实现了功能,但感觉方法不是很好,有点歪门邪道的味道。特向各位程序达人请教一些编程的思路与方法。

顺带问个小问题,在ICC中怎么调整程序语句的对齐?

#include<iom16v.h>

#defineuchar unsigned char
#define uint unsigned int

void delay(uchar ms)
{
uint i,j;
for(i=0;i<ms;i++)
      for(j=0;j<8000;j++)
          ;
}

void main()
{
   uchar i,j;
   uchar flag1,flag2;         //灯流动方向标志
   DDRD=0xFF;
   PORTD=0xFF;
       
   delay(100);
       
   i=1;
   j=0;
   flag1=0;
   flag2=1;
   while(1)
      {
         if(i!=0)//不同的流动顺序输出语句也不同
            PORTD=~i;
         else if(j!=0)
            PORTD=~j;
         if((flag1==0)&&(flag2==1))//此时灯从上往下点亮
            {
                if(i==0x80)//判断到达最下面的灯,该变换点亮顺序
                   {
                     flag1=1;
                     flag2=0;
                     j=0x80;
                   }
                i<<=1;//顺方向最后一步执行后,i=0x00
         }
         else if((flag1==1)&&(flag2==0))//此时灯从下往上点亮
            {
                if(j==0x01) //判断到达最上面的灯,该变换点亮顺序
                  {
                     flag2=1;
                     flag1=0;
                     i=0x01;
                  }
          
               j>>=1;
            }
      delay(100);       
   }
}

xiejun 发表于 2009-9-11 18:14:29

仅仅实现这个功能,用16个字节作个表,程序多简单呀



char TAB[] = { };

char i=0;

while(1){
    PORTD = TAB;
    delay(1000);
}

lxyppc 发表于 2009-9-11 19:25:57

PORTD = TAB; ==> PORTD = TAB;

Vincent007 发表于 2009-9-11 23:05:43

建议少用1楼2楼的写法,可维护性很差。

zhxzhx 发表于 2009-9-12 01:25:41

【3楼】 Vincent007
可维护性差在哪里?

zzz1367 发表于 2014-5-5 14:38:34

Vincent007 发表于 2009-9-11 23:05
建议少用1楼2楼的写法,可维护性很差。

同问,程序可维护性 如何保证?
程序的 编程思路 如何理清?
程序 构架 如何做?
谢谢。
最近在烦这个问题。
页: [1]
查看完整版本: 讨论:编程的思路与方法(从循环流水灯想到的)