LCD5110中文资料
- 格式:doc
- 大小:37.00 KB
- 文档页数:8
MO1408-EA©2014CASIOCOMPUTERCO。
,LTD。
熟悉起来恭喜您选择了这款卡西欧手表。
要充分发挥您的购买,请务必阅读本手册小心。
保持手表暴露在明亮的光线下的电力生成通过的太阳能面板的的看是明亮的光线由内置电池存储。
离开或使用手表在哪里不暴露在光线下导致电池撞倒。
确保手表暴露在光线下一样多可能。
当你没有戴上你的手表手腕,放置脸上所以它指向的来源亮光。
你应该尽量保持手表在你的外面袖如许多如可能。
充电是减少显着如果面部只是部分的覆盖。
E-1手表继续工作,即使它不暴露在光线下。
离开手表在的黑暗能够原因的电池至跑下,哪一个将结果在一些手表功能被禁用。
如果电池死了,你会有至充电后重新配置手表设置。
为了确保正常的手表操作,一定要保持暴露在光线尽可能多可能。
实际在哪一级的一些功能被禁用依赖于看模型。
频繁的显示照明可以迅速耗尽电池并需要充电。
以下准则说明了所需的充电时间以从单个照明中恢复操作。
电池充电在灯光。
电池放电黑暗。
约5分钟曝光至亮阳光未来在通过一个窗口约8小时暴露于室内荧光灯灯光太阳能面板明亮的光线电能所有功能已启用一些或所有功能禁用有关重要信息,请务必阅读“电源”(第Ck-49页)你需要知道当手表暴露在明亮的光线下。
如果手表的显示为空白...如果手表的显示为空白,则表示手表的省电功能功能已关闭显示屏以节省功率。
有关更多信息,请参阅“节电功能”(第Ck-66页)。
充电电池E-2E-3关于本手册根据上的模型的你的看,显示文本出现在一个光无论是作为黑暗科幻gures背景在深色背景或光网络gures。
所有样品本手册中的显示使用深色显示科幻gures在光背景。
按钮操作使用字母显示在插图。
本手册的每一部分都为您提供您需要在每个操作中执行操作的信息模式。
更多详细信息和技术信息可以是在“参考”发现部分。
内容一般指南E-8无线电控制原子计时E-10指定您的本地城市E-12执行手动接收E-24检查最新的信号接收结果E-26世界时间E-29要查看当前的时间在另一个时区E-31在标准时间之间切换城市代码时间和夏令时E-32交换你的本国城市和世界时间城市E-33跑表E-34使用秒表测量时间E-35E-4E-5倒数计时器使用倒计时定时器E-37配置倒计时开始时间和自动重复设置E-38警报E-40如何设定闹铃时间E-41打开和关闭闹钟E-43打开和关闭每小时时间信号关闭E-44照明E-45手动点亮照明E-45打开和关闭自动照明功能E-48电源E-49计时E-57手动设置时间和日期E-58更改夏令时(夏令时)设置E-63手首页位置校正E-64调整起始位置E-64参考E-66如何从休眠状态恢复E-67打开和关闭节电功能offE-68规格E-75E-6E-7一般指南按C至更改从模式至模式。
单片机之路—诺基亚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的。
一、硬件链接:首先,看一下硬件(仅供参考,读者已对自己的硬件很熟悉,可以直接跳过。
):说明:图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芯片手册中的引脚说明(重点看红色区域):从这个引脚说明中,我们知道了不同的引脚,对应的功能。
那么,如何使用这些引脚来控制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, 指令集不难读懂。
MO1408-EA?2014CASIOCOMPUTERCO。
,LTD。
熟悉起来恭喜您选择了这款卡西欧手表。
要充分发挥您的购买,请务必阅读本手册小心。
保持手表暴露在明亮的光线下的电力生成通过的太阳能面板的的看是明亮的光线由内置电池存储。
离开或使用手表在哪里不暴露在光线下导致电池撞倒。
确保手表暴露在光线下一样多可能。
当你没有戴上你的手表手腕,放置脸上所以它指向的来源亮光。
你应该尽量保持手表在你的外面袖如许多如可能。
充电是减少显着如果面部只是部分的覆盖。
E-1手表继续工作,即使它不暴露在光线下。
离开手表在的黑暗能够原因的电池至跑下,哪一个将结果在一些手表功能被禁用。
如果电池死了,你会有至充电后重新配置手表设置。
为了确保正常的手表操作,一定要保持暴露在光线尽可能多可能。
实际在哪一级的一些功能被禁用依赖于看模型。
频繁的显示照明可以迅速耗尽电池并需要充电。
以下准则说明了所需的充电时间以从单个照明中恢复操作。
电池充电在灯光。
电池放电黑暗。
约5分钟曝光至亮阳光未来在通过一个窗口约8小时暴露于室内荧光灯灯光太阳能面板明亮的光线电能所有功能已启用一些或所有功能禁用有关重要信息,请务必阅读“电源”(第Ck-49页)你需要知道当手表暴露在明亮的光线下。
如果手表的显示为空白...如果手表的显示为空白,则表示手表的省电功能功能已关闭显示屏以节省功率。
有关更多信息,请参阅“节电功能”(第Ck-66页)。
充电电池E-2E-3关于本手册根据上的模型的你的看,显示文本出现在一个光无论是作为黑暗科幻gures 背景在深色背景或光网络gures。
所有样品本手册中的显示使用深色显示科幻gures在光背景。
按钮操作使用字母显示在插图。
本手册的每一部分都为您提供您需要在每个操作中执行操作的信息模式。
更多详细信息和技术信息可以是在“参考”发现部分。
内容一般指南E-8无线电控制原子计时E-10指定您的本地城市E-12执行手动接收E-24检查最新的信号接收结果E-26世界时间E-29要查看当前的时间在另一个时区E-31在标准时间之间切换城市代码时间和夏令时E-32交换你的本国城市和世界时间城市E-33跑表E-34使用秒表测量时间E-35E-4E-5倒数计时器使用倒计时定时器E-37配置倒计时开始时间和自动重复设置E-38警报E-40如何设定闹铃时间E-41打开和关闭闹钟E-43打开和关闭每小时时间信号关闭E-44照明E-45手动点亮照明E-45打开和关闭自动照明功能E-48电源E-49计时E-57手动设置时间和日期E-58更改夏令时(夏令时)设置E-63手首页位置校正E-64调整起始位置E-64参考E-66如何从休眠状态恢复E-67打开和关闭节电功能offE-68规格E-75E-6E-7一般指南按C至更改从模式至模式。
英国深海DSE5110控制器:带LCD显示的微处理器控制多功能型发动机自动启动模块,具有多种不同类型的故障关断保护功能和由LED组成的状态显示,其最大特点是由图形LCD实时显示发电机的各种参数:三相电压、三相电流、机组频率、冷却水温、机油压力、发动机转速、电池电压、累计运行时间、故障原因等,并可设备各种保护条件:发电机超速/欠速、低油压、高水温、启动失败、紧急停车、转速成信号丢失、充电故障。
还可设置启动时间、次数、可远程启动、自动记录停车故障并可查询,还有系统密码锁定功能等
DSE 5110控制器显示参数:
发电机相电压L1-N,L2-N,L3-N;
发电机线电压L1-L2,L2-L3,L3-L1;
发电机电流L1,L2,L3;
发电机频率Hz;
发电机转速RPM;
发动机机油压力(PSI&Bar);
发动机水温(℃&°F);
电瓶电压;
机组运行时间;
DSE5110控制器报警/停机保护:
欠速/超速,报警/停机;电瓶充电失败,报警;紧急停机,停机;
低油压,报警/停机;
高水温,报警/停机;
起动失败,报警;
转速信号丢失,停机;。
5110LCD程序在综合版提供的程序中void LCD_init(void){PORTB &= ~LCD_RST; // 产生一个让LCD复位的低电平脉冲delay_1us();PORTB |= LCD_RST;PORTB &= ~LCD_CE ; // 关闭LCDdelay_1us();PORTB |= LCD_CE; // 使能LCDdelay_1us();LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式LCD_write_byte(0xc8, 0); // 设置偏置电压LCD_write_byte(0x06, 0); // 温度校正LCD_write_byte(0x13, 0); // 1:48LCD_write_byte(0x20, 0); // 使用基本命令LCD_clear(); // 清屏LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示PORTB &= ~LCD_CE ; // 关闭LCD}根据datasheet,LCD_write_byte(0xc8, 0);是写Vop到寄存器,但是改变它的值也看不出对程序的影响,不知道Vop6~Vop0各个值的设置对程序有什么影响?代表什么意思?谢谢!偏置电压改变它的对比度,不同批号的5110可能出厂偏置电压不同导致对比度不同,这就是为什么同样的程序有些5110没有显示(对比度太低),有些显示全黑(对比度太高)。
这种情况可以通过程序修改对比度调整。
这个程序是从一个国外网站的例程改过来的,去掉了很多东西,有助于大家理解5110的工作原理和基本显示实现,在家其他显示函数相对简单一些;原例程里的一些东西不好理解。
///////////////////////////以下是代码/////////////////////////////////////////////////////////////////ICC-AVR application builder : 2007-5-3 4:45:38// T arget : M16// Crystal: 1.0000Mhz#include <iom16v.h>#include <macros.h>#define LCD_DC_PIN 0x04 // PB2#define LCD_CE_PIN 0x02 // PB1#define SPI_MOSI_PIN 0x20 // PB5#define LCD_RST_PIN 0x01 // PB0#define SPI_CLK_PIN 0x80 // PB7#define X_Length 45#define X_Init 2#define Y_Init 2/*--------------------------------------------------------------------------------------------------Global Variables0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,10个--------------------------------------------------------------------------------------------------*///字模"FUCK JAPAN"unsigned char const X_TAB[] ={0x7E,0x0A,0x0A,0x0A,0x00,0x7E,0x40,0x40,0x7E,0x00,0x7E,0x42,0x42,0x42,0 x00,0x7E,0x18,0x24,0x42,0x00,0x00,0x00,0x42,0x7E,0x02,0x00,0x7C,0x12,0x1 2,0x7C,0x00,0x7E,0x0A,0x0A,0x0E,0x00,0x7C,0x12,0x12,0x7C,0x00,0x7E,0x08,0x10,0x 7E};/*--------------------------------------------------------------------------------------------------Public function prototypes--------------------------------------------------------------------------------------------------*/void LcdInit ( void );void LcdClear ( void );static void LcdSend ( unsigned char, unsigned char);static void Delay ( void );void LcdGotoXY ( unsigned char, unsigned char );/////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// //////////*--------------------------------------------------------------------------------------------------Name : LcdInitDescription : Performs MCU SPI & LCD controller initialization.Argument(s) : None.Return value : None.--------------------------------------------------------------------------------------------------*/void LcdInit( void ){//unsigned char Clear;// Pull-up on reset pin,上电复位端口,此时为高,不复位;PORTB |= LCD_RST_PIN;// Set output bits on port B,设置输出口;DDRB |= LCD_RST_PIN | LCD_DC_PIN | LCD_CE_PIN | SPI_MOSI_PIN | SPI_CLK_PIN;Delay();// Toggle display reset pin.PORTB &= ~LCD_RST_PIN; //上电复位;Delay();PORTB |= LCD_RST_PIN; //复位完;// SPI初始化;Enable SPI port: No interrupt, MSBit first, Master mode, CPOL->0, CPHA->0, Clk/4SPCR = BIT(SPE)|BIT(MSTR); //使能SPI,主机模式;//SPSR = 0x00; //似乎不用这几句也能正常运行;//Clear= SPSR;//Clear= SPDR;// Disable LCD controllerPORTB |= LCD_CE_PIN;LcdSend( 0x21, 0 ); // LCD Extended Commands.LcdSend( 0xC8, 0 ); // Set LCD Vop (Contrast).LcdSend( 0x06, 0 ); // Set Temp coefficent.LcdSend( 0x13, 0 ); // LCD bias mode 1:48.LcdSend( 0x20, 0 ); // LCD Standard Commands, Horizontal addressing mode. LcdSend( 0x0C, 0 ); // LCD in normal mode.LcdClear();}/*--------------------------------------------------------------------------------------------------Name : LcdClearDescription : Clears the display.Argument(s) : None.Return value : None.--------------------------------------------------------------------------------------------------*/void LcdClear(void){unsigned int i;LcdSend(0x0c, 0);LcdSend(0x80, 0); //此时默认操作为清屏for (i=0; i<504; i++)LcdSend(0, 1);}/*--------------------------------------------------------------------------------------------------Name : LcdGotoXY 设置块坐标Description : Sets cursor location to xy location corresponding to basic font size. Argument(s) : x, y -> Coordinate for new cursor position. Range: 1,1 .. 14,6 Return value : None.--------------------------------------------------------------------------------------------------*/void LcdGotoXY(unsigned char X, unsigned char Y){LcdSend(0x40 | Y, 0); // columnLcdSend(0x80 | X, 0); // row}/*--------------------------------------------------------------------------------------------------Name : LcdSendDescription : Sends data to display controller.Argument(s) : data -> Data to be sentcd -> Command or data (see/use enum)Return value : None.--------------------------------------------------------------------------------------------------*/static void LcdSend (unsigned char data, unsigned char command){PORTB &= ~LCD_CE_PIN ; // 使能LCDif (command == 0)PORTB &= ~LCD_DC_PIN ; // 传送命令elsePORTB |= LCD_DC_PIN ; // 传送数据SPDR = data; // 传送数据到SPI寄存器while ((SPSR & 0x80) == 0); // 等待数据传送完毕PORTB |= LCD_CE_PIN ; // 关闭LCD}/*--------------------------------------------------------------------------------------------------Name : DelayDescription : Uncalibrated delay for LCD init routine.Argument(s) : None.Return value : None.--------------------------------------------------------------------------------------------------*/static void Delay ( void ){int i;for ( i = -12000; i < 12000; i++ );}/*--------------------------------------------------------------------------------------------------Name : mainDescription :Argument(s) :Return value : None.--------------------------------------------------------------------------------------------------*/void main(void){ unsigned char X; //v=0,按行显示,x对应某个bank(0~83) LcdInit();while(1){LcdGotoXY(X_Init,Y_Init);for(X=0;X<X_Length;X++)LcdSend(X_TAB[X],1);}}。
C8051F学习笔记:Nokia 5110驱动Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110,用于开发的设备显示,取代LCD1602。
使用Nokia5110液晶的四大理由1)性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉字,30个字符。
Nokia5110裸屏仅元,LCD1602一般15元左右,LCD12864一般50~70元。
2)接口简单,仅四根I/O线即可驱动,LCD1602需11根I/O线,LCD12864需12根。
3)速度快,是LCD12864的20倍,是LCD1602的40倍。
4)Nokia5110工作电压,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。
可以在市场上买到Nokia5110的裸屏和带PCB的Nokia5110屏幕,因为Nok ia5110是不带背光的,所以通常商家会在PCB上按了几个背光LED,上电就能亮,建议大家还是买那种连上PCB的5110。
Nokia5110原理图:商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动5110了。
Nokia5110和Nokia3110是兼容的,用的都是同一款驱动芯片PHILIPS PCD 8544。
(1)SPI接口时序写数据/命令Nokia5110(PCD8544)的通信协议是一个没有MISO只有MOSI的SPI协议,如果单片机有富裕的SPI接口,也可以利用硬件SPI,但通常没有必要,只需要软件程序模拟即可。
/***********************************************************函数名称:LCD_write_byte函数功能:模拟SPI接口时序写数据/命令LCD入口参数:data :写入的数据;command :写数据/命令选择;出口参数:无备注:***********************************************************/void LCD_write_byte(unsigned char dat, unsigned char command){unsigned char i;LCD_CE = 0; //5110片选有效,允许输入数据if (command == 0) //写命令LCD_DC = 0;else LCD_DC = 1; //写数据for(i=0;i<8;i++) //传送8bit数据{if(dat&0x80)SDIN = 1;elseSDIN = 0;SCLK = 0;dat = dat << 1;SCLK = 1;}LCD_CE = 1; //禁止5110}管脚D/C(LCD_DC)用于选择写的是命令(D/C=0)还是数据(D/C=1)。
(2)Nokia5110的初始化接通电源后,内部寄存器和RAM的内容是不确定的,这需要一个RES低电平脉冲复位一下。
当VDD变为高电平,达到VDDmin(或更高)之后,最多100ms,R ST输入低电平(电平幅度<。
5110复位时序/***********************************************************函数名称:LCD_init函数功能:5110初始化入口参数:无出口参数:无备注:***********************************************************/void LCD_init(void){LCD_RST = 0; // 产生一个让LCD复位的低电平脉冲delay_1us();LCD_RST = 1;LCD_CE = 0; // 关闭LCDdelay_1us();LCD_CE = 1; // 使能LCDdelay_1us();LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式LCD_write_byte(0xc8, 0); // 设置液晶偏置电压LCD_write_byte(0x06, 0); // 温度校正LCD_write_byte(0x13, 0); // 1:48LCD_write_byte(0x20, 0); // 使用基本命令,V=0,水平寻址LCD_clear(); // 清屏LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示LCD_CE = 0; // 关闭LCD}(3)设置Nokia5110液晶的坐标Nokia5110(PCD8544)的命令集:命令字符解释:要注意的是“功能设置”命令的“H”和“V”。
H=0使用基本指令集命令,H=1使用扩展指令集命令。
V=0水平寻址,V=1垂直寻址。
48*84点阵的格式如上图,数据以字节8bit为单位下载到PCD8544的4 8*84bit显示数据RAM矩阵。
列通过地址指针寻址,地址范围为X 0~83(10100 11),Y 0~5(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 :0-83Y :0-5出口参数:无备注:***********************************************************/void LCD_set_XY(unsigned char X, unsigned char Y){LCD_write_byte(0x40 | Y, 0); // columnLCD_write_byte(0x80 | X, 0); // row}(4)显示英文字符英文字符占用6*8个点阵,通过建立一个ASCII的数组font6x8[][6]来寻址。
而这个数字的行号对应(字符ASCII码-32)。
ASCII码表如下:/***********************************************************/函数名称:LCD_write_char函数功能:显示英文字符入口参数:c : 显示的字符出口参数:无备注:***********************************************************/void LCD_write_char(unsigned char c){unsigned char line;c -= 32; //数组的行号for (line=0; line<6; line++)LCD_write_byte(font6x8[c][line], 1);}如要在NOKIA5110输出大写“A”,对应数组的行号为33,对应的元素为{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },水平寻址(V=0)NOKIA5110 一行可以显示14个字符,可以显示六行。
(5)显示汉字显示汉字可以采用两种点阵方式,一种是12*12点阵,一种是16*16点阵,网上也有一个自动提取字模的小软件“3310液晶显示屏汉字提取程序”,这个小程序只适用于水平寻址(V=0)。
3310液晶显示屏汉字提取程序下载:采用12*12点阵汉字时,由于不是8的整数倍数,因此行与行之间只能隔开,这样才能完整显示一个汉字。
//欢{0x0A,0x92,0x62,0x9E,0x02,0x18,0x87,0x74,0x84,0x14,0x0C,0x00,0x02,0x0 1,0x00,0x04,0x05,0x02,0x01,0x00,0x01,0x02,0x04,0x00},12*12点阵(6)显示图形显示的图形像素大小不能超过84*48。
也有一个字模提取小软件Zimo2 1可以帮助我们得到图像的像素数组。
但要注意Zimo21软件的设置,不然的话就显示不了想要的图片。
Zimo21设置要注意选中“纵向取模”“字节倒序”这样才能在5110上显示正确的图像。
/***********************************************************函数名称: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_y%8==0) //如果为位图所占行数为整数row=Pix_y/8;elserow=Pix_y/8+1; //如果为位图所占行数不是整数LCD_set_XY(X,Y);for (n=0;n<row;n++) //换行{for(i=0;i<Pix_x;i++){LCD_set_XY(X+i,Y+n);LCD_write_byte(map[i+n*Pix_x], 1);}}}要显示的图像NOKIA5110显示出来的效果。