为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Nokia5110液晶屏

2017-10-16 11页 doc 128KB 28阅读

用户头像

is_212655

暂无简介

举报
Nokia5110液晶屏Nokia5110液晶屏 Nokia5110液晶屏完全新手学习笔记(一) 2人收藏此文章, 收藏此文章 发表于6个月前 , 已有1440次阅读 共1个评论 2人收藏此文章 小Jay已经很久没有接触嵌入式了,这些天在学习51,还故意买了块Nokia 5110液晶屏来玩玩(因为便宜吧,嘻嘻~)。 一开始,小Jay不才,看5110芯片资料一头雾水,囧~不过呢,小Jay还是很努力的,经过几番研究,终于有些眉目,其实5110也并不难的。此文提供给和我一样的鸟哥参考,希望能帮得上忙。(*^__^*) 嘻嘻 声明: 1、本文章用于...
Nokia5110液晶屏
Nokia5110液晶屏 Nokia5110液晶屏完全新手学习笔记(一) 2人收藏此文章, 收藏此文章 发表于6个月前 , 已有1440次阅读 共1个评论 2人收藏此文章 小Jay已经很久没有接触嵌入式了,这些天在学习51,还故意买了块Nokia 5110液晶屏来玩玩(因为便宜吧,嘻嘻~)。 一开始,小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+)的PB I/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的程序默认接线为: sbit sce = P1^3; //片选 sbit res = P1^2; //复位,0复位 sbit dc = P1^6; //1写数据,0写指令 sbit sdin = P1^5; //数据 sbit sclk = 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种,分别是:显示空白,普通模式,开所有显示段,反转映象模式。这些模式分别使用D and E来组合控制。 这样,我们控制显示为“普通模式”, 那么D要为1,E要为0, 这时DB7~DB0分别为 0000 1100b,即指令值为0x0C。 第三条(红色横线3),写入数据指令: 写入数据,首先D/C必须为1,表示现在是写入数据RAM模式,DB7~DB0就是相应的数据值。 到这里,我们知道了5110液晶屏是使用这样的指令集来控制和显示数据的。那么,我们如何把指令值写进去呢, 四、时序图 没错,要向液晶屏写入数据,我们需要通过模拟一个串行总线来写入数据。 先来看看传送一个字节(指令)的时序图: 如果能看懂时这些序图的兄弟,就不要听我废话啦。请飘过~~ 从时序图1看出: 1. SCE片选为0时开始发送数据。 2. 时钟信号SCLK仅在SCE片选为0时有效。 3. SDIN数据输入,需要在时钟信号SCLK有效时开始发送数据,且在SCLK的正边缘取样, 注意,数据是从高位开始发送的。 知道了传送数据的时序,我们需要使用程序来模拟这个时序,从而发送 指令控制液晶屏。 接下来,看看实例。 五、程序实例 代码一: /*-------------------------------------------- LCD_write_byte: 使用SPI接口写数据到LCD 输入参数:dt:写入的数据; 命令选择; command :写数据/ 编写日期:20080918 ----------------------------------------------*/ void LCD_write_byte(unsigned char dt, unsigned char command) { unsigned char i; sce=0; dc=command; for(i=0;i<8;i++) { if(dt&0x80) sdin=1; else sdin=0; dt=dt<<1; sclk=0; sclk=1; } dc=1; sce=1; sdin=1; } 代码分析: 这个是一个写入一个字节数据的模拟时序函数,具有两个参数,dt为要写入的字节,command为数据/命令选择。 首先,需要sce拉低电平,开始发送数据。 i循环8次,写入8位数据,现以“设置扩展指令集”(即写入0x21)全过程如下: , i = 0:dt = 0x21 = 0010 0001 b dt & 0x80: 0010 0000 1000 0000 & 0000 0000 = 0,则sdin = 0 (DB7), dt左移1位,dt<<1 = 0100 0010 b, 模拟时钟信号sclk = 0, sclk = 1,以使采样 , i = 1: dt = 0100 0010b dt & 0x80: 0100 0010 1000 0000 & 0000 0000 = 0, 则sdin = 0 (DB6), dt左移1位,dt<<1 = 1000 0100 b, 模拟时钟信号sclk = 0, sclk = 1,以使采样 , i = 2: dt = 1000 0100b dt & 0x80: 1000 0100 1000 0000 & 1000 0000 != 0,则sdin = 1 (DB5), dt左移1位,dt<<1 = 0000 1000 b, 模拟时钟信号sclk = 0, sclk = 1,以使采样 , i = 3:dt = 0000 1000b dt & 0x80: 0000 1000 1000 0000 & 0000 0000 = 0,则sdin = 0 (DB4), dt左移1位,dt<<1 = 0001 0000 b, 模拟时钟信号sclk = 0, sclk = 1,以使采样 , i = 4:dt = 0001 0000b dt & 0x80: 0001 0000 1000 0000 & 0000 0000 = 0,则sdin = 0 (DB3), dt左移1位,dt<<1 = 0010 0000 b, 模拟时钟信号sclk = 0, sclk = 1,以使采样 , i = 5:dt = 0010 0000b dt & 0x80: 0010 0000 1000 0000 & 0000 0000 = 0,则sdin = 0 (DB2), dt左移1位,dt<<1 = 0100 0000 b, 模拟时钟信号sclk = 0, sclk = 1,以使采样 , i = 6:dt = 0100 0000b dt & 0x80: 0100 0000 1000 0000 & 0000 0000 = 0,则sdin = 0 (DB1), dt左移1位,dt<<1 = 1000 0000 b, 模拟时钟信号sclk = 0, sclk = 1,以使采样 , i = 7:dt = 1000 0000b dt & 0x80: 1000 0000 1000 0000 & 1000 0000 != 0,则sdin = 1 (DB0), dt左移1位,dt<<1 = 0000 0000 b, 模拟时钟信号sclk = 0, sclk = 1,以使采样 过程很罗嗦,不过很简单,呵呵~~ 可见,这样循环8次,写入了8位数,DB7~DB0 = 0010 0001b = 0x20,正是“扩展指令集”的指令值。 代码二: /*-------------------------------------------- LCD_init: 初始化LCD_init 输入参数:无 编写日期:20080918 ----------------------------------------------*/ void LCD_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 --------------------------------------------------------------------- --*/ void LCD_write_char_my(unsigned char *font) { unsigned char i; for (i=0; i<6; i++) LCD_write_byte(font[i], 1); } 代码分析: 我们可以使用字模软件,求出一个6*8大小的字符“A”,该组值为: unsigned char A[6] = {0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C}; 这些很容易理解,还原看一下: 上面的矩阵,就是一个字母"A",可见只要把这组值写入即可以显示“A”。
/
本文档为【Nokia5110液晶屏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索