【Fireduino】改造屏幕续--两种方式刷新率对比

在写第一篇的时候提到过,由于没有官方屏幕,只得自己改造一个以前在Arduino使用的屏幕。但是因为引脚的关系,8位并行数据不能一次性输出,从而导致刷新速度很慢。通过对Fireduino的熟悉后,改进了连接方式和代码,最大程度地接近官方屏幕,测试一下比以前能够提高多少。

话不多说,首先是入口函数,就是对屏幕的初始化,然后对清屏函数计时。

![](http://jingyan.eeboard.com/upload/images/FklTUaFyLmuvstB-17S6BCVA7–k/1.png)

时间取自Fireduino本身,在刷屏前保存开机时长,刷屏后相减,就是刷屏的时间了。

一、第一种传统连接方式:

![](http://jingyan.eeboard.com/upload/images/Fo-yt_tjFSYVM6tvssDzS8hBKLtT/2.jpg)

按照标准的Arduino接口方式连接,为了方便比较,所有脚都用线连接。

![](http://jingyan.eeboard.com/upload/images/Flp0Xmxo-RYzUaR_-pm31p2tvYJD/3.png)

引脚的初始化函数,最最常用的那种,为每一个引脚都操作一遍。

![](http://jingyan.eeboard.com/upload/images/FgNBNNRG8HhV_mqC8jlldIjqhnIc/4.png)

最核心的部分,本应该是8位并行输出的数据,分别执行了8条语句才能完成,严重的影响了效率。

![](http://jingyan.eeboard.com/upload/images/Fhir-w9VXDdM5N4rG-v5LWu0As1o/5.jpg)

编译、烧写、运行,得到的结果是2602毫秒。其实测了多次为了取平均值,发现除了一次2603毫秒外,其他一直稳定2602毫秒,取一张有代表性的图来说明。2.6秒才能刷完一次屏幕,可以说是惨不忍睹。

二、第二种官方提供的LCD数据接口方式:

![](http://jingyan.eeboard.com/upload/images/FvGYzXP5SU_6HicZYGTKYFRC8-yn/6.jpg)

完全变了,都集中在这一部分。接口图显示,这里是LCD数据的0~7脚,按顺序插好。

![](http://jingyan.eeboard.com/upload/images/FnFypm868C4-tHkzmooO2NCEyRCs/7.png)

初始化的程序也变了,首先根据D0的引脚获取到Port号,然后再根据这个Port获取到方向寄存器和输出寄存器,以便后续操作。注释掉的部分和前面的代码是完全一样的,用哪种都行。不过为了便于移植,还是采取了前面的方式。

获取到寄存器后,对寄存器赋值,一次性将这8个口设置为输出。

![](http://jingyan.eeboard.com/upload/images/FkKYjue7oyrOUHf-4P-8m8gVJ8Sv/8.png)

最关键的地方,8位数据并行输出,一次性赋给屏幕,通过WR提交。

再次烧写,看看结果。

![](http://jingyan.eeboard.com/upload/images/Fjczw4xYcOD3wzAsjxtb-_HZ6eQt/9.jpg)

639毫秒,比刚才的2602毫秒快了不少,提高了4倍有余,但是比我设想的7~8倍还是有差距。


受制于接口的设计,只能采用8位的方式使得显示速度大打折扣,当然也许和显示屏的主控IC及初始化代码有关,如果再经过深入优化后或许能够再提高一些。不知道官方的屏幕速度能有多快,希望能比我这个快很多,这样显示各种内容尤其是动态部分才会更加顺畅。转自[tjcfeng](http://jingyan.eeboard.com/user/346541)爱版网的帖子,也许是他没时间吧,帮他转一下,不谢我叫雷锋

好贴~支持