nokia 5110 LCD显示4行汉字库函数

合集下载

单片机之路—诺基亚5110LCD显示屏驱动

单片机之路—诺基亚5110LCD显示屏驱动

单片机之路—诺基亚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的。

LCD5510

LCD5510
//液晶显示控制(不影响DDRAM)
#define LCD_DispBlank LCD_WriteCMD(0x08) //显示空白
#define LCD_DispNormal LCD_WriteCMD(0x0c) //正常显示
#define LCD_DispBlack LCD_WriteCMD(0x09) //显示全黑
//函数声明
void LCD_WriteByte(unsigned char wbyte, unsigned char dat_cmd);
void LCD_SetXY(unsigned char x, unsigned char y);
void LCD_ClrScr(void);
void LCD_ClrRow(unsigned char num);
/*--------------------------------------------------------------*/
//写入一个字节(数据或指令)
//wbyte: 待写入的数据
//dat_cmd: 1-数据, 0-指令
void LCD_WriteByte(unsigned char wbyte, unsigned char dat_cmd)
{
unsigned char i;
LCD_CS = 0; //使能
LCD_DC = dat_cmd; //1-数据 //0-指令
for(i = 8; i; i--) //8位数据, 先高后低
{
if(wbyte & 0x80) {LCD_DIN = 1;}
else {LCD_DIN = 0;}
//液晶字符输出(6*8字体)

诺基亚5110学习(含字库,免财富)

诺基亚5110学习(含字库,免财富)

0x3C, 0x4A, 0x49, 0x49, 0x30, 0x01, 0x71, 0x09, 0x05, 0x03, 0x36, 0x49, 0x49, 0x49, 0x36, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, 0x22, 0x14, 0x08, 0x02, 0x01, 0x51, 0x09, 0x06, 0x32, 0x49, 0x59, 0x51, 0x3E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x49, 0x49, 0x7A, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x46, 0x49, 0x49, 0x49, 0x31, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x07, 0x08, 0x70, 0x08, 0x07, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x7F, 0x41, 0x41, 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55, 0x00, 0x41, 0x41, 0x7F, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x01, 0x02, 0x04, 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,

51单片机带字库12864液晶动态汉字显示C语言源程序

51单片机带字库12864液晶动态汉字显示C语言源程序

51单片机带字库12864液晶动态汉字显示C语言源程序2009-10-17 19:36实验芯片为:AT89S52,带字库液晶屏:12864,实现的目的:动态一个汉字一个汉字显示。

其实和显示汉字的程序一样,只是稍做一下修改即可。

C语言源程序如下:#include <stdio.h>#include <math.h>#include <reg52.h>#include <string.h>sbit RS=P2^4;sbit WRD=P2^5;sbit E=P2^6;sbit PSB=P2^1;sbit RES=P2^3;void TransferData(char data1,bit DI);void delayms(unsigned int n);void delay(unsigned int m);void lcd_mesg003(unsigned char code *addr1);unsigned char code IC_DAT[]={"我是一个中国人啊"};void initinal(void){delay(40);PSB=1; //并口工作模式delay(1);RES=0; //复位delay(1);RES=1; //复位置高delay(10);TransferData(0x30,0);delay(100);TransferData(0x30,0);delay(37);TransferData(0x08,0);delay(100);TransferData(0x10,0);delay(100);TransferData(0x0C,0);delay(100);TransferData(0x01,0);delay(10);TransferData(0x06,0);delay(100);}void main(void){while(1){initinal();//调用LCD字库初始化程序delay(100);lcd_mesg003(IC_DAT);}}void lcd_mesg003(unsigned char code *addr1){unsigned char i;//第一行TransferData(0x80,0);delay(100);for(i=0;i<16;i++){TransferData(*addr1,1);addr1++;delayms(50);}}void TransferData(char data1,bit DI) //传送数据或是命令,当DI=0时,传送命令,当DI=1时,传送数据{WRD=0;RS=DI;delay(1);P0=data1;E=1;delay(1);E=0;}void delayms(unsigned int n){unsigned int i,j;for(i=0;i<n;i++)for(j=0;j<2000;j++);}void delay(unsigned int m){unsigned int i,j;for(i=0;i<m;i++)for(j=0;j<10;j++);}原理就是在显示每个汉字的时候加了一个延时程序,当然可以用定时器来实现,这样的话,不占用CPU处理时间。

LCD5110_Basic库使用教程

LCD5110_Basic库使用教程
LCD5110_Basic 库的使用语句教程 注解: 语句: LCD5110(SCK,MOSI,DC,RST,CS);//设置引脚 LCD5110 myGLCD(8,9,10,11,12); InitLCD([contrast]);//初始化 myGLCD.initLCD(); setContrast(contrast);//设置对比度(0-127) myGLCD.setContrast(70); enableSleep();//设置睡眠状态 myGLCD.enableSleep(); disableSleep();//关闭睡眠状态 myGLCD.disableSleep(); clrScr();//清屏 myGLCD.clrScr(); clrRow(row[,start_x[,end_x]]);//清除行的一部分或者整行 myGLCD.clrRow(5,42); invert(mode);//正常显示 myGLCD.invert(false); invert(mode);//倒置 myGLCD.invert(true); print(st,x,y);//显示字符串 myGLCD.print("Hello Wrold",h[,filler]]);//显示整数 myGLCD.printNumI(num, CENTER, 0); printNumF(num,dec,x,y[,divider[,length[,filler]]]);//显示小数 myGLCD.printNumF(num, 3,CENTER, 0); setFont(fontname);//设置字体大小;字符串 myGLCD.setFont(SmallFont); setFont(fontname);//设置数字小 myGLCD.setFont(MediumNumbers); setFont(fontname);//设置数字大 myGLCD.setFont(BigNumbers); drawBitmap(x,y,data,sx,sy);//用于显示自定义字符 myGLCD.drawBitmap(0,0,bitmap,32,32); 打开5110的反相绘制功能 myGLCD.invertText(true); 关闭5110的反相绘制功能 myGLCD.invertText(false);

5110四行汉字

5110四行汉字
由图可知由于5110是按字节写的但是12x12的汉字需要15个字节在x方向上没有问题在y方向上就会出现4位的空白而下行字又直接写到整字节上造成了一个4位宽的行间距
由图可知,由于 5110 是按字节写的,但是 12X12 的汉字需要 1.5 个字节,在 x 方向上没有问题,在 Y 方向上就会 出现 4 位的空白,而下行字又直接写到整字节上,造成了一个 4 位宽的行间距。我的解决方案是,在写 0、3 行的 时候,将他们的下半区 8 位存入数组中,当写 2、5 行的时候,将 2、5 行的上半区下移 4 位和 0、3 行写入时保存 的下半区内容或操作再写进 1、4 行,将 2、5 行的上半区上移 4 何 2、5 行的下版区下移 4 位或操作写入第 3、5 行。看上去有点复杂,其实程序挺简单的,缺点就是要占用 2*84 个字节的内存。效果
0x00,0x03,0x00,0x00,0x0F,0x00,0x02,0x03},}, }; uint8 Lcd_First_line_save[84]; uint8 Lcd_third_line_save[84]; void Write_lcd_chinese_string_4line(uint8 x,uint8 y , const char *str) { uint8_t *p = (uint8_t *)str; while(*p != 0) { Lcd_Write_Chinese_Muli_Line(x, y, *(uint16_t *)p); x += 12; p += 2; } } void Write_lcd_chinese_string(uint8 x,uint8 y , const char *str) { uint8_t *p = (uint8_t *)str; while(*p != 0) { Write_lcd_chinese(x, y, *(uint16_t *)p); x += 12; p += 2; } } void Write_lcd_chinese(uint8 x,uint8 y , uint16 str) { uint8 nexthalf = 0; uint8 n=0,xx=0; uint8 number; uint8_t *p = (uint8_t *)str; for(n=0;n<10;n++) { if(str == hanzi[n].hanzi) { number=n; break; } } for(n=0;n<2;n++) { uint8 t=0; uint8 s=0; for(xx=x;xx<x+12;xx++) { LCD_set_XY(xx,y+n); LCD_write_byte(hanzi[number].code[s+nexthalf],1); Lcd_First_line_save[xx]=hanzi[number].code[s+nexthalf]; s++; } nexthalf = 12; s=0; } } void Lcd_Write_Chinese_Muli_Line(uint8 x,uint8 y , uint16 str)

