首页->【玩CortexM0】

17 0

实验十二 驱显8位并口的彩色LCD

这是一个独立的实验,为了完成LPC824并口处理能力而设计的实验。

在看了手册和MBED工程相关的文档后感觉可以走并行输出的并口LCD应用,先打开BusOut.h,其中的一段开始让人头疼了一下,后来经过实验已经体会了,就是这句:

BusOut(PinName p0, PinName p1 = NC, PinName p2 = NC, PinName p3 = NC,

           PinName p4 = NC, PinName p5 = NC, PinName p6 = NC, PinName p7 = NC,

           PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC,

           PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC);

BusOut(PinName pins[16]);

现在理解是这样的,如果你需要定义一条8位的BUS,那么对象是这样定义的:

BusOut myBus(P0_0,P0_1,P0_2,P0_3,P0_4,P0_5,P0_6,P0_7);

此后,myBus就是你的8位并口数据了,直接赋值即可。

定义16位的[最大就是16位的,如果超出将会报错!],就像如下定义:

BusOut myBus(P0_0,...,P0_28);//里面最多16个P0_xx!!!

需要注意的是有些IO口是不能定义为BUS的,这点需要注意,我在定义过程中就发现P0_10,P0_11就不能作为BUS定义。本实验仅仅是为了学习如何定义并口输出而做的实验,为此先复制一个main.cpp文件,将复制的文件改名为mainBus.cpp。

此款屏是1.5寸的,因此定义15inch.h文档。

此文档的头部定义8位并口和5根信号线:

BusOut myBus(P0_8,P0_9,P0_28,P0_27,P0_26,P0_25,P0_24,P0_23);

myBus就是8位并口的实例名称,直接赋值即可

DigitalOut lrd(P0_6);//读信号^

DigitalOut lwr(P0_5);//写信号v

DigitalOut reg(P0_4);//数据|命令信号1|0

DigitalOut res(P0_3);//复位Reset信号0->1

DigitalOut lcs(P0_2);//片选信号0有效

本实验程序较简单,将串口写LCD改成并口写LCD——原来的并改串语句改成直接向myBus并口赋值即可,程序简单多了,这里就不给源代码了,实际驱动128X128点阵,65536色彩,8位并口1.5寸LCD的效果见图C1和C2。

可能此屏是伪彩的,照片拖影厉害!

可以感觉的到,LPC824的IO口速度不是够快,在黑白刷屏中就能看到清除痕迹,在128X128的彩色中刷屏可以说是0.x秒,大约0.5秒吧——当然是全彩清屏。手册上有Fast BUS,说可以达到访问15MHz的速率,至少目前的状况是达不到的。128X128X65536色,满屏大约需要4M+/秒,因此虚拟并口的速度不尽人意,但是给了一种并口解决方案。否则将自编软串行数据转并行数据的代码的。


楼主可见