1、2) 接口简单,仅四根I/O线即可驱动,LCD1602需11根I/O线,LCD12864需12根。3) 速度快,是LCD12864的20倍,是LCD1602的40倍.4) Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。可以在市场上买到Nokia5110的裸屏和带PCB的Nokia5110屏幕,因为Nokia5110是不带背光的,所以通常商家会在PCB上按了几个背光LED,上电就能亮,建议大家还是买那种连上PCB的5110。Nokia5110原理图:商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动51
2、10了.Nokia5110和Nokia3110是兼容的,用的都是同一款驱动芯片PHILIPS PCD8544.(1) SPI接口时序写数据/命令 Nokia5110(PCD8544)的通信协议是一个没有MISO只有MOSI的SPI协议,如果单片机有富裕的SPI接口,也可以利用硬件SPI,但通常没有必要,只需要软件程序模拟即可。/* 函数名称:LCD_write_byte函数功能:模拟SPI接口时序写数据/命令LCD入口参数:data :写入的数据; command :写数据/命令选择;出口参数:无 备 注: */void LCD_write_byte(unsigned char dat, un
3、signed char command) unsigned char i; LCD_CE = 0; /5110片选有效,允许输入数据 if (command = 0) /写命令 LCD_DC = 0; else LCD_DC = 1; /写数据 for(i=0;i8;i+) /传送8bit数据 if(dat0x80) SDIN = 1; else SDIN = 0; SCLK = 0; dat = dat 1; SCLK = 1; LCD_CE = 1; /禁止5110 管脚D/C(LCD_DC)用于选择写的是命令(D/C=0)还是数据(D/C=1).(2) Nokia5110的初始化接通电源
4、后,内部寄存器和RAM的内容是不确定的,这需要一个RES低电平脉冲复位一下。当VDD变为高电平,达到VDDmin(或更高)之后,最多100ms,RST输入低电平(电平幅度0.3VDD)。5110复位时序/* 函数名称:LCD_init5110初始化入口参数:无备 注:*/void LCD_init(void) LCD_RST = 0; / 产生一个让LCD复位的低电平脉冲 delay_1us(); LCD_RST = 1; / 关闭LCD LCD_CE = 1; / 使能LCD LCD_write_byte(0x21, 0); / 使用扩展命令设置LCD模式 LCD_write_byte(0x
5、c8, 0); / 设置液晶偏置电压 LCD_write_byte(0x06, 0); / 温度校正 LCD_write_byte(0x13, 0); / 1:48 LCD_write_byte(0x20, 0); / 使用基本命令,V=0,水平寻址 LCD_clear(); / 清屏 LCD_write_byte(0x0c, 0); / 设定显示模式,正常显示 (3)设置Nokia5110液晶的坐标Nokia5110(PCD8544)的命令集:命令字符解释:要注意的是“功能设置命令的“H”和“V”.H=0使用基本指令集命令,H=1使用扩展指令集命令。V=0水平寻址,V=1垂直寻址。 48*8
6、4点阵的格式如上图,数据以字节8bit为单位下载到PCD8544的4884bit显示数据RAM矩阵.列通过地址指针寻址,地址范围为X 083(1010011),Y 05(101).地址不允许超过这个范围。 在垂直寻址(V=1),Y地址在每个字节之后递增,经最后的Y地址(Y=5)之后,Y绕回0,X递增到下一列的地址。 在水平寻址模式(V=0),X地址在每个字节之后递增,经最后的X地址(X=83)之后,X绕回0,Y递增到下一行的地址.经每一个最后地址之后(X=83,Y=5),地址指针绕回地址(X=0,Y=0)。/* LCD_set_XY设置LCD坐标函数X :083 Y :05*/void LCD
7、_set_XY(unsigned char X, unsigned char Y) LCD_write_byte(0x40 | Y, 0); / column LCD_write_byte(0x80 | X, 0); / row(4)显示英文字符英文字符占用68个点阵,通过建立一个ASCII的数组font6x86来寻址。而这个数字的行号对应(字符ASCII码-32).ASCII码表如下:/*/ LCD_write_char显示英文字符c : 显示的字符*/void LCD_write_char(unsigned char c) unsigned char line; c -= 32; /数组的
8、行号 for (line=0; line6; line+) LCD_write_byte(font6x8cline, 1); 如要在NOKIA5110输出大写“A”,对应数组的行号为33,对应的元素为 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C ,水平寻址(V=0)NOKIA5110 一行可以显示14个字符,可以显示六行。(5)显示汉字显示汉字可以采用两种点阵方式,一种是1212点阵,一种是16*16点阵,网上也有一个自动提取字模的小软件“3310液晶显示屏汉字提取程序”,这个小程序只适用于水平寻址(V=0).3310液晶显示屏汉字提取程序 下载:采用1212点阵汉字
9、时,由于不是8的整数倍数,因此行与行之间只能隔开,这样才能完整显示一个汉字。/欢0x0A,0x92,0x62,0x9E,0x02,0x18,0x87,0x74,0x84,0x14,0x0C,0x00,0x02,0x01,0x00,0x04,0x05,0x02,0x01,0x00,0x01,0x02,0x04,0x00,1212点阵(6)显示图形 显示的图形像素大小不能超过84*48。也有一个字模提取小软件Zimo21可以帮助我们得到图像的像素数组.但要注意Zimo21软件的设置,不然的话就显示不了想要的图片。Zimo21设置 要注意选中“纵向取模”“字节倒序”这样才能在5110上显示正确的图像
10、./* LCD_draw_bmp_pixel函数功能:位图绘制函数X、Y :位图绘制的起始X、Y坐标; *map :位图点阵数据; Pix_x :位图像素(长) Pix_y :位图像素(宽)*/void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map, unsigned char Pix_x,unsigned char Pix_y) unsigned int i,n; unsigned char row; /计算位图所占行数 if (Pix_y8=0) /如果为位图所占行数为整数 row=Pix_y/8; else row=Pix_y/8+1; /如果为位图所占行数不是整数 LCD_set_XY(X,Y); for (n=0;nrow;n+) /换行 Pix_x;i+) LCD_set_XY(X+i,Y+n); LCD_write_byte(mapi+nPix_x, 1); 要显示的图像NOKIA5110显示出来的效果