当你的硬件搭建完成后,我们即将开始了软件的编写,在编写前,首先你的脑海中应该有一个程序的大体框架,这样编写起来才会有行云流水般的感觉,这也是一个程序的构架的问题,一个好的程序构架不仅仅能够减少你书写程序锁浪费的时间,更能使你的程序运行的更加稳定,更加流畅。
对于光立方,首先你要清楚其工作原理,整个点亮的过程,单片机需要一直工作的,单片机每一次发送的数据只能点亮一层的特性得知,在整个画面显示图案的时候,即使是静止的图案,那么单片机也是在不断循环工作的。如果单片机停止了工作,那么我们的图案即会消失。
又由于这个特性,如果点亮某一层后停留的时间不一样,就会造成每一层的亮度不均匀,所以为了避免这些,我们需要一个准确的时间基准来依次点亮光立方的每一层,方法有很多,但我们的单片机不能总处理这么一个任务,他可能要处理的还有,动画的实时运算,其他数据的采集和处理等,所以考虑到这些任务都是需要实时运行的,我们的编程难度似乎加大了不少,这时我们需要引入单片机中断这一基础功能,我们的难题便会迎刃而解。
我们首先定义一个缓存数组,用于储存所有的光立方每一点的数据,暂且理解为显存。我通常用display[8][8]定义为数组。
下面就要定期把这个数组定期发送至驱动板中,时间如何去定义。
我们知道,当现实器播放大于15帧的动画时,才会在我们的眼中形成流畅的效果。那么我们的刷新率要大于15hz(越大越好,但是越大单片机负载也越大),这里也就是说,每1/15秒就要进行一次全部图的刷新,又由于在相同时间,只有一层能够点亮,那么每一层停留的时间就是1/15/8s根据这些规则,我们定义定时器让定时器有相应的数值。把这段专门用于刷新光立方显示的程序放于中断服务程序中。这样,我们程序的基础框架就有了。由于是定时器中断自动来刷新驱动板数据,这样我们看到的图像很稳定,亮度也均匀。而且我们再写其他的图案动画程序时候,不用再去考虑去更新驱动板数据,一切都会由中断自动完成。而我们如果要更改图案,我们只需要对数组所储存的数据进行更改即可,这也使我们的动画程序很驱动程序产生隔离,这样做的好处是及时我们更换了驱动板,那么也只需要对驱动函数(中断里面的程序)做相应的改动即可,不必再对其他程序改动。这也避免了“动一发而牵全身”的尴尬局面。
明天开始具体些程序,将会一条一条的分析。最近特别忙,特别累,所以更新有点吃力,望大家理解,另外大家的支持将是最大的动力,欢迎大家留言讨论。