诺基亚5110液晶使用及显示程序实例

诺基亚5110液晶使用及显示程序实例

该模块具有以下特点:●84x48 的点阵LCD,可以显示4 行汉字,●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9 条。

支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。

●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。

●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。

●采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。

LPH7366 的这些特点非常适合于电池供电的便携式通信设备和测试设备中C8051F学习笔记:Nokia 5110驱动Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110,用于开发的设备显示,取代LCD1602。

使用Nokia5110液晶的四大理由1)性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉字,30个字符。

Nokia5110裸屏仅8.8元,LCD1602一般15元左右,LCD 12864一般50~70元。

2)接口简单,仅四根I/O线即可驱动,LCD1602需11根I/O线,LCD12864需12根。

3)速度快,是LCD12864的20倍,是LCD1602的40倍。

4)Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。

可以在市场上买到Nokia5110的裸屏和带PCB的Nokia5110屏幕,因为N okia5110是不带背光的,所以通常商家会在PCB上按了几个背光LED,上电就能亮,建议大家还是买那种连上PCB的5110。

Nokia5110原理图:商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动5110了。

nokia 5110 LCD显示4行汉字库函数

nokia 5110 LCD显示4行汉字库函数
for(xAxis = x; xAxis < x+6; xAxis++) /* 2,5 行字节上移 2 位 */ { lcd_set_xy(xAxis,line_temp[y]);
writeByte = font6x8[str][shiftCnt]>>2; lcd_write_byte(DATA, writeByte); shiftCnt++; } } }
} if(line_temp[y] == 3 ) { Lcd_third_line_save[x_Axis] = cnCharStr[number].cnData[shiftCnt +
} shiftCnt++; } nexthalf = 12; shiftCnt = 0; }
作 */
if(line_temp[y] == 2 || line_temp[y] == 5) /* 处理 2、4 行的情况,需特殊处理 */ {
Lcd_First_line_save[xAxis] = font6x8[str][shiftCnt]; } if(line_temp[y] == 3 ) {
Lcd_third_line_save[xAxis] = font6x8[str][shiftCnt]; } shiftCnt++; } shiftCnt = 0; }
for(x_Axis = x; x_Axis < x+12; x_Axis++) /* 上半区字节下移 4 位 | 上行字符或操
{ lcd_set_xy(x_Axis,line_temp[y] - 1);
if(line_temp[y] == 2 ) {

诺基亚5110LCD驱动程序

诺基亚5110LCD驱动程序

/******************************************************************** NOKIA5110(3310)液晶屏驱动程序** 晶振频率:11.0592M** 线路->单片机实验开发板A******************************************************************/#include/*-- -------定义Nokia5110 引角---- -----*/sbit sclk = P3^3;sbit sdin = P3^4;sbit dc = P3^5;sbit sce = P3^7;sbit res = P3^6;void initNokia5110(void); /* NOkia 5110 初始化*/void clearNokia5110(void); /* 清除屏幕整屏清空*/void Display_char(unsigned char x,unsigned char y,char *s); /* 写字符x 设置显示字符的X位置; y 设置显示字符的Y 位置*s 显示字符的首地址*/void Display_num(unsigned char x,unsigned char y,char s); /* 写数字x 设置显示字符的X位置; y 设置显示字符的Y 位置s 显示数字*/void write_byte(unsigned char data1); /* 发送1字节到NOkia 5110 */void setxy(unsigned char x,unsigned char y); /* 设置显示坐标x 行坐标(0-83) unsigned char y 列坐标(0-5) */void delay(unsigned int time);void main(void){initNokia5110(); /* NOkia 5110 初始化*/clearNokia5110(); /* 清除屏幕整屏清空*/Display_char(1,2,""); /* 写字符x 设置显示字符的X位置; y 设置显示字符的Y位置*s 显示字符的首地址*/Display_char(10,4,"NOKIA5510"); /* 写字符x 设置显示字符的X位置; y 设置显示字符的Y位置*s 显示字符的首地址*///Display_num(0,0,9); // 写数字while(1);}/****************************5110 0-9字模**************************//*函数原型:无/*函数功能:0-9字模/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/ unsigned char code asc2tab[][6] ={{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },// sp{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },// !{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },// "{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },// #{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },// ${ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },// %{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },// &{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },// '{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },// ({ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },// ){ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },// *{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },// +{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },// ,{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },// -{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },// .{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },// /{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },// 0{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },// 1{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },// 2{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },// 3 { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },// 4 { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },// 5 { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },// 6 { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },// 7 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },// 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },// 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },// : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },// ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },// < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },// = { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },// > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },// ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },// @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },// A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },// B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },// C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },// D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },// E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },// F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },// G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },// H{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },// I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },// J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },// K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },// L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },// M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },// N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },// O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },// P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },// Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },// R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },// S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },// T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },// U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },// V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },// W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },// X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },// Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },// Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },// [ { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },// 55 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },// ] { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },// ^{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },// _ { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },// ' { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },// a { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },// b { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },// c { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },// d { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },// e { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },// f { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },// g { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },// h { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },// i { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },// j { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },// k { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },// l { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },// m { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },// n { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },// o { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },// p { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },// q { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },// r { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },// s { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },// t{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },// u{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },// v{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },// w{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },// x{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },// y{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },// z{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }};/****************************Nokia5110初始化函数**************************//*函数原型:initNokia5110(void)/*函数功能:Nokia5110初始化/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/void initNokia5110(void){delay(10); //系统复位res = 0;delay(2);res = 1;dc = 0;write_byte(0x21); //;芯片是活动的(PD=0) 使用扩展指令集write_byte(0xd5);write_byte(0x20); //;芯片是活动的(PD=0) 使用水平寻址(V=0) 使用基本指令集(H=0) write_byte(0x0c); //;设置显示配置(D=1 E=0)}/****************************Nokia5110清屏函数*********************//*函数原型:void clearNokia5110(void)/*函数功能:Nokia5110清屏/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/void clearNokia5110(void){unsigned int i,j;for(i=0;i<6;i++){setxy(j,i);dc = 1;while (j<84){write_byte(0x00);j++;}j = 0;}}/*--------------------------------------;模块名称:Display_char(unsigned char x,unsigned char y,char *s);;功能:写字符;占用资源:;参数说明:x 设置显示字符的X位置; y 设置显示字符的Y位置*s 显示字符的首地址;创建日期:2001.01.19;版本:VER 2.0 ★STALI☆;-------------------------------------*/void Display_char(unsigned char x,unsigned char y,char *s){unsigned char line;setxy(x,y);while(*s){for(line=0;line<6;line++){dc = 1;write_byte(asc2tab[*s - 32][line]);}}sce = 1;}/****************************Nokia5110写数字函数*********************/ /*函数原型:void Display_num(unsigned char x,unsigned char y,char s)/*函数功能:Nokia5110写数字/*输入参数:x 设置显示字符的X位置; y 设置显示字符的Y位置s 显示数字/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/ void Display_num(unsigned char x,unsigned char y,char s){unsigned char line;setxy(x,y);dc = 1;for(line=0;line<6;line++){write_byte(asc2tab[s+16][line]);}sce = 1;}/*************************Nokia5110发送1字节函数*********************/ /*函数原型:void Display_num(unsigned char x,unsigned char y,char s)/*函数功能:发送1字节到NOkia 5110/*输入参数:x 设置显示字符的X位置; y 设置显示字符的Y位置s 显示数字/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/ void write_byte(unsigned char data1){unsigned char i;res = 1;sce = 0;for(i=0;i<8;i++){sdin = (bit) (data1&0x80);;sclk = 1;data1 <<=1;}}/*************************Nokia5110设置显示坐标函数*********************/ /*函数原型:void setxy(unsigned char x,unsigned char y)/*函数功能:设置显示坐标/*输入参数:unsigned char x 行坐标(0-83) unsigned char y 列坐标(0-5)/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/ void setxy(unsigned char x,unsigned char y){dc = 0;write_byte(y|0x40); //设置y轴。

诺基亚5110液晶显示汉字程序

诺基亚5110液晶显示汉字程序

诺基亚5110液晶显示汉字程序默认分类 2009-11-03 21:19 阅读31 评论0字号:大中小包含三个文件,主函数,液晶驱动函数和字符串头文件,用STC单片机在5110液晶上显示“好好学习吧”五个汉字。

提取字模用"Pctolcd2002完美版"软件,字模选项中的设置为列行式+逆向+每行显示16*8+C51格式,可随意更改文字内容。

液晶文件lcd.csbit RST_5110=P1^4; //low activesbit CE_5110=P1^3; //low activesbit DC_5110=P1^2; //0=command,1=datasbit SDI_5110=P1^1; //rise edge enablesbit SCK_5110=P1^0; //clock#define DATA 1#define CMD 0unsigned char code asc2[][6] ={{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // ${ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ({ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ){ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines};unsigned char code hanzi[][16]={{0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xF2,0x8A,0x86,0x82,0x80,0x00},{0x80,0x43,0x22,0x14,0x0C,0x73,0x20,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00},/*"好",0*/ {0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xF2,0x8A,0x86,0x82,0x80,0x00},{0x80,0x43,0x22,0x14,0x0C,0x73,0x20,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00},/*"好",1*/ {0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00}, {0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00},/*"学",2*/ {0x00,0x00,0x02,0x02,0x0A,0x12,0x22,0x62,0x02,0x82,0x82,0x42,0x02,0xFE,0x00,0x00},{0x00,0x00,0x04,0x0C,0x04,0x02,0x02,0x01,0x01,0x00,0x20,0x40,0x80,0x7F,0x00,0x00},/*"习",3*/{0xFE,0x02,0x02,0x02,0xFE,0x00,0xFE,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0xFE,0x00}, {0x07,0x01,0x01,0x01,0x03,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00},/*"吧",0*/};void Delay_us(uchar t)//延时{while(--t);}void Write_Byte_5110(uchar Data ,bit CMD_DATA){uchar i;CE_5110=0; //Enable LCDDC_5110=CMD_DATA;//写命令还是写数据for(i=0;i<8;i++){SCK_5110=0;if(Data & 0x80) //MSB first高位优先SDI_5110=1;//传输1elseSDI_5110=0;//传输0SCK_5110=1;//始终为1时锁存Data<<=1;}SCK_5110=0;//时钟清零CE_5110=1; //disable LCD关液晶使能}void Clear_5110(void){uint i;Write_Byte_5110(0x80,CMD);//写地址for(i=0;i<504;i++){Write_Byte_5110(0x00,DATA);//set the addr as 0x00}}void Set_R_C_5110(uchar R,uchar C) //R=0~5;C=0~83{if(R<=5 && C<=83){Write_Byte_5110(0x40|R,CMD);//写行地址Write_Byte_5110(0x80|C,CMD);//写列地址}}void Init_5110(void){Delay_us(1); //reset LCDRST_5110=0;//复位清零Delay_us(1);RST_5110=1;Write_Byte_5110(0x21,CMD); //扩展指令Write_Byte_5110(0xc8,CMD); //设置偏压Write_Byte_5110(0x20,CMD); //标准指令Clear_5110();Write_Byte_5110(0x0c,CMD); //标准显示模式}void Write_Char_5110(uchar Char){uchar i,j;i=Char-0x20;for(j=0;j<6;j++){Write_Byte_5110(asc2[i][j],DATA);}}void Write_String_5110(uchar *P){uchar i;for(i=0;i<strlen(P);i++){Write_Char_5110(P[i]);}}void Write_hanzis_5110(){uchar i,j;for(i=0;i<10;i=i+2){for(j=0;j<16;j++){Write_Byte_5110(hanzi[i][j],DATA);}}}void Write_hanzix_5110(){uchar i,j;for(i=1;i<10;i=i+2)for(j=0;j<16;j++){Write_Byte_5110(hanzi[i][j],DATA);}}}主函数main.c#include <reg51.h>#include <string.h>#define uchar unsigned char#define uint unsigned int#include"lcd.c"uchar flag,flag1;unsigned char buff[14]="0123456789abcd";unsigned char buff1[14]="---------";void delay(unsigned int z){unsigned int x;unsigned char y;for(x=z;x>0;x--)for(y=20;y>0;y--);}void main(void){delay(500);Init_5110(); //初始化LCD// Write_Byte_5110(0x0c,CMD); //标准显示模式 Set_R_C_5110(1,4);Write_String_5110(buff1);Set_R_C_5110(0,0);Write_String_5110(buff);Set_R_C_5110(2,0);Write_String_5110(buff);// Write_Byte_5110(0x0d,CMD); //反显Set_R_C_5110(3,0);Write_hanzis_5110();Set_R_C_5110(4,0);Write_hanzix_5110();while(1);。

lcd字库调用实例 -回复

lcd字库调用实例 -回复

lcd字库调用实例-回复如何调用lcd字库。

以下是一步一步的实例,来帮助你了解如何调用lcd 字库。

第一步:确定所需的字库类型在调用LCD字库之前,首先需要确定你所需的字库类型。

目前常见的字库类型有ASCII字库和汉字字库。

ASCII字库包含英文字母、数字、符号等字符,而汉字字库则包含中文字符。

你可以根据自己的需求来选择合适的字库类型。

第二步:获取字库文件在调用LCD字库之前,你需要获取相应的字库文件。

字库文件可以是二进制文件或文本文件,取决于字库厂商的提供方式。

一般来说,你需要向字库厂商购买或下载字库文件,并保存到你的开发环境中。

第三步:导入字库文件在调用LCD字库之前,你需要将字库文件导入到你的开发环境中。

具体的导入方式取决于你所使用的开发环境和字库类型。

以下是两种常见的导入方式:1. 导入ASCII字库:- 如果你的开发环境支持导入二进制文件,则可以直接将ASCII字库文件导入到你的项目文件中。

- 如果你的开发环境支持导入文本文件,则需要将ASCII字库文件转换成特定的格式(如C数组或数组表格),然后再导入到你的项目文件中。

