电子产品在很多场合都需要提供和用户交互的人机界面,具备人机交互界面的电子产品可以给用户更好的使用,让电子产品更加直观。今天给大家讲一个性价比很高的LCD显示器——诺基亚5110LCD。可能很多人奇怪,为什么这个LCD显示屏被叫做诺基亚5110,那是因为这个显示屏诺基亚经典机型5110手机上使用的现实屏。就是下图这部手机,曾经的经典。记得第一部手机就是诺基亚的,那会还在读初中,宿舍的同学总是抢着来打贪吃蛇,打到满屏。电子产品的更新换代实在太快了,现在已经很难找到这个手机的踪影了。 诺基亚5110手机 5110LCD是一个84X48的点阵LCD,可以显示4行汉字。和单片机的接口不是很复杂,是一个没有MISO只有MOSI的SPI协议。用于通信的数据线是4根,其中有一根是用于设定传入的数据是命令还是数据的选择端口。下图是在马云家买的一个诺基亚5110LCD模块,总共有8个引脚。用于通信的引脚为4个,1个复位引脚,2个电源引脚,1个是背光灯控制引脚。因为诺基亚LCD本身是不会发光的,为了能够在晚上也能够看到液晶显示屏显示的内容,需要增加背光灯。 诺基亚5110实物图和引脚描述 我们把LCD需要单片机控制的5个引脚连接到单片机的P1口,背光灯通过一个电阻接到VCC5V,让背光灯保持常亮的状态,也可以接到单片机的引脚上去,通过单片机控制背光灯的亮灭。 5110LCD与单片机接口图 我们来看一下怎么写程序驱动诺基亚5110,实现在5110上显示出字符。由于接通电源后,LCD内部的RAM数据状态是不确定的,所以我们需要给LCD复位一下。 5110LCD复位时序 //产生一个复位脉冲 Lcd_res=0; delay_us(); Lcd_res=1; 我们需要往LCD写数据,SPI的写时序如下,这里实现的是通过单片机IO口模拟SPI时序,如果单片机有硬件的SPI接口是可以用来驱动的5110LCD的。 5110LCD通信时序 /******************************************************************************** 函数名称:Lcd_writebyte 函数功能:Lcd写入函 输入参数: unsigned char dat:需要写入的数据 bit dc:写入的数据是命令还是数据 *********************************************************************************/ void Lcd_writebyte(unsigned char dat,bit dc) { unsigned char i; Lcd_ce=0; Lcd_dc=dc; for(i=0;i<> { Lcd_clk=0; if(dat&(0x80>>i)) Lcd_din=1; else Lcd_din=0; Lcd_clk=1; } Lcd_ce=1; } 完成写入函数后,还需要按照5110LCD规定写入初始化命令,LCD5110才能够正常工作。 LCD5110初始化函数 前面说到LCD是一个84X48的点阵,我们需要在点阵上显示字符就需要知道怎么在点阵上寻址。通过5110LCD的资料我们可以知道,5110LCD点阵和地址对应关系如下,起始偏移地址分别问0x80和0x40。 5110LCD点阵分布 LCD5110显示坐标设置函数 LCD通过控制点阵上的点显示或者不显示,使得显示不分组成字符。比如我们需要在LCD上显示一个字符'A',需要在LCD上显示的点如下图,也就是我们需要往LCD的显示地址写入0x00、0x7C、0x12、0x11、0x12、0x7c。对应位数值为0,该点熄灭,对应位为1,该点点亮。点亮的部分组成字符‘A’。能够显示出一个字符,显示其他字符就是取模不一样而已了。 LCD显示的点组成字符‘A’ 在5110LCD上显示字符'A' 实际程序显示的效果 由于程序还是比较复杂,这里就只给大家讲一下驱动显示的原理,需要程序源代码的同学可以回复邮箱,我会发给大家的。关注我,我们一起搞搞单片机。 |
|