LCD12864显示图片
- 格式:pdf
- 大小:769.96 KB
- 文档页数:10
LCD12864图形液晶并口显示【教学引入】液晶屏,在生活中很常见,我们常见的液晶显示器,如电脑的显示器,电视机,手机等等。
液晶屏在生活中已得到了普遍应用,它显示个各种各样的画面。
上次呢,我们让12864显示了汉字,这次我们让它显示图形。
【教学目标】1、掌握LCD12864液晶屏的绘图用法;2、编写LCD12864液晶屏的指令代码;【知识目标】1、掌握LCD12864液晶屏的绘图用法;2、掌握LCD12864液晶屏指令代码;【教学准备】电脑、Proteus、Keil、MCS-51系列单片机综合实验箱【教学方法】教法:讲授法、讨论法学法:练习法、探究法【教学课时】四课时【教学过程】一、12864液晶介绍12864液晶屏不仅能显示汉字,还能显示图形。
今天呢,我们就来看看液晶屏怎么显示图形的。
首先呢,我们看看显示坐标关系1、图形显示坐标水平方向X——以字节为单位垂直方向Y——以位为单位由图可知,水平方向为0~31,以位为单位;垂直方向为0~7、8~16,以2个字节为单位,分为上下两个块。
如下图2、图片取模有了图像显示的坐标,我们该把图片变成代码了,PCtoLCD2002不仅能取模汉字,还能取模图片。
字模软件PCtoLCD2002双击图标打开软件可以看到下图所示的画面,此软件也是绿色软件打开后可以直接使用。
软件有两种工作模式:字符模式和图形模式;上图界面是字符模式。
可以通过菜单栏模式(C)切换工作模式。
我们选择图形模式,最大化,如下图。
单击工具栏中的图标按钮,看到如下图所示的对话框。
我们可以根据自己的实际需要而进行的设置,因其简单易用这里不再详细讲述其使用方法。
设置完成后,单击左下角的确定保存。
设置如下图回到PCtoLCD2002完美版-(图形模式)界面,单击按钮,导入要显示的128X64的bmp图片,单击图标按钮,可以看到软件下方的数据显示区域出现的对应的显示数据。
如下图阅“12864M.PDF”12864M液晶显示模块技术手册——四、用户指令集1、指令表2:(RE=1:扩充指令集),如下图,讲解了12864的扩充指令集。
带字库的LCD12864自定义图片、汉字显示
一、将图片修改成128*64像素
1、打开win7自带的画图软件,载入图片(图片不满足128*64)
2、点击重新调整大小(或者图片处右击鼠标),如下设置,保持纵横比不勾选。
3、图片另存为,选择单色位图。
二、LCD12864用ZIMO21软件取模(BMP图片)
1、基本设置里面设置LCD的大小(如果图片像素就是128*64就不需要设置,直接打开)
2、打开BMP图片(黑白)
3、发现图片偏小,不足128*64,此时生成的数据就缺少128*64个点,显示会照成错误,需要修改一下图片大小。
改成128*64
3、直接调入128*64图片
4、设置参数,如下
5、取模选择C51格式
6、显示效果
三、PCtoLCD2002图片取模设置
四、PCtoLCD2002汉字取模设置(根据程序而定)
1、汉字取模参数设置
2、显示效果如下。
/****************************************屏幕显示驱动*****************************************/#include "GT23L24T3Y.h"#include "print.h"#include <stdio.h>#include <string.h>#include "bmp_picture.h"#include "lcd_12864.h"#include "..\user\rtc.h"u8 comTable[]={4,5,6,7,3,2,1,0};extern void Setlcd_Addr ( u8 row,u8 column );//外部函数调用声明extern u8 Num_Code[];//字库获得函数extern u8 Big_Num_Code[];//字库获得函数extern u8 Picture_Code[];//字库获得函数extern u8 arrow1[];extern u8 arrow2[];u8 testlcd[]="测试数据";/************************************************************************//显示中文输出//函数名:print_16//功能:显示16x16点阵字符串。
// 函数名:print_16// 功能:显示16点阵字符串// 形参:// row:x轴// column:y轴// *lcd:显示字符串// logic:显示取反// wei.显示位值// len长度*************************************************************************/void _print_15 ( u8 row,u8 column,const char *lcd,u8 logic ,u8 wei,u8 len){u8 w=0,x=0,y=0,l=0,read_data=0;u8 Length=0;GT_cs1;//字库片选至高for ( l=len; l>0; l=l-2 ) //总字节{w=*lcd;if ( w&0x80 ) //为1则为汉字,为0则为ASCII码{GT_cs0; //字库片选选定GT23_Write ( GT23_write_15 ( lcd ) ); //写入字库指令以及文字地址for ( x=0; x<2; x++ ){Setlcd_Addr (row,column);for(y=0;y<16;y++){read_data=GT23_Read();if(logic == true){// read_data = ~read_data;}WriteData(read_data );}row++;}GT_cs1;//字库片选至高row-=2;column+=16;if(column>=128){row+=2;column=0;}lcd=lcd+2;}}}/************************************************************************//描述:显示中文输出//使用:顶层函数调用参数:row 行column 列*lcd 字符串logic 反白*************************************************************************/ void print_15 ( u8 row,u8 column,const char *lcd,u8 logic ){u8 c=strlen ( lcd );_print_15(row,column,lcd,logic,0,c);}/************************************************************************ //描述:显示图片输出//使用:顶层函数调用参数:row 行column 列*lcd 字符串logic 反白*************************************************************************/ void print_array(u16 row,u16 column,u16 size_x,u16 size_y,const u8 *ptr, u8 logic){u8 w=0,x=0,y=0,l=0,read_data=0;u8 Length=0;for( x=0;x<size_x/8;x++){Setlcd_Addr (row,column);for(y=0;y<size_y;y++){read_data=*( ptr + (y+x*size_y) );if(logic == true){read_data = ~read_data;}WriteData1(read_data);// WriteData1(0XFF);}row++;}}u8 OpMgsCode[][10] ={"病人信息","循环播放","房号与床号","从机音量","对比度","广播""恢复","音乐","主机音量","时间"};u8 DayCode[][7]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};void PrintMainFace(time mytime,u8 PeopleNum){//待机界面函数u8 Hrd,Ten,One;Lcd_Clr();//清屏print_15 ( 0,16, "月",false );print_15 ( 0,48, "日",false );print_15 ( 0,70, &DayCode[mytime.day][0],false );//显示星期//日期显示Ten=mytime.month/10;One=mytime.month%10;print_array(0 , 0, 16 , 7 , &Num_Code[Ten*14], false);print_array(0 , 8, 16 , 7 , &Num_Code[One*14], false);Ten=mytime.date/10;One=mytime.date%10;print_array(0 , 32, 16 , 7 , &Num_Code[Ten*14], false);print_array(0 , 40, 16 , 7 , &Num_Code[One*14], false);//时间显示Ten=mytime.hour/10;One=mytime.hour%10;print_array(2 , 20, 32 , 21 , &Big_Num_Code[Ten*84], false);print_array(2 , 42, 32 , 21 , &Big_Num_Code[One*84], false);Ten=mytime.minute/10;One=mytime.minute%10;print_array(2 , 68, 32 , 21 , &Big_Num_Code[Ten*84], false);print_array(2 , 90, 32 , 21 , &Big_Num_Code[One*84], false);//住院人数显示print_15 ( 6,32, "住院人数",false );Hrd=PeopleNum/100;PeopleNum=PeopleNum%100;Ten=PeopleNum/10;One=PeopleNum%10;if(Hrd ){print_array(6 , 96, 16 , 7 , &Num_Code[Hrd*14], false);}print_array(6 , 102, 16 , 7 , &Num_Code[Ten*14], false);print_array(6 , 110, 16 , 7 , &Num_Code[One*14], false);}void PrintPictureFace(u8 Index){time mytime;Lcd_Clr();//清屏mytime.month = 10;mytime.date = 16;mytime.hour = 12;mytime.minute = 15;mytime.day =3;PrintMainFace(mytime,96);//print_array(0 , 10, 48 , 8 , arrow1, false);//左箭头显示// print_array(0,38 ,48 ,48 , &Picture_Code[288*Index], false);//图片显示// print_array(0,108, 48 , 8 , arrow2, false); //右箭头显示//print_15 ( 6,33, &OpMgsCode[0][Index],false );//提示信息显示}。
看到工具箱旁边那个LCD12864很久没用了(当初买回来用的时候只是简单地测试了一下),于是萌生了重新写一次接口程序的想法(而且这次要给它加个图片显示的功能),好,说做就做,就用Atmega16和ICCAVR来做吧,最近这MCU和平台用得比较熟练。
马上从书堆里把当初打印出来的中文datasheet给翻了出来,依葫芦画瓢地写了个初始化程序。
好,OK。
编译通过。
于是又写了一个可以自定义从XY坐标值开始输出显示的函数,再次编译,也通过,OK。
于是呼马上写了四行简单的字符烧到单片机上试了一下,嘿嘿,一次通过。
如下图:后来在进一步测试的时候也出了点小问题。
就是我是使用USBISP烧写器把程序烧写进AVR的(此时实验板由USBISP烧写器供电),想要实现从第一行的第一个字符开始连续显示"0123456789"。
刚烧写完程序后能看到LCD12864上正常显示"0123456789",但是把烧写器从实验板上断开连接,单独用USB给实验板供电的时候,LCD的第一行只是显示"123456789",第一个字符消失了……,左思右想地弄了一个多小时后,终于把问题给解决了,就是把初始化程序的延时适当增加了些,真是奇怪。
刚开始一直想不通为什么在烧写器供电的情况下就正常显示,而换到USB供电后就出了问题。
后来再想想,估计是跟供电有关。
在使用USBISP烧写器供电的时候,LCD的背光灯明显比用USB供电的时候来得亮,而且对比度也高很多,看来是因为换到USB供电后,供电不怎么充足,以至于LCD在上电初始化的时候花上了更多的时间去初始化(因为供电低了,功率小了,跑起来有点力不从心,用的时间就久了嘛……我是觉得可以这样去理解的)接下来呢,就到了有点难度的画图了。
当初刚买到12864的时候只是简单测试了字符显示功能,除了因为画图还不需要用到,另外一个原因就是那datasheet上关于画图那部分的内容不怎么看得懂……。
液晶12864显示图片液晶12864简介12864是128*64点阵液晶模块的点阵数简称。
基本参数1、低电源电压(VDD:+3.0~+5.5V)。
2、显示分辨率:128×64 点。
3、内置汉字字库,提供8192 个16×16 点阵汉字。
4、内置128 个16×8 点阵字符。
5、2MHZ 时钟频率。
6、显示方式:STN、半透、正显。
7、驱动方式:1/32DUTY,1/5BIAS。
8、视角方向:6 点。
9、背光方式:侧部高亮白色LED。
10、通讯方式:串行、并口可选。
11、内置DC-DC 转换电路,无需外加负压。
12、无需片选信号,简化软件设计。
13、工作温度: 0℃~+55℃ ,存储温度: -20℃~+60℃。
液晶12864接口液晶12864显示图片程序源代码/*******************12864显示图片******************** 处理器:51单片机* 开发环境:keil* 功能:12864显示图片****************************************************/#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/*12864端口定义 */#define LCD_data P0 //数据口sbit LCD_RS = P1^0; //寄存器选择输入sbit LCD_RW = P1^1; //液晶读/写控制sbit LCD_EN = P2^5; //液晶使能控制sbit LCD_PSB = P1^2; //串/并方式控制unsigned char code zhu[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFE,0x7D,0x7F,0xFF,0xFF,0xFF,0xFD,0xEF,0xFF,0xF0,0x04,0x3F,0xFF, 0xFF,0xFF,0xFF,0xFD,0xBD,0x7F,0xFF,0xFF,0xFF,0xE6,0xE7,0xFF,0xF4,0x00,0x7F,0xFF, 0xFF,0xFF,0xFF,0xFD,0x3D,0x7F,0xFF,0xFF,0xFF,0xDE,0x00,0xFF,0xF0,0x00,0x7F,0xFF, 0xFF,0xFF,0xFF,0xC4,0x3E,0x7F,0xFF,0xFF,0xFF,0xA8,0x00,0x1F,0xF0,0x00,0x7F,0xFF, 0xFF,0xFF,0xFF,0xBA,0x46,0x7F,0x7F,0xFF,0xFF,0x70,0x00,0x0E,0xF0,0x00,0xFF,0xFF, 0xFF,0xFF,0xFF,0x7D,0xBB,0x5F,0x7F,0xFF,0xFE,0xE1,0x70,0x01,0xF0,0x00,0xFF,0xFF, 0xFF,0xFF,0xFF,0x7D,0xA3,0xEF,0x9F,0xFF,0xFF,0x06,0xF8,0x03,0xF0,0x00,0xFF,0xFF, 0xFF,0xFF,0xF0,0x7C,0x07,0xB6,0x07,0xFF,0xFF,0xCC,0xF9,0x81,0xF0,0x01,0xFF,0xFF, 0xFF,0xFF,0xEF,0x75,0xDF,0xB8,0x01,0xFF,0xFF,0x98,0xF9,0x80,0xF1,0xF1,0xEF,0xFF, 0xFF,0xFF,0xEF,0x6D,0xEF,0x58,0xE0,0xFF,0xFF,0x90,0x70,0x00,0xF3,0xFB,0xFF,0xFF, 0xFF,0xFF,0xEF,0xBB,0xEE,0xD9,0xF0,0xFF,0xFF,0xB0,0x0C,0x00,0x73,0x1B,0xAF,0xFF, 0xFF,0xFF,0xF7,0x87,0xAE,0xC2,0xF0,0x7F,0xFF,0xE0,0x0C,0x62,0x36,0xFD,0xFF,0xFF, 0xFF,0xFF,0xF0,0x33,0xDD,0xD2,0x60,0x7F,0xFF,0xE0,0x31,0x61,0x76,0xFD,0xEF,0xFF, 0xFF,0xFF,0xEF,0xA0,0x3B,0xF4,0x18,0x3F,0xFF,0xE0,0x30,0x09,0x6C,0x3D,0xFF,0xFF, 0xFF,0xFF,0xDF,0x83,0xB6,0xA5,0x98,0x3F,0xFF,0xE0,0x00,0x01,0x7B,0xDD,0xAF,0xFF, 0xFF,0xFF,0xDE,0x83,0xCF,0xED,0x80,0x3F,0xFF,0xE0,0x00,0x01,0xFA,0xDD,0xFF,0xFF, 0xFF,0xFF,0xDD,0x7B,0xDE,0xF4,0x00,0x3F,0xFF,0xE0,0x00,0x09,0xFB,0xDD,0xEF,0xFF, 0xFF,0xFF,0xEE,0x5B,0xDF,0xF4,0x00,0x3F,0xFF,0xF0,0x00,0x29,0xF9,0xBB,0xFF,0xFF, 0xFF,0xFF,0xF1,0x79,0xBE,0xB4,0x00,0x3F,0xFF,0xF0,0x00,0x33,0xFF,0xFA,0xAF,0xFF, 0xFF,0xFF,0xEF,0x68,0x03,0xF8,0x00,0x3F,0xFF,0xF8,0x0F,0xE3,0xFF,0xF7,0xFF,0xFF, 0xFF,0xFF,0xDF,0x70,0x16,0xEA,0x01,0x3F,0xFF,0xF8,0x1F,0xC7,0xEF,0xF6,0xEF,0xFF, 0xFF,0xFF,0x07,0x80,0x0F,0xFA,0x1D,0x7F,0xE0,0x3C,0x7F,0x87,0xEF,0xEF,0xFF,0xFF, 0xFF,0xFF,0x0B,0xA0,0x2A,0xB6,0x1E,0x70,0x1F,0xBF,0x3E,0x0F,0xD3,0x9A,0xAF,0xFF, 0xFF,0xFF,0x85,0xA0,0x5F,0xF7,0x3C,0xF7,0xE0,0x3C,0x00,0x3F,0xDC,0x7F,0xFF,0xFF, 0xFF,0xFF,0x41,0x11,0x2E,0xF6,0x81,0xF8,0x00,0x3F,0x00,0xFF,0xAF,0x8E,0xEF,0xFF, 0xFF,0xFF,0x94,0xA0,0xFF,0xF7,0xFF,0xF8,0x00,0x3F,0xFF,0x1F,0xBF,0x77,0xFF,0xFF, 0xFF,0xFF,0xE2,0x3F,0xAA,0xB7,0x8B,0xFC,0x00,0x3F,0xDF,0xDF,0x6A,0xFA,0xAF,0xFF, 0xFF,0xFF,0x88,0x01,0xFF,0xFB,0x75,0xFC,0x00,0x3F,0xDF,0xBE,0xFE,0xFB,0xFF,0xFF, 0xFF,0xFF,0x40,0x00,0x3E,0xEB,0xB7,0xFE,0x00,0x3F,0xE0,0x7C,0x78,0xFB,0xF7,0xFF, 0xFF,0xFF,0x00,0x00,0x0F,0xFD,0xC7,0xFE,0x01,0xBF,0xFF,0xFA,0xA7,0x70,0x6F,0xFF, 0xFF,0xFF,0x0F,0xBF,0x0A,0xAA,0xFF,0xFE,0x0F,0xBF,0xFF,0xE7,0xCF,0x8F,0xAF,0xFF, 0xFF,0xFF,0x47,0x5E,0x2F,0xFF,0x7F,0xFF,0x1F,0xBF,0xFF,0xDF,0xEF,0x8F,0xAF,0xFF, 0xFF,0xFF,0x38,0x21,0xDE,0xEE,0x9F,0xFF,0xBF,0x7F,0xFF,0x3F,0xEF,0x0F,0xB7,0xFF, 0xFF,0xFF,0x07,0xD6,0x2F,0xFF,0xE7,0xFF,0xC0,0xFF,0xFC,0xFF,0xF0,0xEF,0xBF,0xFF, 0xFF,0xFF,0x41,0x8C,0xCA,0xBA,0xB9,0xFF,0xFF,0xFF,0xE3,0xFF,0xFD,0xF0,0x6F,0xFF, 0xFF,0xFF,0x93,0xCC,0xDF,0xFF,0xFE,0x3F,0xFF,0xFE,0x00,0x7F,0xFD,0xF7,0x7F,0xFF, 0xFF,0xFF,0x40,0x03,0x2E,0xEE,0xEF,0xC2,0x03,0xC0,0xFF,0x9F,0xFD,0xF7,0xAF,0xFF, 0xFF,0xFF,0xC0,0x03,0x3F,0xFF,0xFF,0xF9,0xFC,0x37,0xFF,0xE3,0xFE,0xE7,0xDF,0xFF, 0xFF,0xFF,0xD1,0xCC,0xFB,0xBB,0xBB,0xE7,0xFF,0x8F,0xFF,0xFC,0x3E,0x17,0xDF,0xFF,0xFF,0xFF,0xC0,0x8C,0xFF,0xFF,0xFF,0x9F,0xFF,0xDF,0xFF,0xFF,0xC6,0xF7,0xEF,0xFF,0xFF,0xFF,0xC0,0x90,0x2F,0xEF,0xEE,0x7F,0xFF,0xBF,0xFF,0xFF,0xF9,0xFB,0xF7,0xFF,0xFF,0xFF,0xC0,0xA0,0x3F,0xFF,0xF9,0xDF,0xFF,0xBF,0xFF,0xDF,0xFE,0xFB,0xFF,0xFF,0xFF,0xFF,0x10,0xC0,0x08,0x00,0x00,0x0F,0xFF,0xBF,0xFF,0x80,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xE8,0x80,0x7F,0xFF,0xFF,0xF3,0xFF,0xBF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0xC0,0x7F,0xFF,0xFF,0xFC,0x7E,0x5F,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xFF,0xFF,0x81,0xE0,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};#define delayNOP0(); {_nop_();_nop_();};#define delayNOP1(); {_nop_();_nop_();_nop_();_nop_();};void delay(int In,int Out) {int i,j;for(i=0;i<In;i++){for(j=0;j<Out;j++){;}}}/*******************************************************************//*检查LCD忙状态 *//*lcd_busy为1时,忙,等待。
玩转12864液晶(2)--显示图片,画点,画任意直线本帖被红金龙吸味执行加亮操作(2009-07-04)通过上一篇的实验,相信大家都掌握了显示字符的基本用法。
下面我们来看一下12864液晶更高级的用法。
首先是它的绘图功能。
让我们先来显示一整副的图片吧,也就是128x64大小。
在使用绘图功能时,先要打开扩充指令集,然后再打开绘图功能。
接着就是送数据显示了。
这里我们首先要弄明白ST7920的显示坐标关系。
其显示坐标如下。
从图中可以看出,X方向共有8个字(16个字节)Y方向共有0~31 行分为上下两个屏。
弄懂了之后我们就可以依照此坐标来显示一整屏的图片了。
随便用一个图片的提取转换软件,讲一副126X64大小的图片转换成字节数据,总共字节大小为128*64/8 = 1024个字节。
下面我们来看看这个显示整屏图像的函数void v_Lcd12864DrawPicture_f( unsigned char code *pPicture ){unsigned char i, j, k ;for( i = 0 ; i < 2 ; i++ )//分上下两屏写{for( j = 0 ; j < 32 ; j++ ){v_Lcd12864SendCmd_f( 0x80 + j ) ;//写Y坐标if( i == 0 ) //写X坐标{v_Lcd12864SendCmd_f( 0x80 ) ;}else{v_Lcd12864SendCmd_f( 0x88 ) ;}for( k = 0 ; k < 16 ; k++ ) //写一整行数据{v_Lcd12864SendData_f( *pPicture++ ) ;}}}v_Lcd12864SendCmd_f( 0x30 ) ;}看看效果图片如下:显示一个人的图像下面来看看如何在任意一个位置显示或者是擦除一个点对于12864这种二值显示屏来说,其显示状态无外乎显示和不显示一个点这两种状态。
LCD12864液晶资料介绍LCD12864液晶模块12864LCD显示块是所说的点阵液晶显示模块,就是由128*64个液晶显示点组成的一个128列*64行的阵列,所以也就叫成了12864.每个显示点都对应着有一位二进制数,0表示灭,1表示亮。
存储这些点阵信息的RAM被称为显示数据存储器.如果要显示某个图形或汉字就是将相应的点阵信息写入到对应的存储单元中。
图形或汉字的点阵信息是由自己设计,这时候问题的关键是显示点在液晶屏上的位置与其在存储器中的地址之间的关系.带中文字库的TS128X64(图2—6)是一种具有4位/8位并行、2线或3线串行多种接口方式,引脚功能见图表2-2,显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集。
利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字、也可完成图形显示、低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块.图2-6 TS12864液晶实物图编号名称引脚说明编号名称引脚说明1VSS电源地11DB4三态数据线2VDD电源正极12DB5三态数据线3V0对比度调整13DB6三态数据线4RS(CS)显示数据14DB7三态数据线5R/W读/写选择端(H/L)15PSB传输方式6E使能信号16NC悬空7DB0三态数据线17RESET复位端,低电平有效8DB1三态数据线18VOUT驱动电压输出端9DB2三态数据线19A背光源正极10DB3三态数据线20K背光源负极及对比度调整。
LCD12864液晶显示模块的使用与分析(函代码分析)一、LCD12864功能应用LCD12864液晶显示模块能显示中文汉字、数字、字符,能显示数字与字符的个数为64个(4行,每行16个数字或字符),能显示汉字的个数为32个(4行,每行8个汉字)。
其内置了8192个中文汉字(16*16的点阵)、128个字符(8*16点阵)、以及64*256 点阵显示RAM(GDRAM)。
图1外观尺寸图图2外观尺寸图图3 LCD12864读操作时序图4 LCD12864写操作时序二、LCD12864主要技术参数(1)工作电压:3.3V-5.5V,模块最佳电压为5V。
(2)可以在显示界面显示数字、字母和中文汉字。
(3)与外部单片机的通信方式有并行或串行两种通信方式,这里主要介绍并行通信方式。
(4)显示内容:128 列× 64 行(5)显示颜色:黄绿/蓝屏/灰屏(6)LCD 类型:STN(7)与MCU 接口:8 位或4 位并行/3 位串行(8)配置LED 背光(9)多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等三、LCD12864液晶显示的电路用法分析图5 LCD12864电路连接图图6 LCD12864电路连接图LCD12864模块主要用来显示所要的界面信息或数据,所以要求能显示汉字,字符和数字,而LCD12864满足系统要求的显示功能。
LCD12864在显示字母和数字时,是4*16的显示字符模块,即可以显示4行,每行可以显示16个字母或数字;在显示汉字时,是4*8的汉字显示模块,即可以显示4行,每行可以显示8个汉字。
下面进行介绍的是并行通信的显示方式。
按照电路原理图跟单片机最小系统进行连线,如图6所示。
LCD12864共有20个引脚,其引脚具体功能如表1所示,由表可得LCD12864引脚组成为8位数据传输端口(DB0-DB7);两个电源引脚(VCC,GND);两个电源背光引脚(BLK,BLA),控制LCD的背景亮度;一个VO引脚,外接一个上拉电阻(控制LCD12864的字符对比度,让字符更加的清晰可见);RST复位引脚,低电平有效,此处直接接高电平;第16、17位空引脚,不用管;剩下的RS,RW,EN 和PSB四个引脚则跟LCD12864的写入息息相关,通过PSB可以控制LCD12864跟单片机的通信方式,输入高电平,则LCD12864跟单片机的通信模式为并行通信,低电平则为串行通信。
电子小设计液晶显示屏幕元器件基础知识LCD12864点阵型液晶介绍LCD12864点阵型液晶简介:12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4个(16×16点阵)汉字。
LCD12864点阵型液晶实物LCD12864 引脚介绍:管脚号管脚名称LEVER 管脚功能描述1 VSS 0 电源地2 VDD 5.0V 电源电压3 V0 - 液晶显示器驱动电压4 D/I(RS) H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB07 DB0 H/L 数据线8 DB1 H/L 数据线9 DB2 H/L 数据线10 DB3 H/L 数据线11 DB4 H/L 数据线12 DB5 H/L 数据线13 DB6 H/L 数据线14 DB7 H/L 数据线15 CS1 H/L H:选择芯片(右半屏)信号16 CS2 H/L H:选择芯片(左半屏)信号17 RET H/L 复位信号,低电平复位18 VOUT -10V LCD驱动负电压19 LED - LED背光板电源20 LED- - LED背光板电源LCD12864液晶屏幕原理图:LCD12864液晶屏幕原理图LCD12864液晶屏幕驱动程序://12864液晶操作口sbit rs = P1^0;sbit rw = P1^1;sbit en = P1^2;/*******12864驱动程序************///===========液晶写指令========== void writecommand(uchar command){checkbusy();rs=0;rw=0;en=1;P0=command; //液晶数据线P0en=0;}//============液晶写数据============ void writedata(uchar date){checkbusy();rs=1;rw=0;en=1;P0=date;en=0;}//=========液晶设置==========void lcdset(void){writecommand(0x30); //基本指令集writecommand(0x01); //清屏,DDRAM的地址归零writecommand(0x02); //地址归位writecommand(0x0c); //显示开,光标关,反白关writecommand(0x06); //DDRAM地址加1}//=========设置光标===========void cursor(uchar y,uchar x){uchar command = 0x80;writecommand(0x0f);//开光标闪烁if( y == 2)y = 3;else if(y == 3)y = 2;command |= (y-1) << 3;command = (x-1);writecommand(command);}//========字符显示=======void display(uchar y, uchar x, uchar *p){switch (y){case 1:writecommand(0x7f x); break; //液晶第一行case 2:writecommand(0x8f x); break; //0x90 (x-1) case 3:writecommand(0x87 x);break;case 4:writecommand(0x97 x);break;default:break;}while(*p)writedata(*p );}//=========显示数字=======void displayNumber(uchar y,uchar x,uchar number) {switch (number){//引号内数字为中文全角输入占据一个汉字位置case 0:display(y,x,'0');break;case 1:display(y,x,'1');break;case 2:display(y,x,'2');break;case 3:display(y,x,'3');break;case 4:display(y,x,'4');break;case 5:display(y,x,'5');break;case 6:display(y,x,'6');break;case 7:display(y,x,'7');break;case 8:display(y,x,'8');break;case 9:display(y,x,'9');break;default:break;}}void displaytime0(void) //静态数据{display(1, 2, '智能作息系统');display(2, 3, '年');display(2, 6, '月');display(3, 1, '星期');display(3, 8, '℃');display(4, 3, '-'); //全角输入display(4, 6, '-');}/*******12864主程序调用************/lcdset();delay(1000);lcdset(); //调用两次可以解决上电后液晶不能自动复位问题/*显示版本信息*/display(1,3,'welcome!');display(2,2,'智能作息系统');display(3,3,'版本1.0');display(4,1,'制作人: 马云');writecommand(0x01); //清屏LCD12864液晶屏幕显示效果:LCD12864液晶屏幕显示效果。
用12864显示单色图片首先介绍本12864液晶显示器:型号:QC12864B因为单片机读取的是数据,而不是直接的图片。
得将图片进行取模,图片应该是单色图片,像素128*64。
下面我为大家介绍个实例。
①、在电脑附件画图,首先设置属性开始画图保存文件,注意格式:②、然后进行取模。
③、编程:#include<reg51.h>#define uchar unsigned char#define uint unsigned int //宏定义#define lcd P2 //数据端口sbit rs=P1^2; //指令/数据选择信号sbit rw=P1^1; //读写选择信号sbit e=P1^0; //使能端sbit psb=P1^3; //串并选择端,高电平为并行,低电平为串行uchar code ai[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xCE,0x00,0x00,0x00,0x00,0x00,0x01,0xC1,0xE0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0x00,0x00,0x03,0x31,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x0E,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0x9B,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x78,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00, 0x00,0x00,0x00,0xF8,0xEF,0x00,0x00,0x00,0x00,0x00,0x1B,0xFC,0x1E,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0xFE,0x00,0x00,0x00,0x00,0x00,0x1E,0x60,0x38,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x38,0x70,0x20,0x00,0x00,0x00, 0x00,0x00,0x00,0x3E,0x63,0x00,0x00,0x00,0x00,0x00,0x30,0x7F,0xE0,0x00,0x00,0x00, 0x00,0x00,0x03,0xF8,0x73,0x00,0x00,0x00,0x00,0x00,0x33,0xF8,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0x37,0x00,0x00,0x00,0x00,0x00,0x06,0xE0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0xF8,0x1C,0x00,0x00,0x00,0x00,0x00,0x01,0x83,0x80,0x00,0x00,0x00, 0x00,0x00,0x0F,0xD8,0x7C,0x00,0x00,0x00,0x00,0x00,0x03,0xC7,0x00,0x00,0x00,0x00, 0x00,0x00,0x0F,0x18,0xE6,0x00,0x00,0x00,0x00,0x00,0x06,0x7E,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x19,0x87,0x10,0x00,0x00,0x00,0x00,0x0E,0x1C,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xF8,0x03,0x90,0x00,0x00,0x00,0x00,0x18,0x3E,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x78,0x01,0xF8,0x00,0x00,0x00,0x00,0x30,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x0F,0x00,0x00,0x07,0xD0,0x00,0x01,0xF1,0xE0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1C,0x0E,0x00,0x00,0x0C,0x38,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1C,0x1E,0x00,0x00,0x1C,0x38,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1E,0x1E,0x00,0x00,0x38,0x18,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1E,0x1E,0x00,0x00,0x38,0x18,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1E,0x1E,0x00,0x00,0x30,0x18,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0x3E,0x00,0x00,0x70,0x00,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0x3E,0x00,0x00,0x70,0x00,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0x3E,0x00,0x00,0x70,0x00,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0x2E,0x00,0x00,0x70,0x00,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1B,0xEE,0x00,0x00,0x70,0x00,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x1B,0xEE,0x00,0x00,0x70,0x00,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0xCE,0x00,0x00,0x38,0x00,0x00,0x00,0x60,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x19,0xCE,0x00,0x00,0x38,0x18,0x00,0x00,0x60,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0xCE,0x00,0x00,0x1C,0x10,0x00,0x00,0x71,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0x8E,0x00,0x00,0x0E,0x70,0x00,0x00,0x71,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x3E,0x1F,0x00,0x00,0x07,0xE0,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; //图片数据void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void xiezhiling(uchar a)//写指令函数{rs=0;rw=0;lcd=a;delay(5);e=1;delay(5);e=0;}void xieshuju(uchar a)//写数据函数{rs=1;rw=0;lcd=a;delay(5);e=1;delay(5);e=0;}void qingping() //清除DDRAM的数据:送入0 {uchar x,y,a,b,c;x=0x80;y=0x80;xiezhiling(0x34);//关闭绘图功能for(a=0;a<2;a++){for(b=0;b<32;b++){xiezhiling(y+b);xiezhiling(x);for(c=0;c<16;c++)xieshuju(0x00);}x=0x88;}xiezhiling(0x36);//打开绘图功能xiezhiling(0x30);}void tupian(uchar *p) //图片数据提取函数{uchar x,y,a,b,c;xiezhiling(0x34); //关闭绘图功能x=0x80;y=0x80;for(c=0;c<2;c++){for(a=0;a<32;a++){xiezhiling(y+a);xiezhiling(x);for(b=0;b<16;b++)xieshuju(*p++);}x=0x88;}xiezhiling(0x36); //打开绘图功能xiezhiling(0x30);}void init() //初始化函数{xiezhiling(0x30);//功能设定为基本指令xiezhiling(0x0c);//显示开,游标关xiezhiling(0x01);//清除显示qingping(); //清屏}void main(){init();tupian(ai);while(1);}④、作品展示:谢谢!!!。