单片机之路—诺基亚5110LCD显示屏驱动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机之路—诺基亚5110LCD显示屏驱动
电子产品在很多场合都需要提供和用户交互的人机界面,具备人机交互界面的电子产品可以给用户更好的使用,让电子产品更加直观。
今天给大家讲一个性价比很高的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'
实际程序显示的效果
由于程序还是比较复杂,这里就只给大家讲一下驱动显示的原理,需要程序源代码的同学可以回复邮箱,我会发给大家的。
关注我,我们一起搞搞单片机。