2. 导入汉字字库:- 如果你的开发环境支持导入二进制文件,则可以直接将汉字字库文件导入到你的项目文件中。

- 如果你的开发环境支持导入文本文件,则需要将汉字字库文件转换成特定的格式(如C数组或数组表格),然后再导入到你的项目文件中。

一般来说,你可以使用字库厂商提供的转换工具来完成这个步骤。

第四步:调用字库函数一般来说,调用LCD字库的方式取决于你所使用的开发环境和字库类型。

以下是两种常见的调用方式:1. 调用ASCII字库:- 如果你导入的是二进制格式的ASCII字库文件,则可以使用特定的函数来直接在LCD屏幕上显示字符。

- 如果你导入的是文本格式的ASCII字库文件,则需要将字符的ASCII 码作为参数,传递给特定的函数来显示字符。

2. 调用汉字字库:- 如果你导入的是二进制格式的汉字字库文件,则可以使用特定的函数来直接在LCD屏幕上显示汉字。

5110LCD小板原理图

5110LCD小板原理图

5110LCD小板原理图:不妥的地方请指出1.增加了74HC165,在不增加任何I/O口的情况下提供8个按键2.板载LCD阻容复位,LCD_reset可以外部控制也可以阻容复位3.背光可以控制4.最少4个I/O端口就可以控制液晶和读取8个按键不放心,按照上图接线进行实物测试结果通过,程序如下:$Device= m16 使用mega16$Stack = 32 堆栈32字节$Clock = 4 时钟4MHz$ShiftOut Data=PORTB.5 ,Clk=PORTB.7,Msb 申明一个简易SPI口$GLCD Nokia3310, SCLK=PORTB.7, SDIN=PORTB.5, DC=PORTB.1, SCE=PORTB.4 3310液晶连接定义$Def RES=PORTB.0 复位脚$LeadChar=" ", Format(3,0) 显示数据格式化$Def SL = PORTB.1 去74HC165锁存$Def led = PORTB.3 去3310背光控制Dim n_key As Byte 保存按键键值Dim n As Byte 显示一个变量n好观察3310有没有运行Dim F0HD As Flash Byte 英文字库F0HDn_key=255Set DDRB.0: Nop 3: Set RES 复位3310LCDSet DDRB.3Reset led 点亮3310背光灯GLcdInit 初始化3310LCDFontSet F0HD 选择字体GLcd(0,5),"" 显示一个字符串DoGLcd(0,2),"key=";n_key 显示键值GLcd(60, 0), n 显示一个变量n好观察3310有没有运行Incr nReset SLSet SL 锁存74HC165Reset DDRB.5 将SDIN变为输入为读取74HC165做准备Set DDRB.7n_key=ShiftIn 获得键值n_key=Not n_keyWaitMs 100Set DDRB.5 将SDIN变为输出为写3310LCD做准备Loop$Include "C:\FastAVR\Nokia3310\F0HD.bas"图片附件:该帖子在2006-1-7 0:26:48 编辑过本站有售:30元/片Nokia 3310手机的点阵LCD模块不仅小巧、省电、驱动容易,而且价钱也便宜。

