方便讲解,这段代码称作A代码。 #include #include #define uchar unsigned char #define uint unsigned int void delay(uint x) { uchar i,j,k; for(i=x; i>0; i--) for(k=5; k>0; k--) for(j=240; j>0; j--) { ; } } void main() { P2=0X7f; while(1) { P2=_crol_(P2,1); delay(30); } } 这段代码称作B代码吧。 #include #define uchar unsigned char #define uint unsigned int void delay(uint x) { uchar i,j,k; for(i=x; i>0; i--) for(k=5; k>0; k--) for(j=240; j>0; j--) { ; } } void main() { while(1) { P2=0xfe; delay(30); P2=0xfd; delay(30); P2=0xfb; delay(30); P2=0xf7; delay(30); P2=0xef; delay(30); P2=0xdf; delay(30); P2=0xbf; delay(30); P2=0x7f; delay(30); } } 看一下二个代码在proteus软件中仿真运行的结果:

流水灯仿真图 二段代码运行流水灯仿真,结果是一样的。 我们单从表面上看,代码A比代码B的字数要少,紧凑,代码B比较繁琐,字数要比较多。 再来看代码A的编译情况:

代码B的编译情况:

从这二张图,可以看出,代码A比代码B编译后的容量要少的多。一般的单片机的Flash 和Ram 的资源是以KB 来衡量的,可想而知,单片机的资源是少得可怜,在单片机资源有限的情况下,代码A是首选。 开始学的时候,大部分人会按代码B那样写,我也是。很显然,代码A比代码B要好的多,不同的人写同样功能的代码,一般很难会有相同的代码,人们思维方式的不同,写出来的代码也不同。同样能达到客户想要的目的,但是代码的稳定性,执行效率,占用容量是要考虑的。 “简单点教程”里面之前有视频教程讲过条件判断语句,P2=(a>b)?0xf0:0x0f; 也讲过要提倡这种写法,里面也举例了其它的写法。 我们开始是学,学会了就要优化,选择一种好的写法,所以学习单片机编程,是一个不断学习的过程。 再比如定义变量,如果能用char定义就不要用int来定义,浪费RAM,如果程序比较大,会导致RAM不够用。还有运算,a=b+c;尽量用自带的运算符,写成:a=b|c;
|