这是我第一次写的程序,5毫秒扫描一次。
void LedLock(void) { static uint8 TimeFlash = 0;//闪烁时间 static uint8 FlashTimes = 0;//闪烁次数 if(F_FlsLock) { if(++TimeFlash <= 50) { P_LED = 1; } else if(++TimeFlash <= (100-1)) { P_LED = 0; } else { TimeFlash = 0; if(++FlashTimes >= 3) { FlashTimes = 0; F_FlsLock = 0; } } } else { if(F_LockEn) { P_LED = 1; } else { P_LED = 0; } } }
这是我第二次写的程序,5毫秒扫描一次。
void LedLock(void) { static uint8 TimeFlash = 0;//闪烁时间 static uint8 FlashTimes = 0;//闪烁次数 if(F_FlsLock) {//需要闪烁 if(++TimeFlash <= 50) { F_LedLockEn = 0; } else if(++TimeFlash <= (100-1)) { F_LedLockEn = 1; } else { TimeFlash = 0; if(++FlashTimes >= 3) { FlashTimes = 0; F_FlsLock = 0; } } } else { F_LedLockEn = F_LockEn; } } // if(F_LedLockEn) { P_LED = 1; } else { P_LED = 0; }
表面可以看出,第2次的程序比第一次多了I个标志位F_LedLockEn 。
更深一点:如果这两个程序的移植性是那个好呢?这就是我今天主要说的,如果
这两个程序都用在一个相同的驱动电路,即VDD-LED-电阻-GND,那么
就没有什么区别。但如果用在复用,即按键和LED共用一个IO或者LED共
用COM,这时功能相同,LED驱动更改肯定要的,但判断是否显示和闪烁是
时间和次数可以不改,对此,如果抑制第一个程序,那得大改了,哈哈,
那又得浪费时间了,但第二个程序,只需要更改LED驱动方式,再通过
F_LedLockEn来确定是否亮与不亮即可。
总的来说,这里就是将判断LED是否亮的模块和LED驱动模块完全区分开,
这样,两个模块就可以单独移植和修改却不相互影响。
此篇见解至此已完,说得不好,欢迎扔砖。
点点滴滴的努力着!!!
程序的模块化的一些见解5-移植性-实例说明,布布扣,bubuko.com
原文:http://blog.csdn.net/chuangwu2009/article/details/29562095