YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2859|回复: 0
打印 上一主题 下一主题

转帖:跑马灯变形记(一)

[复制链接]
回帖奖励 1 金币 回复本帖可获得 1 金币奖励! 每人限 1 次(中奖概率 80%)

签到天数: 9 天

[LV.3]偶尔看看II

跳转到指定楼层
楼主
发表于 2014-12-22 10:52:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 雷柏 于 2014-12-22 11:16 编辑

本帖转自http://bbs.21ic.com

跑马灯实验:将一排led灯按一定的时序循环点亮。

说到它,相信许多人都要会心一笑。跑马灯实验和PC机软件领域的“hello world”同属于骨灰级的入门实验。几乎所有嵌入式领域初学者都从这个实验开始,满怀激动地踏上技术之路。那第一次用程序点亮led灯的激动,那曾经的青涩与懵懂,隽永难忘。

但多年工作后,我发现那些学校实验代码,和专业软件公司的代码之间,其差距实在难以估量。尤为遗憾的是,有许多工作多年的工程师,写出的代码处也还处在这种“实验水平”,一旦搭建的目标系统功能稍显复杂,就会一团乱麻,程序千疮百孔,全局变量遍地皆是,首尾难顾,维护起来困难重重。

为了避免这些实验代码继续“荼毒”下一代,本章以跑马灯实验为例,朝着商业代码的方向,进行循序渐进的优化变形,让读者明晰学校与社会的差距,并初步领会系统的架构之美。

闲言少叙,先上一段最原始的跑马灯代码。该代码从百度搜索获得。

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint   unsigned int
  5. void DelayMS(uint x)
  6. {
  7.     uchar  i;
  8.     while(x--)
  9.     {
  10.         for(i=0;i<255;i++);
  11.     }
  12. }
  13. // LED 跑马灯(从右至左)
  14. void main()
  15. {
  16.     P1=0xfe;
  17.     while(1)
  18.     {
  19.         if (P1==0x7f)
  20.             P1=0xfe;
  21.         else
  22.             P1=_crol_(P1,1);
  23.         DelayMS(80);
  24.     }
  25. }
  26.          代码1  最原始的跑马灯代码
复制代码

将这段代码编译、载入51的目标板,只要led接的是P1口,跑马灯的效果还是能够出来的。可如果从系统的可阅读性、可移植性、软件规范等角度去审视,这段代码无疑可称得上是“简陋”。

   接下来,我们将循序渐进对其进行逐次改造,最终成为一个该功能下还算合理的“软件架构”


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-5-3 09:23 , Processed in 0.045698 second(s), 24 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表