在上次评测中,我们用到串口来做交互。这在玩单片机时,最最基本的用户交互界面。不过为了直观起见,还是用显示屏更好点。 前一阵刚好玩过nokia的5110屏,尝试移植到xmc4700下看看。市面上封装好的5110屏还蛮多的,手上拿到的是图1这种的。 从左到右,分别是VCC、GND、CS、RST、D/C、MOSI、CLK和背光控制引脚。其中Vcc一般接3.3V,IO则3.3和5V通吃。 CS、MOSI和CLK是SPI接口,D/C决定输入的是指令还是数据,RST负责reset。
图1 lcd5110外观 和单片机的连接上,直接使用开发板上的arduino接口。具体连接如下:
- SCLK: P3.9
- MOSI: P3.8
- D/C: P1.11
- RST: P1.10
- CS: P1.9
因此在dave app上,我们就需要1个SPI(负责SCLK和MOSI),3个DIGITAL_IO(负责后三个控制管脚)。我们先来添加一个digital_io。
图2 添加GPIO 并把它配置成输入输出模式(没有单纯的输出模式),初始输出为高电平。指定label为“LCD5110_CS”
图3 修改label 同样,我们再搞定另外2个DIGITAL_IO,分别是LCD5110_RST和LCD5110_DC。过程同上。 简单的办法就是使用右键菜单中的,add new instance,然后copy config,在新的上面past config就好了。
图4 增加新的instance 接着添加SPI_MASTER,在第一页设定总线速度为1MHz,在第二页,设定slave选择线为0,也就是自己控制CS脚的电平。设置如下图所示。
图5 SPI配置 最后我们来分配引脚,如下图所示。注意到LCD5110并不需要MISO,因此对应的引脚并没有分配。
图6 指定引脚 生成代码以后,就要添加用户代码啦。我们在项目下新建user目录,把需要用到的驱动代码放进去。
图7 添加用户代码 这里面的代码原来是51下的,其实移植非常简单,就是原来的IO控制代码改成DIGITAL_IO的控制代码。 然后模拟时序的SPI读写用SPI_MASTER_Transmit(&SPI_MASTER_0,&dat,1)代替就好了。 下图中展示了这两个例子。红线以上是IO控制代码,下方是SPI的代码。 IO部分注释掉的就是51的代码,用相应的DIGITAL_IO_SetOutput代替。 SPI部分,注释掉的是用IO模拟实现的SPI通信,最后用SPI_MASTER_Transmit函数代替的结果。 其实SPI部分的还是有个坑的,因为直接使用Transmit函数是不够的,必须用while(SPI_MASTER_IsTxBusy(&SPI_MASTER_0)); 判断是否传输完成,而这之后,还要增加大约1个字节的传输时延。
图8 代码移植示例 最后在主函数添加少量代码就可以使用LCD了,非常的方便。
图9 主函数添加代码
图10 LCD效果展示 小结:本次评测中,使用了SPI_MASTER,并配合DIGITAL_IO,实现了nokia5110液晶显示屏的基本英文字符驱动。 随着所使用的外设功能的复杂化,单靠经验主意是不够了,必须配合APP的文档,才能完成基本代码。如果要深入的话,可能还是要翻阅芯片手册的。
此内容由EEWORLD论坛网友johnrey原创,如需转载或用于商业用途需征得作者同意并注明出处