从单片机基础到程序框架(全集 2019pdf版).pdf - 第392页

它们的各种 千变万化的组 合逻辑, 拆分之后 程序框架 就有了无限可 能的扩展性 。 之所以整出 8 个步 骤的切换, 也是同样的 道理, 为了增加程序框架无限 可能的 扩展性。 这个程序虽然表面看起 来繁琐, 但是仔细一 看它是 “多而不乱” ,非常富有 “队形感” 。因此可以这么说,这个看似繁琐的 跑马灯程序,其实背后蕴藏了编 程界 的大智慧, 它已经突破了“ 看山还是山 ”的境 界。

100%1 / 836
vGu8TimeFlag_1=1;
P0_0=0;
P0_1=0;
P0_2=0;
P0_3=0;
P0_4=0;
P0_5=0;
P0_6=1; //第 6 个灯熄灭
P0_7=0;
Su8Step=7; //切换到下一个步骤,精髓语句!
}
break;
case 7:
if(0==vGu16TimeCnt_1) //时间到
{
vGu8TimeFlag_1=0;
vGu16TimeCnt_1=BLINK_TIME_1; //重装定时的时间
vGu8TimeFlag_1=1;
P0_0=0;
P0_1=0;
P0_2=0;
P0_3=0;
P0_4=0;
P0_5=0;
P0_6=0;
P0_7=1; //第 7 个灯熄灭
Su8Step=0; //返回到第 0 个步骤重新开始往下走,精髓语句!
}
break;
}
}
分析总结这是第 3 种境界的跑马灯,很多初学者咋看此程序表示不理解,人家一条赋值语句就解决
8 LED 一次性显示的问题,你非要拆分成 8 条按位赋值的语句,人家只用一个判断就实现了 LED 灯移动显
示的功能,你非要整出 8 个步骤的切换,况且,整个程序的代码量明显增加了很多,这个程序好在哪?其实,
我这么做是用心良苦呀。这个程序的代码量虽然增多了但是仔细一看,并没有影响运行的效率。之所以
8 LED 灯拆分成一个一个的 LED 灯单独赋值显示,是因为,在我眼里,这个 8 LED 灯代表的不仅仅是 LED
灯,而是 8 个输出信号!这 8 个输出信号未来驱动的可能是不同的继电器,气缸,电机,大炮,导弹,以及
它们的各种千变万化的组合逻辑,拆分之后程序框架就有了无限可能的扩展性之所以整出 8 个步骤的切换,
也是同样的道理,为了增加程序框架无限可能的扩展性。这个程序虽然表面看起来繁琐,但是仔细一看它是
“多而不乱”,非常富有“队形感”。因此可以这么说,这个看似繁琐的跑马灯程序,其实背后蕴藏了编程界
的大智慧,它已经突破了“看山还是山”的境界。
第九十节: 多任务并行处理两路跑马灯。
【90.1 多任务并行处理。
两路速度不同的跑马灯代表了两路独立运行的任务,单片机如何“并行处理这两路任务,就涉及到
“多任务并行处理的编程思路”
上图 90.1.1 灌入式驱动 8 LED 1 路跑马灯
上图 90.1.2 灌入式驱动 4 LED 新增加的第 2 路跑马灯
如上图,本节特别值得一提的是,新增加的第 2 路跑马灯用的是 4 LED, 4 LED 的驱动 IO 口是“散
装的”,因为,前面 3 P1 的(P1.4,P1.5,P1.6),最 1 P3 的(P3.3)这种情况下,肯定用
不了“移位”的处理思路,只能用跑马灯第 3 种境界里所介绍的“状态切换非阻塞”思路,可见“IO 口拆
分”和“switch 状态切换”又一次充分体现了它们“程序框架万能扩展”的优越性。代码如下: