12864液晶显示图片原理(完整版)
- 格式:doc
- 大小:1.40 MB
- 文档页数:108
12864点阵型液晶显示屏的基本原理与使用方法(很详细)点阵LCD的显示原理在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。
而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。
而剩下的低128位则留给英文字符使用,即英文的内码。
那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:图1“A”字模图而中文的“你”在字模中的记载却如图2所示:图2“你”字模图12864点阵型LCD简介12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4个(16×16点阵)汉字。
管脚号管脚名称LEVER管脚功能描述1VSS0电源地2VDD+5.0V电源电压3V0-液晶显示器驱动电压4D/I(RS)H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR 6E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 7DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15CS1H/L H:选择芯片(右半屏)信号16CS2H/L H:选择芯片(左半屏)信号17RET H/L复位信号,低电平复位18VOUT-10V LCD驱动负电压19LED+-LED背光板电源20LED--LED背光板电源表1:12864LCD的引脚说明在使用12864LCD前先必须了解以下功能器件才能进行编程。
12864LCD驱动原理
在初始化阶段,我们需要进行一系列的设置和配置以确保显示屏正常
工作。
这包括发送指令序列,设置显示模式、偏置电压、对比度和字符显
示等参数。
通过这些初始化设置,我们可以确保每个像素点的状态都能清
晰可见。
在数据写入阶段,我们可以向特定的位置写入数据以控制像素点的亮
灭状态。
通过选择特定的行和列,在给定的位置上点亮或熄灭单个像素点。
这通常通过提供特定格式的数据来实现,其中每个字节表示8个像素点的
状态。
1.硬件连接:液晶显示屏与控制器之间通过平行数据总线进行连接。
控制器提供行、列选择信号以及数据和控制信号。
还需要通过其他引脚来
提供电源和对比度调节信号。
2.初始化:在驱动液晶显示屏之前,我们需要发送一些特定的初始化
命令以设置液晶显示屏的参数。
这些命令包括清屏,设置显示模式、偏置
电压、对比度等。
3.数据写入:在初始化完成后,我们可以开始向液晶显示屏写入数据
以控制像素点的状态。
数据可以通过给定的坐标来确定,其中选择特定的
行和列。
写入数据时,需要同时提供数据信号以及行和列选择信号。
4.控制信号:除了数据信号外,还需要提供行和列选择信号以确定要
控制的像素点位置。
行选择信号(Y0~Y63)选择要操作的行,而列选择信
号(X0~X127)选择要操作的列。
12864LCD液晶显示原理及使用方法
一、液晶显示原理
1.液晶材料的性质
液晶是介于固体和液体之间的一种物质状态。
它具有流动性和定向性,通过控制电场可以改变其流动性。
液晶分子呈现出各种不同的排列方式,
包括向列排列、向行排列、扭曲排列等。
2.电场的作用
当液晶材料处于电场作用下时,液晶分子会发生定向排列。
电场的存
在导致液晶分子的定向,形成一定的直流电场效应。
通过改变电场的强度
和方向,可以改变液晶分子的排列状态。
3.光的传输
液晶分子的定向排列对入射光的传播具有影响。
根据液晶分子的不同
排列状态,可以选择性地传递或阻挡入射光。
通过控制电场的强度和方向,可以调节液晶分子的排列状态,从而改变光的传输效果。
4.显示原理
二、液晶显示的使用方法
1.连接电源
2.初始化
在液晶屏开始显示之前,需要进行初始化设置。
通过向液晶屏发送命令,配置液晶屏的各种参数,如显示模式、显示偏移量、对比度等。
3.显示图像
初始化完成后,可以通过向液晶屏发送数据以显示图像。
可以通过控制每个像素点的液晶分子排列状态,从而显示出对应的图像。
可以通过编写程序或者使用液晶屏驱动库来控制显示内容。
4.其他控制
除了显示图像外,液晶显示屏还具有其他一些控制功能。
例如,可以通过发送命令来设置光标位置、清除屏幕内容、切换显示区域等。
总结:。
液晶12864(KS0108主控)12864市面上比较流行的有两种,一种是以KS0108为主控芯片的,不带字库的,说白了就是只能靠打点才能显示出字符或图形的,当然要借助取模软件;另一种是以ST7920为主控芯片的,带ASCII码和中文字库。
至于两种的区别下一篇再讨论,这篇先讲述KS0108为主控芯片的12864的原理。
这是网上找的一个管脚图,当然不同品牌的可能略有差异,但是主要的还是一样的重点要讲一下CS1和CS2,KS0108控制的12864内部有两个控制器,分别控制左半屏和右半屏,如下图所示左半屏和右半屏操作时写的地址其实是一样的,那么只能通过片选CS1和CS2来选择哪半个屏了,如果两个都选通,则相当于两块64x64的液晶了,而且显示的内容是一样的,取模方式是纵向8点下高位。
好了,来说下原理,列的范围是0~63,我已经标出了,行是不能按位来写的,而是写“页”,一个页相当于8个点,也就是8位,即一个字符,高位在下面,那么页的范围是0~7,共8页,8页x8个点正好64个点。
这是我用取模软件截的一个“们”字,可以看出它是16x16大小的,实际上占用了两个“页”,16个列,而我们操作时先固定一个页,比如这个就先写上面那页,假设为n好了,从列0写到16,然后页n+1,再从列0写到16,这样一个“们”字就出来了,下面是其代码0x40,0x20,0xF8,0x07,0x00,0xF8,0x02,0x04, 0x08,0x04,0x04,0x04,0x04,0xF E,0x04,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F ,0x00,0x00,可见16x16的字符占了32个字节(上面n页16个字节加n+1页16个),那么如果一幅满幅的图片,就是128x64,占用128x8=1K个字节,可见还是非常占空间的。
lcd12864的显示原理
LCD12864是一种基于液晶技术的显示器件,具有128x64个像素点的显示区域。
它采用液晶分子在电场作用下改变排列方式从而实现显示的原理。
LCD12864由若干个液晶单元组成,每个液晶单元由两片平行的电极层之间夹着的液晶分子组成。
在电场作用下,液晶分子会改变排列方式,从而使光的传播方式发生改变。
在LCD12864的背光光源照射下,背光光束通过液晶单元后,会受到液晶分子排列的影响,进而改变光束的方向和光强度。
LCD12864的液晶分子排列方式分为两种:平行排列和垂直排列。
当平行排列的液晶分子受到电场作用时,光束可以通过液晶单元,这时显示区域会出现明亮;而当垂直排列的液晶分子受到电场作用时,光束无法通过液晶单元,这时显示区域会出现暗淡。
通过在液晶单元两侧施加不同的电压,可以控制液晶分子的排列方式。
通过在液晶单元上加上适当的驱动电压,LCD12864可以实现对每个像素点的控制,从而显示出各种图像和文字。
为了控制LCD12864的显示,需要使用专门的驱动电路和微控制器。
通过驱动电路的控制,可以向LCD12864发送相应的电压信号,从而控制液晶分子的排列方式,实现显示的效果。
总结来说,LCD12864的显示原理利用液晶分子在电场作用下
改变排列方式来实现光的传播和屏幕显示,通过驱动电路和控制器来控制电压信号,从而控制液晶分子的排列方式,实现显示区域的明暗变化,从而显示出图像和文字。
最近买了一块12864液晶显示屏,淘宝给我的资料不算多,我就从网上下载了部分资料,通过研究别人的例程我发现了一些问题,并得出了自己的见解。
写程序一定要严谨,同时又要求精练,如果程序中多了些没用的语句不仅让学习的人看的一头雾水,而且又占用多余的空间,我想通过自己的实践来鄙视那些程序不严谨就挂到网上的人,给初学者很多困惑。
我就通过12864的绘图功能来说下,不对之处望求指正(附上绘图说明)12864(ST7920驱动芯片)把屏幕分成上下两部分(如上图中把垂直坐标分成了两部分的00~1F)。
水平坐标00到0F处于同一面,而不是上下屏的关系,[上半屏“07”后通过我标注的箭头连接是到下一个红色00行]。
在向GDRAM中写入要显示的图片时,我们先指定从X:00、Y:00处(也就是第①处)开始写入数据,我们先在第①处写图形数据(按照图片所标注,第15位在最左边,第0位在最右边,即在写入的时候LCD会先写高位字节,接着再写低位字节),接着LCD会自动把坐标定位到同一行第②处的开头,此时我们可以接着告诉LCD在这里写入图形数据,依此类推,当我们写满16次后,第00行(包括上半屏和下半屏的)就全写满了。
那么我们接下去写入数据会出现什么情况呢?接着LCD又自动从第00行的第①处重新开始写了。
这是因为ST7920控制芯片设计出来就这样,在写入的时候它只会在水平方向(X轴上)地址自增,并且在增加到0F地址之后就会变成00地址从头开始写。
从这里我们可以明白,每次写满一行(共16部分)后就必须在程序里人为地把垂直方向(Y轴)的地址加1,不然就会造成只是在同一行重复写入的现象。
垂直(列)地址由AC6~AC0指定,共32行,列地址由AC3AC2AC1AC0指定,共16列(00-0F),绘图程序如下:通过以上所讲我想大家也明白了很多了吧,我看网上有很多教程说是要把屏幕分开两半来写程序,其实我觉得下半屏程序根本没必要再写出来,因为见上面的分析过程,其实“上半部分屏”程序已经完全把整个屏幕覆盖了,而下半部分屏相当于在原来的基础上又重新覆盖了一部分。
lcd12864 液晶屏原理图液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。
以往的测控仪器的显示部分大都采用LED 式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。
而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。
液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。
以往的测控仪器的显示部分大都采用LED 式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。
而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。
lcd12864 带中文字库的128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128&TImes;64,内置8192 个16*16 点汉字,和128 个16*8 点ASCII 字符集。
利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8&TImes;4 行16&TImes;16 点阵的汉字。
也可完成图形显示。
低电压低功耗是其又一显着特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
51单片机综合学习12864液晶原理分析1辛勤学习了好几天,终于对12864液晶有了些初步了解~没有视频教程学起来真有些累,基本上内部程序写入顺序都是根据程序自我变动,然后逆向反推出原理……芯片:YM12864R P-1 控制芯片:ST7920A带中文字库初步小结:1、控制芯片不同,寄存器定义会不同2、显示方式有并行和串行,程序不同3、含字库芯片显示字符时不必对字符取模了4、对芯片的结构地址一定要理解清楚5、显示汉字时液晶芯片写入数据的顺序(即显示的顺序)要清楚6、显示图片时液晶芯片写入数据的顺序(即显示的顺序)要清楚7、显示汉字时的二级单元(一级为八位数据写入单元)要清楚8、显示图片时的二级单元(一级为八位数据写入单元)要清楚12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。
每个显示点对应一位二进制数,1表示亮,0表示灭。
存储这些点阵信息的RAM称为显示数据存储器。
要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。
图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。
由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。
左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。
显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。
512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。
每个存储单元存储8个液晶点的显示信息。
为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。
每列中的8行点阵信息构成一个8bits 二进制数,存储在一个存储单元中。
(注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM 区称为存储页。
即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。
因此存储单元地址包括页地址(Xpage,0~7)和列地址(Yaddress,0~63)。
例如点亮128*64的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。
芯片的结构一定要清楚!点阵LCD的显示原理在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。
而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。
而剩下的低128位则留给英文字符使用,即英文的内码。
那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:图1 “A”字模图而中文的“你”在字模中的记载却如图2所示:图2 “你”字模图图3图4 字符二级单元(图3中阴影部分)一个汉字的二级单元是一个16*16的区域,因些128*64液晶可以显示4行8列共32个汉字(如图3)。
而它的一个二级单元如图4(在无字库时,对汉字的取模有横向跟纵向两种,要注意),对于并行含有子库芯片的显示,只要设定好这个二级单元的地址(如0X80+i,这样设定i的范围为0~31,这里注意第一行会直接跳到第三行;或者根据自己需要如第二行0X90+i,i范围为0~7;第三行0X88+i,i范围为0~7;),然后直接把汉字写入就OK了~(串行无字符库的后面再做分析)图5:垂直坐标:上半屏00~1F,总共为32水平坐标:上半屏水平坐标分别为0X80+(00~07)下半屏00~1F,总共为32下半屏水平坐标分别为0X88+(00~07)图片显示芯片结构分块与汉字显示不一样图象显示过程是这样的:首先设置垂直地址,再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址,然后在每个地址里写入16位数据)。
垂直地址范围AC5...AC0水平地址范围AC3…AC0绘图RAM 的地址计数器(AC)只会对水平地址(X 轴)自动加一,当水平地址=0FH 时会重新设为00H但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。
GDRAM的坐标地址与资料排列顺序如图5:分上下屏写入。
for(i=0;i<32;i++)// 上半屏32个垂直地址{write_com(0x80 + i);//垂直地址write_com(0x80);// 水平地址for(j=0;j<16;j++){write_data(*adder);adder++;}}带中文字库的128X64显示模块时应注意以下几点:①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。
②显示ASCII字符过程与显示中文字符过程相同。
不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。
③当字符编码为2字节时,应先写入高位字节,再写入低位字节。
④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF 标志时BF需为“0”,方可接受新的指令。
如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。
指令执行的时间请参考指令表中的指令执行时间说明。
⑤“RE”为基本指令集与扩充指令集的选择控制位。
当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。
程序———————并行(串行后面再分析)——————————————————————————#include <stdio.h>#include <reg52.h>#include <intrins.h>#include <string.h>#define uchar unsigned char#define uint unsigned intuchar code LCD_data1[];uchar code LCD_data2[];uchar code LCD_picture1[];uchar code LCD_picture2[];sbit RS = P2^4;sbit RW = P2^5;sbit EN = P2^6;sbit PSB = P2^1;sbit RES = P2^3;sbit Dataport = P0; sbit Busyport = P0^7;////////////////////////////////////////////////////////////// void delay_ms(unsigned int n)//延时10×n毫秒程序{unsigned int i,j;for(i=0;i<n;i++)for(j=0;j<2000;j++);}void delay(unsigned int m)//1US 延时程序{unsigned int i,j;for(i=0;i<m;i++)for(j=0;j<10;j++);}/////////////////////////////////////////////////////////////// //判LCM忙子函数void check_LCD_busy (void){Dataport = 0xff;RS = 0;RW = 1;EN = 1;while (Busyport);EN = 0;}/////////////////////////////////////////////////////////////// //写命令子函数void write_com(uchar Command){check_LCD_busy();RW=0;RS=0;delay(1);P0=Command;EN=1;delay(1);EN=0;}//////////////////////////////////////////////////////////////// //写数据子函数void write_data(uchar Data){check_LCD_busy();RW=0;RS=1;delay(1);P0=Data;EN=1;delay(1);EN=0;}///////////////////////////////////////////////////////////////// //LCM清屏函数void lcdClear (void){write_com(0x01);}//////////////////////////////////////////////////////////////// //LCM复位函数void reset (){RES=0;//复位delay(1);//延时RES=1;//复位置高delay(10);}/////////////////////////////////////////////////////////////////显示汉字void dispString (uchar X, Y,uchar *msg)//X为哪一行,Y为哪一列。
msg为汉字{if(X==0)X = 0x80; //第一行,汉字显示坐标else if(X==1) X = 0x90; //第二行else if(X==2) X = 0x88; //第三行else X = 0x98; //第四行Y = X + Y;//Y为1往右移一位write_com(Y);//写入坐标while (*msg){write_data(*msg++); //显示汉字}}/////////////////////////////////////////////////////////////// //显示图象void disppicture(uchar code *adder){uint i,j;//*******显示上半屏内容设置for(i=0;i<32;i++)// 上半屏32个列地址{write_com(0x80 + i);//SET垂直地址VERTICAL ADDwrite_com(0x80);//SET水平地址HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;}}//*******显示下半屏内容设置for(i=0;i<32;i++)//{write_com(0x80 + i);//SET 垂直地址VERTICAL ADDwrite_com(0x88);//SET 水平地址HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;}}}/////////////////////////////////////////////////////////////// //LCD字库初始化函数void lcdinit_str(void){delay(40);//大于40MS的延时程序PSB=1;//设置为8BIT并口工作模式delay(1);//延时reset();//复位write_com(0x30);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF delay(100);//大于100uS的延时程序write_com(0x30);//FunctionSetdelay(37);////大于37uS的延时程序write_com(0x08);//Display on Controldelay(100);//大于100uS 的延时程序write_com(0x10);//Cursor Display Control光标设置delay(100);//大于100uS 的延时程序write_com(0x0C); //Display Control,D=1,显示开delay(100);//大于100uS的延时程序write_com(0x01);//Display Cleardelay(10);//大于10mS 的延时程序write_com(0x06);//Enry Mode Set,光标从右向左加1位移动delay(100);//大于100uS 的延时程序}////////////////////////////////////////////////////////////////// //LCD图片(扩展)初始化函数void lcdinit_pic(void){delay(40);//大于40MS的延时程序PSB=1;//设置为8BIT并口工作模式delay(1);//延时reset();write_com(0x36);//Extended Function Set RE=1: extended instruction delay(100);//大于100uS的延时程序write_com(0x36);//Extended Function Set:RE=1: extended instruction setdelay(37);////大于37uS的延时程序write_com(0x3E);//EXFUN CTION(DL=8BITS,RE=1,G=1)delay(100);//大于100uS的延时程序write_com(0x01);//CLEAR SCREENdelay(100);//大于100uS的延时程序}///////////////////////////////////////////////////////////////// void main(){while(1){lcdinit_str();delay_ms(10); //此延时如果没有的话第一行会一直在第一列dispString(0, 1,"祖国江山好");delay_ms(10);dispString(1, 1,"爱情少不了");delay_ms(10);dispString(2, 1,"为了下一代");delay_ms(10);dispString(3, 1,"赶紧谈恋爱");delay_ms(200);delay_ms(200);lcdClear();delay_ms(10);dispString(0, 1,"大名吴建峰"); delay_ms(10);dispString(1, 1,"性别为非女"); delay_ms(10);dispString(2, 1,"芳龄二十二"); delay_ms(10);dispString(3, 1,"海拔一百六"); delay_ms(200);delay_ms(200);lcdinit_pic();lcdClear();delay_ms(10);disppicture(LCD_picture1);delay_ms(300);delay_ms(300);}}图象代码库见最后!~成果——————————————————————————————————图形取模方法(转):128*64的像素能显示的内容就有限,也无法要求它能多清楚,如果将一个彩色的图片转换为单色位图,效果就更差了,个人不建议用它来显示彩色的图片,如果真要用128*64的液晶显示,建议如下:1.尽量选择颜色比较单一的图片,当然一种颜色的效果最好不过了;2.图片不能选择的太大,要不缩小了就看不清楚了;3.图片的调整可以这样(仅供参考):1>调整图片的宽高比大致为2:1;2>将图片缩小到128*64像素;3>保存为单色位图;图片的大小缩放不太好操作,我通常是这样做的:你用画图程序打开你要显示的图片后,首先要操作的查看属性(点击菜单栏的图像->属性,单位选择为像素后,宽高值就出来了),比如:宽:603,高:444,这显然宽高比不是2:1,你就要调整了,444*2=888,现在为603,所以888/603=1.47,所以宽要放大为147%(点击菜单栏的图像->拉伸/扭曲,在拉伸里面的水平处改为147),现在就调整为2:1了;接下来就要将图片缩小到128*64像素,先计算缩放的比例,128/888=0.144,所以相同的操作(点击菜单栏的图像->拉伸/扭曲,在拉伸里面的水平处改为14,垂直里面也要改为14);最后就是保存为单色位图(文件->另存为->文件类型选择为:单色位图(.bmp))?试过颜色比较单一的,效果还可以,复杂的彩色图片效果就很不理想了...说明:在调整图片的宽高比大致为2:1的过程中图片会被拉伸变形,不过缩小到128*64像素后也不是太明显...图片取模图片代码——————————————————————————————————uchar code LCD_picture1[]={0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x18, 0x00,0x00,0x00,0x07,0xFF,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x18, 0x00,0x03,0x00,0x07,0xEC,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x0E,0x00,0x00,0x37, 0x80,0x03,0x00,0x00,0xEC,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x0E,0x00,0x18,0x3F, 0xC0,0x03,0x00,0x0F,0x6E,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x06,0x00,0x18,0x79, 0x80,0x03,0x00,0x0F,0x6B,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x06,0x00,0x18,0x7F, 0x00,0x1F,0xF4,0x01,0xE9,0xE0,0x00,0x00,0x 00,0x00,0x00,0x00,0xC6,0xE0,0x18,0xFF ,0x80,0x1F,0xFC,0x00,0xFB,0x30,0x00,0x00,0x 00,0x00,0x00,0x01,0xC6,0x70,0x1B,0x1E ,0xC0,0x03,0x38,0x01,0xB3,0x00,0x00,0x00,0x0 0,0x00,0x00,0x03,0x86,0x38,0xDB,0xFF, 0xE0,0x03,0x70,0x07,0x9E,0x7F,0xFF,0xFF,0x FF,0xFF,0xFF,0xFF,0x26,0x18,0xDB,0x8 C,0x70,0x7F,0xFF,0x87,0x27,0xFE,0x00,0x00,0x 00,0x00,0x00,0x00,0x3E,0x01,0xFF,0xFF, 0xB8,0x7F,0xFF,0x80,0x3F,0xC0,0x00,0x00,0x 00,0x00,0x00,0x00,0x1E,0x00,0x00,0x0C, 0x18,0x07,0x80,0x00,0x39,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x06,0x00,0x00,0xFF,0 xE0,0x0F,0x00,0x00,0xFB,0x1F,0xF8,0x00,0x 00,0x00,0x00,0x00,0x00,0x7F,0xF0,0xFF, 0xE0,0x1F,0x30,0x01,0xCF,0xFF,0xFF,0x09,0x 00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x0C ,0x00,0x3B,0x36,0x03,0x07,0xFF,0xFF,0xE0,0x 00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xCC ,0x00,0x73,0x76,0x03,0x3F,0xFF,0xFF,0xF7,0x 00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFC ,0x00,0x63,0xE6,0x00,0x3F,0xFF,0xFF,0xDC,0 x80,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF C,0x00,0x03,0xFE,0x00,0x7F,0xFF,0xFF,0xAF,0x 60,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFC ,0x00,0x03,0xFE,0x00,0xFF,0xFF,0xFF,0xF5,0x C0,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xF C,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x23,0x 20,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFE ,0x00,0x00,0x00,0x03,0xFF,0x8F,0xE3,0xEC,0x A0,0x00,0x00,0x03,0xFF,0x1F,0xC7,0xFF ,0x00,0x00,0x00,0x03,0xFF,0x07,0xC1,0x92,0x C0,0x00,0x00,0x07,0xFE,0x0F,0x83,0xFF ,0x80,0x00,0x00,0x07,0xFF,0x03,0xC0,0xE9,0x C0,0x00,0x00,0x0F,0xFE,0x07,0x81,0xFF ,0x80,0x00,0x00,0x07,0xFE,0x03,0x80,0xED,0x E0,0x00,0x00,0x0F,0xFC,0x07,0x01,0xFF ,0xC0,0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xDD,0 xE0,0x00,0x00,0x1F,0xFC,0x37,0x61,0xF F,0xC0,0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xFF,0x E0,0x00,0x00,0x1F,0xFC,0x37,0x61,0xFF ,0xC0,0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xFF,0x F0,0x00,0x00,0x1F,0xFC,0x37,0x61,0xFF ,0xE0,0x00,0x00,0x1F,0xFE,0x1B,0xB0,0xFF,0x F0,0x00,0x00,0x3F,0xFC,0x37,0x61,0xFF ,0xE0,0x00,0x00,0x1F,0xFF,0x03,0xC0,0xFF,0x F0,0x00,0x00,0x3F,0xFE,0x07,0x81,0xFF ,0xE0,0x00,0x00,0x1F,0xFF,0x07,0xC1,0xFF,0x F0,0x00,0x00,0x3F,0xFE,0x0F,0x83,0xFF ,0xE0,0x00,0x00,0x1F,0xFF,0x8C,0x63,0xFF,0x F0,0x00,0x00,0x3F,0xFF,0x1F,0xC7,0xFF ,0xE0,0x00,0x00,0x1F,0xDF,0xFC,0x7F,0xF7,0x F0,0x00,0x00,0x3F,0xFF,0xF0,0x7F,0xFF ,0xE0,0x00,0x00,0x1F,0x07,0xFF,0xFF,0xD1,0x F0,0x00,0x00,0x3F,0xFF,0xE0,0x3F,0xFF ,0xE0,0x00,0x00,0x1E,0x03,0xFF,0xFF,0x80,0x F0,0x00,0x00,0x3F,0xC0,0x00,0x00,0x07, 0xE0,0x00,0x00,0x1E,0x03,0xFE,0xFF,0xC0,0x F0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x0F, 0xE0,0x00,0x00,0x0C,0x01,0xF8,0x3F,0x80,0x E0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F, 0xC0,0x00,0x00,0x0E,0x03,0xF0,0x1F,0xC0,0x E0,0x00,0x00,0x1F,0xF0,0x0F,0xC0,0x1F ,0xC0,0x00,0x00,0x1E,0x03,0xF0,0x1F,0x80,0x E0,0x00,0x00,0x1F,0xFC,0x0B,0x40,0x7F ,0xC0,0x00,0x00,0x7F,0x1F,0xF0,0x1F,0xC3,0x E0,0x00,0x00,0xFF,0xFF,0x0B,0x41,0xFF ,0xC0,0x00,0x00,0xFF,0xFF,0xF0,0x1F,0xF7,0x F0,0x00,0x01,0xFF,0xFF,0xC0,0x0F,0xFF ,0xF0,0x00,0x01,0xFF,0xFF,0xF8,0x3F,0xFF,0x FC,0x00,0x03,0xFF,0xFF,0xF8,0x7F,0xF F,0xF8,0x00,0x03,0xFE,0x7F,0xFE,0xFF,0xFF,0x FE,0x00,0x07,0xFC,0xFF,0xFF,0xFF,0xF F,0xFC,0x00,0x07,0xFC,0x1F,0xFF,0xFF,0xF8,0x FE,0x00,0x0F,0xF8,0x3F,0xFF,0xFF,0xF1 ,0xFC,0x00,0x0F,0xF8,0x07,0xFF,0xFF,0xE0,0x FF,0x00,0x1F,0xF0,0x0F,0xFF,0xFF,0xC 0,0xFE,0x00,0x0F,0xF8,0x00,0xFF,0xFF,0x00,0x 7F,0x80,0x1F,0xF0,0x01,0xFF,0xFE,0x00 ,0xFF,0x00,0x1F,0xF0,0x00,0x02,0x00,0x00,0x7 F,0x80,0x3F,0xE0,0x00,0x00,0x00,0x00,0 x7F,0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x3 F,0xC0,0x3F,0xE0,0x00,0x00,0x00,0x00, 0x7F,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x3 F,0xC0,0x7F,0xE0,0x00,0x00,0x00,0x00, 0x7F,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x 1F,0xE0,0x7F,0xC0,0x00,0x00,0x00,0x00 ,0x3F,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x 1F,0xE0,0x7F,0xC0,0x00,0x00,0x00,0x00 ,0x3F,0x00,0x7F,0xE0,0x01,0xC0,0xE0,0x00,0x 1F,0xE0,0xFF,0xC0,0x00,0x70,0xE0,0x00 ,0x3F,0x00,0x7F,0xE0,0x03,0xF3,0xF0,0x00,0x 1F,0xE0,0xFF,0xC0,0x00,0xF9,0xF0,0x00 ,0x3F,0x00,0x7F,0xE0,0x07,0xFF,0xF8,0x00,0x 1F,0xE0,0xFF,0xC0,0x01,0xFF,0xF8,0x00 ,0x3F,0x00,0x7F,0xE0,0x07,0xFF,0xF8,0x00,0x 1F,0xE0,0xFF,0xC0,0x01,0xFF,0xF8,0x00 ,0x3F,0x00,0x7C,0xE0,0x07,0xFF,0xF8,0x00,0x 1B,0xE0,0xF9,0xC0,0x01,0xFF,0xF8,0x00 ,0x37,0x00,0x38,0xF0,0x03,0xFF,0xF0,0x00,0x 39,0xE0,0xF1,0xE0,0x00,0xFF,0xF0,0x00 ,0x73,0x00,0x30,0x70,0x01,0xFF,0xE0,0x00,0x 30,0xC0,0x60,0xE0,0x00,0x7F,0xE0,0x00 ,0x61,0x00,0x00,0x78,0x00,0xFF,0xC0,0x00,0x 30,0x00,0x00,0xF0,0x00,0x3F,0xC0,0x00, 0x60,0x00,0x00,0x38,0x00,0x7F,0x80,0x00,0x6 0,0x00,0x00,0x70,0x00,0x1F,0x80,0x00,0 xC0,0x00,0x00,0x1C,0x00,0x3F,0x00,0x00,0x C0,0x00,0x00,0x38,0x00,0x0F,0x00,0x01, 0x80,0x00,0x00,0x0E,0x00,0x1E,0x00,0x00,0x 80,0x00,0x00,0x1C,0x00,0x06,0x00,0x01, 0x00,0x00,0x00,0x07,0x00,0x0C,0x00,0x01,0x 80,0x00,0x00,0x0E,0x00,0x06,0x00,0x03, 0x00,};。