LCD显示汉字的两种算法分析

LCD显示汉字的两种算法分析

LCD显示汉字的两种算法分析1.1.原因原有的LCD显示汉字函数例程只能显示带背景的汉字,也就是说如果要在图片上显示一个汉字,那就会出现一个矩形框,底色为我们设定的颜色。

而不能实现单独显示汉字,不显示背景的要求。

1.2.代码//x、y字符的一个字符的左上角的坐标/***pointColor:要显示的字符的颜色backColor:字符的背景颜色*pChineseData:字符取模数据***///fontSize :字体大小voidLCD_ShowChinese(u16 x,u16 y,u8 fontSize,u16 pointColor,u16 backColor,u8*pChineseData){u32 i;u8 j=0;/*****************************************************/LCD_ILI9486_CMD(0x 2A); //设置列地址的起始地址LCD_ILI9486_Parameter(x8); LCD_ILI9486_Parameter(x(0xFF));//设置列地址的结束地址LCD_ILI9486_Parameter((x+fontSize-1)8);LCD_ILI9486_Parameter((x+fontSize-1)(0xFF));/************************************* ****************/LCD_ILI9486_CMD(0x2B); //设置行地址的起始地址LCD_ILI9486_Parameter(y8); LCD_ILI9486_Parameter(y(0xFF));//设置行地址的结束地址LCD_ILI9486_Parameter((y+fontSize-1)8);LCD_ILI9486_Parameter((y+fontSize-1)(0xFF));LCD_ILI9486_CMD(0x2C); //写显存的命令for(i=0;i(fontSize*fontSize);i++){if((*pChineseData)(1(7-j))){LCD_ILI9486_Parameter(pointC olor);}else{LCD_ILI9486_Parameter(backColor);}j=j+1;if(j==8){j=0;pChineseData++;}}}1.3.解决思路参照LCD显示字符的函数,不使用一个个数据连续传输,而是使用一个一个画点的办法,这样,在不需要显示汉字的地方可以选择不打点,这样就能实现镂空汉字的效果。

(整理)诺基亚LCD5110液晶接线图和程序

(整理)诺基亚LCD5110液晶接线图和程序

该模块具有以下特点:●84x48 的点阵LCD,可以显示4 行汉字,●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9 条。

支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。

●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。

●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。

●采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。

LPH7366 的这些特点非常适合于电池供电的便携式通信设备和测试设备中C8051F学习笔记:Nokia 5110驱动Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110,用于开发的设备显示,取代LCD1602。

使用Nokia5110液晶的四大理由1)性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉字,30个字符。

