5110液晶显示屏的使用方法

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

今天在网上搜资料,无意间发现了,这篇文章,写的很详细,故写出来与大家共同学习。Nokia5110液晶屏完全新手学习笔记(一)小Jay已经很久没有接触嵌入式了,这些天在学习51,还故意买了块Nokia5110液晶屏来玩玩(因为便宜吧,嘻嘻~)。一开始,小Jay不才,看5110芯片资料一头雾水,囧!不过呢,小Jay还是很努力的,经过几番研究,终于有些眉目,其实5110也并不难的。此文提供给和我一样的鸟哥参考,希望能帮得上忙。(*^__^*)嘻嘻声明:1、本文章用于自己的知识回顾和提供给有需要的初学者,高手请飘过~2、本文章的内容均从“诺基亚5110液晶屏资料驱动芯片PCD8544中文数据手册.pdf”中,结合自己的理解,整理并简化出来的知识,更多详细内容请查看芯片手册。另外,内容有不对的地方,望指正。现在我们一步一步来:一、硬件链接:首先,看一下硬件(仅供参考,读者已对自己的硬件很熟悉,可以直接跳过。):说明:图1:排针从左至右1到8位。图2:5110接口在板子中的区域。图3:8位排针对应连接5110液晶屏相应的引脚。图4:5110液晶显示屏对应8位排针JP19的插入方向。再看一下我的板子的原理图:图5中,显示了8位排针JP19(即5110液晶屏的引脚)其中的5根与51单片机(本人的为STC89C516RD+)的PBI/O口的连接方式:5110_RST---PB2(P1.2)5110_SCE---PB3(P1.3)MOSI(sdin)---PB5(P1.5)MISO(dc)---PB6(P1.6)SCK---PB7(P1.7)这样,我们知道了用51单片机中的I/O口和5110引脚的链接方式。二、引脚接线图请根据程序里的定义连接,51的程序默认接线为:sbitsce=P1^3;//片选sbitres=P1^2;//复位,0复位sbitdc=P1^6;//1写数据,0写指令sbitsdin=P1^5;//数据sbitsclk=P1^7;//时钟看了这些默认接线,可能有个疑问:“这些位变量(引脚)究竟有什么用呢?”,带着这个疑问,请看5110芯片手册中的引脚说明(重点看红色区域):从这个引脚说明中,我们知道了不同的引脚,对应的功能。那么,如何使用这些引脚来控制5110工作呢?三、指令5110液晶显示屏(PCD8544芯片),是通过发送指令和写入数据RAM来控制和显示数据的。指令格式分为两种模式:1、如果D/C(模式选择)置为低(为0),即位变量dc=0,为发送指令模式,那么接下来发送的8位字节解释为命令字节。2、如果D/C置为高,即dc=1;为写入数据RAM模式,接下来的字节将存储到显示数据RAM。注意:1、每一个数据字节存入之后,地址计数自动递增。在数据字节最后一位期间会读取D/C信号的电平。2、每一条指令可用任意次序发送到PCD8544。首先传送的是字节的MSB(高位)。指令集:结合表1和表2,指令集不难读懂。现在以红色横线所标识的指令来举例说明:第一条(红色横线1),功能设置指令:首先,D/C为0,表示现在是指令模式,然后从表2看:若要“使用基本指令集”,则PD=0,V=0,H=0,那么相应地DB7~DB0分别为00100000b,即0x20。也就是说,发送0x20就能设置液晶“使用基本指令集”。同理,使用“使用扩展指令集”,指令值为0x21。第二条(红色横线2),显示控制:显示模式有4种,分别是:显示空白,普通模式,开所有显示段,反转映象模式。这些模式分别使用DandE来组合控制。这样,我们控制显示为“普通模式”,那么D要为1,E要为0,这时DB7~DB0分别为00001100b,即指令值为0x0C。第三条(红色横线3),写入数据指令:写入数据,首先D/C必须为1,表示现在是写入数据RAM模式,DB7~DB0就是相应的数据值。到这里,我们知道了5110液晶屏是使用这样的指令集来控制和显示数据的。那么,我们如何把指令值写进去呢?一篇发不完,请看笔记二。Nokia5110液晶屏完全新手学习笔记(二)四、时序图没错,要向液晶屏写入数据,我们需要通过模拟一个串行总线协议来写入数据。先来看看传送一个字节(指令)的时序图:如果能看懂时这些序图的兄弟,就不要听我废话啦。请飘过~~从时序图1看出:1.SCE片选为0时开始发送数据。2.时钟信号SCLK仅在SCE片选为0时有效。3.SDIN数据输入,需要在时钟信号SCLK有效时开始发送数据,且在SCLK的正边缘取样,注意,数据是从高位开始发送的。知道了传送数据的时序,我们需要使用程序来模拟这个时序,从而发送指令控制液晶屏。接下来,看看实例。五、程序实例代码一:/*--------------------------------------------LCD_write_byte:使用SPI接口写数据到LCD输入参数:dt:写入的数据;command:写数据/命令选择;编写日期:20080918----------------------------------------------*/voidLCD_write_byte(unsignedchardt,unsignedcharcommand){unsignedchari;sce=0;dc=command;for(i=0;i8;i++){if(dt&0x80)sdin=1;elsesdin=0;dt=dt1;sclk=0;sclk=1;}dc=1;sce=1;sdin=1;}代码分析:这个是一个写入一个字节数据的模拟时序函数,具有两个参数,dt为要写入的字节,command为数据/命令选择。首先,需要sce拉低电平,开始发送数据。i循环8次,写入8位数据,现以“设置扩展指令集”(即写入0x21)全过程如下:i=0:dt=0x21=00100001bdt&0x80:0010000110000000&00000000=0,则sdin=0(DB7),dt左移1位,dt1=01000010b,模拟时钟信号sclk=0,sclk=1,以使采样i=1:dt=01000010bdt&0x80:0100001010000000&00000000=0,则sdin=0(DB6),dt左移1位,dt1=10000100b,模拟时钟信号sclk=0,sclk=1,以使采样i=2:dt=10000100bdt&0x80:1000010010000000&10000000!=0,则sdin=1(DB5),dt左移1位,dt1=00001000b,模拟时钟信号sclk=0,sclk=1,以使采样i=3:dt=00001000bdt&0x80:0000100010000000&00000000=0,则sdin=0(DB4),dt左移1位,dt1=00010000b,模拟时钟信号sclk=0,sclk=1,以使采样i=4:dt=00010000bdt&0x80:0001000010000000&00000000=0,则sdin=0(DB3),dt左移1位,dt1=00100000b,模拟时钟信号sclk=0,sclk=1,以使采样i=5:dt=00100000bdt&0x80:0010000010000000&00000000=0,则sdin=0(DB2),dt左移1位,dt1=01000000b,模拟时钟信号sclk=0,sclk=1,以使采样i=6:dt=01000000bdt&0x80:0100000010000000&00000000=0,则sdin=0(DB1),dt左移1位,dt1=10000000b,模拟时钟信号sclk=0,sclk=1,以使采样i=7:dt=10000000bdt&0x80:1000000010000000&10000000!=0,则sdin=1(DB0),dt左移1位,dt1=00000000b,模拟时钟信号sclk=0,sclk=1,以使采样过程很罗嗦,不过很简单,呵呵~~可见,这样循环8次,写入了8位数,DB7~DB0=00100001b=0x21,正是“扩展指令集”的指令值。代码二:/*--------------------------------------------LCD_init:初始化LCD_init输入参数:无编写日期:20080918----------------------------------------------*/voidLCD_init(void){res=0;delayms(10);res=1;LCD_write_byte(0x21,0);//1、初始化Lcd,功能设定使用扩充指令LCD_write_byte(0xd0,0);//2、设定液晶偏置电压LCD_write_byte(0x20,0);//3、使用基本指令LCD_write_byte(0x0C,0);//4、设定显示模式,正常显示}代码分析:初始化步骤可以参照芯片手册中的编程示例:代码三:/*-----------------------------------------------------------------------LCD_write_char:显示英文字符输入参数:c:显示的字符;编写日期:2004-8-10最后修改日期:2004-8-10-----------------------------------------------------------------------*/voidLCD_write_char_my(unsignedchar*font){unsignedchari;for(i=0;i6;i++)LCD_write_byte(font[i],1);}代码分析:我们可以使用字模软件,求出一个6*8大小的字符“A”,该组值为:unsignedcharA[6]={0x00,0x7C,0x12,0x11,0x12,0x7C};这些很容易理解,还原看一下:上面的矩阵,就是一个字母A,可见只要把这组值写入即可以显示“A”。最后,到这里,我们已经学会了Nokia5110液晶屏的原理和基本控制。是不是觉得很简单。呵呵~~~希望帮到大家,写得不好,请见谅,写的不对,望指正!

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功