LCD12864与LCD162的区别:
不仅能显示字符,而且能显示汉字和图形
1:LCD12864介绍
完整的像素点,无空隙
一个汉字最小占16*16,所以有8*4的汉字
图左的汉字是带字库里所包含的。。。中间的汉字是用户需要自己取模计算得出的汉字。。
注: 0011 0000--->0x30
注: 0000 0001---->0x01 0000 0110---->0x06
0000 1100--->0x0c
注:B为光标闪烁
注:图下为显示范围。含有壹区,贰区,叁区,肆区。但是只有一区三区可以显示,并且每个区的每一格代表能显示一个汉字,两个字符。
注:不带字库的LCD12864特点:面积小,,,显示汉字,图像,都需要取模软件
2:硬件设计
3:软件设计
或运算,有0则为0,有一则为该对应的数值,所以x|=0x80,如x=1,变为1|0x80=0x81
4:原始代码
1.main部分
#include "public.h" #include "lcd12864.h" void main() { lcd12864_init();//LCD12864初始化 lcd12864_show_string(0,0,"Hello World!");//第1行字符串显示 lcd12864_show_string(0,1,"大家好!");//第2行字符串显示 lcd12864_show_string(0,2,"欢迎光临");//第3行字符串显示 lcd12864_show_string(0,3,"再见");//第4行字符串显示 while(1) { } }
2.lcd12864.c部分
#include "lcd12864.h" //LCD12864写命令 void lcd12864_write_cmd(u8 cmd) { LCD12864_RS=0;//选择命令 LCD12864_WR=0;//选择写 LCD12864_E=0; LCD12864_DATAPORT=cmd;//准备命令 delay_ms(1); LCD12864_E=1;//使能脚E先上升沿写入 delay_ms(1); LCD12864_E=0;//使能脚E后负跳变完成写入 } //LCD12864写数据 void lcd12864_write_data(u8 dat) { LCD12864_RS=1;//选择数据 LCD12864_WR=0;//选择写 LCD12864_E=0; LCD12864_DATAPORT=dat;//准备数据 delay_ms(1); LCD12864_E=1;//使能脚E先上升沿写入 delay_ms(1); LCD12864_E=0;//使能脚E后负跳变完成写入 } //LCD12864初始化 void lcd12864_init(void) { LCD12864_PSB=1;//选择8位或4位并口方式 lcd12864_write_cmd(0x30);//数据总线8位,基本指令操作 lcd12864_write_cmd(0x0c);//整体显示关,游标显示关,游标正常显示 lcd12864_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动 lcd12864_write_cmd(0x01);//清屏 } //LCD12864清屏 void lcd12864_clear(void) { lcd12864_write_cmd(0x01); } //LCD12864显示字符串 void lcd12864_show_string(u8 x,u8 y,u8 *str) { if(y<=0)y=0; if(y>3)y=3; x&=0x0f; //限制x,y不能大于显示范围 switch(y) { case 0: x|=0x80;break;//第1行地址+x的偏移 case 1: x|=0x90;break;//第2行地址+x的偏移 case 2: x|=0x88;break;//第3行地址+x的偏移 case 3: x|=0x98;break;//第4行地址+x的偏移 } lcd12864_write_cmd(x); while(*str!='\0') { lcd12864_write_data(*str); str++; } }
3:lcd12864.h 部分
#ifndef _lcd12864_H #define _lcd12864_H #include "public.h" //管脚定义 sbit LCD12864_RS=P2^6;//数据命令选择 sbit LCD12864_WR=P2^5;//读写选择 sbit LCD12864_E=P2^7;//使能信号 #define LCD12864_DATAPORT P0 //LCD12864数据端口定义 sbit LCD12864_PSB=P3^2;//8位或4并口/串口选择 //函数声明 void lcd12864_init(void); void lcd12864_clear(void); void lcd12864_show_string(u8 x,u8 y,u8 *str); #endif