Nokia5110裸屏仅8.8元,LCD1602一般15元左右,LCD12864一般50~70元。

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的51 10。

Nokia5110原理图:商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动5110了。

Nokia3310 5110液晶显示(使用说明+C程序)

Nokia3310 5110液晶显示(使用说明+C程序)

3.3V的稳压管Nokia5110液晶屏完全新手学习笔记(一)3人收藏此文章, 我要收藏发表于1年前 , 已有3442次阅读共1个评论小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的程序默认接线为:看了这些默认接线,可能有个疑问:“这些位变量(引脚)究竟有什么用呢?”,带着这个疑问,请看5110芯片手册中的引脚说明(重点看红色区域):从这个引脚说明中,我们知道了不同的引脚,对应的功能。

完整的NOKIA-5110液晶51单片机驱动程序

完整的NOKIA-5110液晶51单片机驱动程序

Nokia 5110驱动*说明:本驱动适用于51单片机(5V或3.3V),液晶的VCC接5V 或3.3V修改偏置电压可改变5110点阵显示的亮度5110接5V时偏置电压改为(0xa7,0),接3.3V时改为(0xc0,0)*作者:JK*创建日期:2013/1/26*修改日期:#include <reg52.h>#include "font.h"#define uint unsigned int#define uchar unsigned charIO口定义区sbit LCD_RST = P0^0;sbit LCD_CE = P0^1;sbit LCD_DC = P0^2;sbit LCD_DIN = P0^3;sbit LCD_CLK = P0^4;函数声明区void LCD_Init(void);void LCD_WriteByte(unsigned char dat, unsigned char command);void LCD_Set_XY(unsigned char X, unsigned char Y);void LCD_Clear(void);void LCD_WriteChar(unsigned char x,unsigned char y,unsigned char c); void LCD_WriteString(unsigned char X,unsigned char Y,char *s);void LCD_WriteNum(unsigned char X,unsigned char Y,unsigned int num);void LCD_Write_12X16Font(unsigned char x,unsigned char y,unsigned char c[2]);void LCD_DrawPicture(unsigned char X,unsigned char Y,unsigned char const *map,unsigned char Pix_x,unsigned char Pix_y);*函数名:LCD_Init*功能:初始化LCD*参数:无*返回值:无*备注:void LCD_Init(void){unsigned char i;LCD_RST=0; //复位for(i=0;i<150;i++);LCD_RST=1;LCD_WriteByte(0x21, 0); // 使用扩展命令设置LCD模式LCD_WriteByte(0xc0, 0); // 设置偏置电压,修改可改变5110点阵显示的亮度/*5110接5V时偏置电压改为(0xa7,0),接3.3V时改为(0xc0,0)*/LCD_WriteByte(0x20, 0); // 使用基本命令。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(x_Axis = x; x_Axis < x+12; x_Axis++) /* 上半区字节下移 4 位 | 上行字符或操
{ lcd_set_xy(x_Axis,line_temp[y] - 1);
if(line_temp[y] == 2 ) {
writeByte = cnCharStr[number].cnData[shiftCnt + nexthalf]<<4 | Lcd_First_line_save[x_Axis];
} if(line_temp[y] == 5 ) {
writeByte = cnCharStr[number].cnData[shiftCnt + nexthalf]<<4 | Lcd_third_line_save[x_Axis];
} lcd_write_byte(DATA, writeByte); shiftCnt++; } shiftCnt = 0;
for(x_Axis = x; x_Axis < x+12; x_Axis++) /* 下半区字节上移 4 位 | 下半区字节上 移 4 位 */
{ lcd_set_xy(x_Axis,line_temp[y]);
writeByte = cnCharStr[number].cnData[shiftCnt + nexthalf]>>4 | cnCharStr[number].cnData[shiftCnt + 12]<<4;
uint8_t *p = str; /* while(*p != 0) /* 循环输出一行所有英文字符 */ while(length--) {
lcd_write_en_shift(axis_x, axis_y, *p); /* p 对应当前英文字符 */
axis_x += 6; /* 坐标左移一个英文字符的位移 */ p++; } }
@brief
写带移位的英文字符
@param[in, in, in]
@return void
@details 整个屏幕能写六行英文,每行能写 14 个英文字符。该函数实现在一行中将字 符
做细微调整用,让中英文在同一行中显示更整齐,好看。
@note 口模拟 SPI
MODE_COMM 为 1 表示数据传输采用 SPI 模块,为 0 表示数据传输采用 I/O
/**************************************************************************//*!
@brief
写带移位的英文字符
@param[in, in, in]
@return void
@details 整个屏幕能写六行英文,每行能写 14 个英文字符。该函数实现在一行中将字 符
解决方案:四行分四次写。处理分两大部分,先写 0,3 行,同时将 0,3 行汉字后半字节 存入 8 位数组。后写 2,5 行,并将 0,3 行下半部分与 2,5 上半部分下移 4 位后或操作后 写入 1,4 行。
缺点:就是要占用 RAM 区 2*84 个字节的内存。
3、主要部分代码
1)英文处理
/**************************************************************************//*!
@return void
@details 整个屏幕能写 4 行汉字,每行能写 7 个汉字字符。由于一个汉字在 LCD 上显 示需
要占用 1.5Byte,所以需要对行数据进行重新组合调整。
@note
@warning *************************************************************************** ***/ void lcd_write_cn_shift(uint8_t x, uint8_t y, uint16_t str) { uint8_t nexthalf = 0; uint8_t shiftCnt = 0,cnCharIndex = 0,x_Axis = 0; uint8_t number, writeByte; uint8_t *p = (uint8_t *)str;
做细微调整用,让中英文在同一行中显示更好看,整齐。
@note 口模拟 SPI
MODE_COMM 为 1 表示数据传输采用 SPI 模块,为 0 表示数据传输采用 I/O
@warning *************************************************************************** ***/ void lcd_write_enStr_shift(uint8_t axis_x,uint8_t axis_y, uint8_t *str, uint8_t length) {
Nokia 5110 显示 4 行汉字库函数
1、芯片简介
Nokia/诺基亚 5110 LCD 原理应用资料:LPH7366 是 NOKIA 公司生产的可用于其 5110、 6150,6100 等系列移动电话的液晶显示模块,国内厂家也生产有类似的兼容产品。该 产品除应用于移动电话外,也可广泛应用于各类便携式设备的显示系统。与其它类型的 产品相比,该模块具有以下特点: ●84x48 的点阵 LCD,可以显示 4 行汉字, ●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内
Lcd_First_line_save[xAxis] = font6x8[str][shiftCnt]; } if(line_temp[y] == 3 ) {
Lcd_third_line_save[xAxis] = font6x8[str][shiftCnt]; } shiftCnt++; } shiftCnt = 0; }
2、思路如下:
由图可知,由于 5110 是按字节写的,一个英文字符由 6*8 位组成(即,x 方向 6 位,y 方向 8 位),而完整显示一个汉子需要 12*12 位组成。在 x 方向上没有问题,在 Y 方向 上就会出现 4 位的空白。由于 NOKIA 写 byte 都是按字节索引,所以按 0≤Y≤5 索引写 汉字将会出现第一行汉子与第二行汉字之间空 4 位。
{ lcd_set_xy(x_Axis,line_y] + cnCharIndex);
writeByte = cnCharStr[number].cnData[shiftCnt + nexthalf]; lcd_write_byte(DATA, writeByte); if(line_temp[y] == 0 ) { Lcd_First_line_save[x_Axis] = cnCharStr[number].cnData[shiftCnt +
if(line_temp[y] == 2 || line_temp[y] == 5)/* 处理 2、4 行的情况,需特殊处理 */ {
for(xAxis = x; xAxis < x+6; xAxis++) /* 1,4 行上半区字节下移 6 位 | 上行字符上 移 6 位 或操作 */
{ lcd_set_xy(xAxis,line_temp[y] - 1);
if(line_temp[y] == 2 ) {
writeByte = font6x8[str][shiftCnt]<<6 | Lcd_First_line_save[xAxis]>>6; /* 向上移动 6 格 */
}
if(line_temp[y] == 5 ) {
writeByte = font6x8[str][shiftCnt]<<6 | Lcd_third_line_save[xAxis]>>6; } lcd_write_byte(DATA, writeByte); shiftCnt++; } shiftCnt = 0;
for(xAxis = x; xAxis < x+6; xAxis++) /* 2,5 行字节上移 2 位 */ { lcd_set_xy(xAxis,line_temp[y]);
writeByte = font6x8[str][shiftCnt]>>2; lcd_write_byte(DATA, writeByte); shiftCnt++; } } }
str -= 32;
if(line_temp[y] == 0 || line_temp[y] == 3)/* 处理 1、3 行的情况,需保存数据 */ { lcd_set_xy(x,line_temp[y]);
for(xAxis = x; xAxis < x+6; xAxis++) {
writeByte = font6x8[str][shiftCnt]<<2; /* 向下移动 2 格 */ lcd_write_byte(DATA, writeByte); if(line_temp[y] == 0 ) {
for(cnCharIndex = 0; cnCharIndex < CNCHARNUM; cnCharIndex++) /* 查找字符 */ { if(str == *(cnCharStr[cnCharIndex].GBCode)) {
number = cnCharIndex; break; } }
lcd_write_byte(DATA, writeByte); shiftCnt++; } }
相关文档
最新文档