Stm32之Nokia5110液晶显示
- 格式:pdf
- 大小:1.88 MB
- 文档页数:17
单片机之路—诺基亚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的。
电气信息学院基于Nokia5110的液晶屏模块设计摘要:本设计是以单片机STC89C52RC为核心器件的基于Nokia5110液晶屏的电子指南针。
整个系统主要由单片机最小系统,电源输入模块,LCD液晶显示模块,磁阻传感器模块和串口电路部分构成。
通过用C语言编程使单片机处理磁阻传感器接收到的X轴和Y轴上的磁场分量,转换为距南方的角度后,通过Nokia5110动态显示。
Nokia5110是一块84×48 的LCD点阵型液晶显示屏,如果字模是12×16 大小的字符,则能显示3 行,每行显示7个汉字。
每个字符都分为上下两部分进行扫描,在每行扫描时以一列8位为单位进行扫描。
通过原理图设计、软件仿真、制作硬质板电路,硬件调试,证明了本设计的可行性。
关键词:Nokia5110,STC89C52RC,磁阻传感器HMC5883L,电子指南针Abstract: This design is a digital compass based on Nokia5110, with the MCU STC89C52RC as its core. The system mainly consists of a MCU minimum system, a power input module, a LCD module, a magnetic sensor module and a serial port module. Through C language programming, the MCU processes the data on the X and Y axes, which is collected by the magnetic sensor. Then it is transformed into an angle indicating its relative direction to the south pole in degrees. Finally, it is shown on the Nokia5110 dynamically. The Nokia5110 is an LCD with 84×48 dots, if a character is displayed with 12×16 dots, then it can display 3 lines, with each line comprising 7 characters. The characters are scanned in two halves, the upper half and the lower half. For each half, 8 bits( a byte)are scanned as a unit at a time. Through schematic design, software simulation, making the printed circuit board and hardware debugging, the feasibility of this design has been proved.Keywords:Nokia5110, STC89C52RC, magnetic sensor, digital compass目录1 前言 .............................................................................................. 错误!未定义书签。
XS128单片机实验:诺基亚5110液晶显示/*********包含的头文件*****************************/#include ;/* common defines and macros */#include "derivative.h"/* derivative-specific definitions */#include "WQ.h"#include "Font6_8.h"#include "Bitmap.h"#include "Font16_16.h"#include "Font8_16.h"/****************宏定义*****************************/#define SCLKPTM_PTM4#define SDINPTM_PTM3#define LCD_DC PTM_PTM5#define LCD_CE PTM_PTM2#define LCD_RES PTM_PTM1#define LEDPTM_PTM0/****************函数申明***************************/void LCD_int(void);void LCD_write_byte(uchar dt,uchar command); void LCD_write_char(uchar *font);void LCD_set_XY(uchar x,uchar y);void LCD_clear(void);/*1.********************************************* *****/// LCD_write_byte: 使用spi接口写数据到LCD// 输入参数:dt 写入的数据// 使用I/o口模拟SPI总线通讯发送一个字节数据到LCD显示// Command : 写数据/命令选择// Data: 2013、4、26/************************************************ ***/void LCD_write_byte(uchar dt,uchar command) { uchar i;LCD_CE=0;//使能LCDdelay_us(40);//延时30us;if(command==0)//判断发送数据还是发送命令LCD_DC=0;elseLCD_DC=1;delay_us(40);//延时30us;for(i=0;i<8;i++){if(dt&0x80)SDIN=1;// 发送高位elseSDIN=0;delay_us(40);//延时30us;SCLK=0;dt=dt<<1;SCLK=1;}LCD_CE=1;//关闭LCD}/*2.********************************************* ****/// 函数 :LCD_set_xy// 功能 :设置LCD坐标函数// 说明:x:横坐标 Y纵坐标// Date:2013/4/26/************************************************ */void LCD_set_XY(uchar x,uchar y){LCD_write_byte(0x40|y,0);//列按位或设置y坐标LCD_write_byte(0x80|x,0);//行按位或设置x坐标}/*3.********************************************/ // LCD_write_char() ;显示英文字符// 输入参数:C:显示的字符// Date:2013/4/26/********************************************/void LCD_write_char (uchar *font) {uint i;for(i=0;i<6;i++)LCD_write_byte(font[i],1);}/*4.********************************************* /// 函数:LCD_clear// 功能:清屏// 参数:无// Date:2013/4/26/************************************************ /void LCD_clear(void) {uint i;LCD_write_byte(0x0c,0);LCD_write_byte(0x80,0);for(i=0;i<504;i++) {LCD_write_byte(0,1);}}/************************************************ */// LCD_init: LCD初始化// 输入参数无// Date :2013、4、26/************************************************ /void LCD_int(void) {LCD_RES=0;delay_ms(2);LCD_RES=1;LCD_write_byte(0x21,0);//初始化LCD,功能设定使用扩充指令LCD_write_byte(0xd0,0);//设定液晶偏置电压; LCD_write_byte(0x20,0);//使用基本指令LCD_write_byte(0x0c,0);//设定显示模式,正常显示}/************************************************ ****/// 主函数:void mian// 功能:在诺基亚5110液晶屏上显示字符// 作者:wangqi// 时间;2013、4、26/************************************************ ****/void main(){unsigned charA[6]={0x00,0x7c,0x12,0x11,0x12,0x7c};unsigned charB[6]={0x00,0x7f,0x49,0x49,0x49,0x36};DDRM = 0xFF;LCD_int();LCD_clear();LED=1;delay_s(5);LED=0;while(1){LCD_set_XY(0,1); LCD_write_char(A); delay_ms(100);LCD_set_XY(10,1);LCD_write_char(A);delay_ms(100);LCD_set_XY(0,3); LCD_write_char(B); delay_ms(100);LCD_set_XY(10,4) ; LCD_write_char(B);}}。
关于Nokia5110液晶显示黑屏或者白屏的解决办法——艾米电子赵亮1/3/2013Nokia5110是一款非常经典的液晶显示模块,本人从07年开始接触这款屏,至今已经有5年多的时间。
这里有几点调试的心得体会跟大家分享一下。
(1)该屏目前都是拆机件,没有全新,只不过是产品的成色问题。
(2)驱动的话,目前估计任何处理器的版本都能找到了,我这里提供51的程序下载,如有需要请与我联系。
(3)导电胶条,很多人都认为全新的导电胶条最好,从我的经验来讲,这个胶条有一个对应关系有的时候换一换就搞定了。
这是我测试的经验,一般测试100个屏,首次成功率有80%左右,剩余的20个屏调换一下液晶底板重新再测试,还能有10个以上调试通过,最后剩余的几个通过换导电胶条的方式也能搞定。
我测试的成功率目前是95%以上,从我手里经过的每一个屏都亲自测试过。
年销量大约8000片左右。
(4)就像我在上一条中提到的,这个屏是通过导电胶条接触的,在运输过程中因震动等原因造成的接触松动是常有的事,所以网友在测试的时候,一定首先要确保液晶接触良好,可以通过手轻微的碰一碰观察看看效果,另外可以拆下来重新装上也可以的。
后面有四个金属固定卡槽,用镊子或者尖嘴螺丝刀一碰就可以查下来,然后调整一下位置重新装上。
以上几点不是我今天要说的重点,最近几次通过客户反映、自己总结以及与供货商沟通发现一个规律,为此总结一下,希望能够解决部分问题。
主要是针对一部分应显示黑屏的问题。
以前一直没注意,其实这款液晶初始化的时候有参数可以调整对比度。
如图1所示,基本上市场上的液晶可以分为两种:(1)以LPH7366-x开头的一行字符信息,如图中1~5。
(2)不带有这行信息的如图中6所示。
图 1 5110液晶实物图一般来讲,图中6的液晶比较好驱动,用默认程序就可以点亮,而LPH7366-x开头的液晶有的时候会遇到黑屏或者有黑影的情况,此时可以通过驱动程序初始化进行调整:LCD_write_byte(0xc8, 0); // 设置偏置电压LCD_write_byte(0x06, 0); // 温度校正LCD_write_byte(0x13, 0); // 1:48图 2 液晶初始化参数如果遇到黑屏,可以调整第1行程序的参数,将0xc8进行调整,范围为0x80~0xFF,可以通过二分法进行凑配,比如设置0xaa或者0xee先看看效果,然后逐渐摸索规律进行修改。
基于5110屏显示的多功能电子钟的设计
1. 硬件设计:
使用STM32F103C8T6微控制器作为主控芯片,5110液晶屏作为
显示界面,DS1302实时时钟芯片作为时间基准源,按键阵列用于用
户控制电子钟的功能。
主控芯片驱动5110显示屏,DS1302实时时钟芯片通过SPI接
口与主控芯片进行通信,从而在显示屏上显示当前时间和日期。
2. 软件设计:
主控芯片程序采用C语言编写,其中包含了时钟、日期、闹钟
等多种功能模块,具有以下特点:
a. 时钟模块:能够实时显示当前的小时、分钟和秒钟。
b. 日期模块:能够实时显示当前的年、月和日。
c. 闹钟模块:用户可以设置闹钟响铃的时间,当到达该时间时,系统会发出闹钟响铃提示。
d. 蜂鸣器模块:当闹钟响铃时,系统会触发蜂鸣器模块,发出
声音提示。
e. 报时功能:在固定时间间隔中,系统能够自动报时,提醒用
户当前时间。
f. 亮度调节功能:用户可以通过按键调节屏幕亮度,满足不同
环境需求。
3. 设计流程:
a. 硬件设计:根据选定的主控芯片和外设器件进行硬件设计,包括原理图设计和PCB布局。
b. 软件设计:编写主控芯片程序,包括时钟、日期、闹钟等功能模块。
c. 调试测试:通过调试测试,验证系统设计是否符合预期,以及是否存在问题。
d. 优化改进:针对问题进行优化改进,提高系统的稳定性和可靠性。
e. 批量生产:完成设计,进行批量生产并出售。
stm32液晶显示原理STM32液晶显示原理STM32是一款高性能、低功耗的微控制器。
它具有强大的处理能力和外设控制能力,因此在各种应用场合中得到了广泛的应用。
在STM32中,液晶显示是一项非常重要的功能之一。
液晶显示设备分为两种类型:被动矩阵(Passive Matrix)和主动矩阵(Active Matrix)。
被动矩阵液晶显示设备是以行和列的方式排列,每个像素都由交点控制。
而在主动矩阵液晶显示设备中,每个像素都有一个独立的电容或开关管来控制。
在STM32中,我们通常使用的是主动矩阵液晶显示设备。
液晶显示屏的原理是利用光的偏振现象,通过改变在液晶屏中液晶分子的排列方向和光的偏振方向之间的相互作用,来调节液晶屏通过的光的强度,从而实现显示的功能。
在设计液晶显示系统时,需要了解液晶显示模组的相关参数,例如像素的颜色、分辨率、视角以及亮度和反应速度等。
此外,还需要对系统的功耗、电压、连接方式和控制信号等进行优化。
在STM32中,控制液晶显示系统的方式主要有两种:串行接口(SPI)和并行接口(FSMC)。
SPI接口是一种高速的串行通信协议,适用于小型存储器和外设控制。
而并行接口则是通过多个线路来同时传输一组数据,适用于大容量的存储器和外设控制。
在STM32的串行接口中,采用了SPI协议。
SPI协议是一种主从式通信协议,通过主设备向从设备发送控制信号和数据,从而控制从设备的行为。
在SPI接口中,使用了四条信号线:时钟线、数据输入线、数据输出线和片选线。
在STM32的并行接口中,采用了基于ARM® AMBA®总线的Flexible Static Memory Controller(FSMC)。
FSMC接口支持各种类型的存储器和外设控制,包括SRAM、NOR Flash、NAND Flash和SDRAM等设备。
FSMC接口将多个存储器控制信号和数据同时传输到乙方设备,从而实现高速数据传输。
/******************************************************************** 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轴。
该模块具有以下特点:●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了。