12864LCD液晶显示原理及使用方法Word文档格式.docx
- 文档编号:15202308
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:12
- 大小:218.99KB
12864LCD液晶显示原理及使用方法Word文档格式.docx
《12864LCD液晶显示原理及使用方法Word文档格式.docx》由会员分享,可在线阅读,更多相关《12864LCD液晶显示原理及使用方法Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
1GND0电源地
2VCC+5.0V电源电压
3VLCD-液晶显示器驱动电压
4RS(D/I)H/LD/I=“H”,表示DB7∽DB0为显示数据
D/I=“L”,表示DB7∽DB0为显示指令数据
5R/WH/LR/W=“H”,E=“H”数据被读到DB7∽DB0
R/W=“L”,E=“H→L”数据被写到IR或DR
6ENH/LR/W=“L”,E信号下降沿锁存DB7∽DB0
R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0
7DB0H/L数据线
8DB1H/L数据线
9DB2H/L数据线
10DB3H/L数据线
11DB4H/L数据线
12DB5H/L数据线
13DB6H/L数据线
14DB7H/L数据线
15CS1H/LH:
选择芯片(右半屏)信号
16CS2H/LH:
选择芯片(左半屏)信号
17RETH/L复位信号,低电平复位
18VEE-10VLCD驱动负电压
19LED+-LED背光板电源
20LED--LED背光板电源
12864LCD点阵图形液晶模块应用连接电路
液晶驱动设置
在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:
仿真环境下和实物开发板编程。
仿真驱动定义如下:
#defineuint8unsignedchar
#defineuint32unsignedint
#defineLCD_databusP0//LCD8位数据口
sbitDI=P2^2;
//DI为0写指令或读状态;
1数据
sbitRW=P2^1;
//RW为1写;
0读
sbitEN=P2^0;
//使能端
sbitCS1=P2^4;
//片选1低电平有效,控制左半屏
sbitCS2=P2^3;
//片选1低电平有效,控制右半屏
实物开发板驱动接线和定义如下
#defineLCD_PORT_NUM0//LCD端口P0
#defineDATA_PORT_NUM1//数据端口P1
#defineCS1_PIN23//片选1低电平有效,控制左半屏
#defineCS2_PIN24//片选1低电平有效,控制右半屏
#defineRST_PIN21//复位信号低电平有效
#defineRW_PIN20//RW为1写;
#defineDI_PIN19//DI为0写指令或读状态;
#defineEN_PIN22//使能端
ucharDIN[8]={24,23,20,21,28,29,19,22};
//8位数据线的接线方式P2.24,P2.23,…P2.22对于D0,D1,…D7,低位到高位
涉及到的一些控制指令:
0x3E关显示,0x3F开显示;
总共有八页,一页占八行点阵点,页的首地址为0xB8;
行的起始地址为0xC0,有规律的改变起始行号可以实现滚屏的效果;
列的起始地址为0x40一直到0x7F共64列;
读状态指令时,数据位最高位D7为1内部忙,为0空闲;
对应接线为P2.22;
通过GPIO_ReadValue获取P2端口的32位数据P2.0到P2.31,然后进行相应的与或操作进行判断。
仿真环境下的驱动程序编写:
voiddelay(uint8i)//延时函数
{
while(--i);
}
voidRead_busy()//读忙函数——数据位的最高位D7为1则忙
P0=0X00;
DI=0;
RW=1;
EN=1
while(P0&
0x80)
;
EN=0;
voidwrite_LCD_command(uint8value)//写命令函数
Read_busy();
//每次读写都要忙判断
//选择命令
RW=0;
//读操作
LCD_databus=value;
EN=1;
//EN由1—0锁存有效数据
_nop_();
voidwrite_LCD_data(uint8value)//写数据函数
DI=1;
//选择数据
voidSet_page(uint8page)//设置显示起始页
page=0xB8|page;
//页的首地址为0xB8
wite_LCD_command(page);
voidSet_line(uint8startline)//设置显示的起始行
startline=0xC0|startline;
write_LCD_command(startline);
voidSet_column(uint8column)//设置显示的列
column=column&
0x3F;
//列的最大值为64
column=column|0x40;
//列的首地址为0x40
write_LCD_command(column);
voidSetOnOff(uint8onoff)//显示开关函数;
0x3E是关显示,0x3F是开显示
onoff=0x3E|onoff;
write_LCD_command(onoff);
voidSelectScreen(uint8screen)//选择屏幕
switch(screen)
case0:
CS1=0;
CS2=0;
break;
//全屏
case1:
CS2=1;
//左半屏
case2:
CS1=1;
//右半屏
default:
voidClearScreen(uint8screen)//清屏
uint8i,j;
SelectScreen(screen);
for(i=0;
i<
8;
i++)
Set_page(i);
Set_column(0);
for(j=0;
j<
64;
j++)
write_LCD_data(0x00);
//写入0,地址指针自动加1
voidInitLCD()//LCD初始化
SelectScreen(0);
SetOnOff(0);
//关显示
SetOnOff
(1);
//开显示
ClearScreen(0);
Set_line(0);
连接开发板实物的底层应用程序:
voidLCD_Check_Busy(void)
unsignedintvalue=0,rvalue=0;
GPIO_SetDir(DATA_PORT_NUM,0x31F80000L,0);
GPIO_ClearValue(LCD_PORT_NUM,(1<
<
DI_PIN));
GPIO_SetValue(LCD_PORT_NUM,(1<
RW_PIN));
EN_PIN));
while
(1)
{
value=GPIO_ReadValue(DATA_PORT_NUM);
//获取值为32位P2.0到P2.31
/*数据位最高位D7为1内部忙,为0空闲;
对应接线为P2.22*/
rvalue=value&
0x400000;
if(0x0==rvalue)
{
break;
}
GPIO_SetDir(DATA_PORT_NUM,0x31F80000L,1);
data_setpin(0);
}
其他的函数按照上面的进行设置,其中函数GPIO_SetValue将对应的位置1,;
函数GPIO_ClearValue将对应的位置0;
函数GPIO_ReadValue获取对应端口的数据,函数GPIO_SetDir设置相应端口的相应位的方向——输入输出。
字库原理及其制作
在前面我们分析了如何点亮一个或者多个点阵,通过有意识的点亮一些点阵可以在液晶屏上看到数字、字母和汉字的显示。
那么一个字母或者汉字对应着那些位置的点阵呢,是否可以通过计算得到其字模数据?
现在可以在网上下载到各种字模软件,对单个的字符取模,也可以对ASCII码、汉字库取模生成字库bin文件。
在取模之前要对其进行相应的设置,以便能够正确的显示(当取模方式和液晶屏的设置不一样时会显示出乱码)。
需要注意的是横纵向取模的区别,字节正序和字节倒序的差别。
下面介绍字模的数据的获取,字节正序和倒序、横纵向取模的差别。
字模是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'
A'
在字模的记载方式如图1所示:
8×
16的ASCII码点阵,左边的为横行取模,字节正序(即高位在前),右边的为纵向取模,字节倒序(即高位在下)。
图1“A”字模图
而中文的“你”在字模中的记载却如图2所示:
下面的取模方式只介绍了横向取模、字节正序。
如果要对其进行纵向取模、字节倒序,方法类似于“A”字模。
图2“你”字模图
当通过字模软件生成字库bin文件之后如何对其进行应用?
可以通过以下方法:
1.把字库放入SD卡中。
需要带SD卡,需要使用文件系统,软硬件成本较高。
2.把字库放入代码中一起编译,后下载到单片机中。
对单片机的FLASH要求比较大,而且代码编写调式速度比较慢。
3.购买字库IC。
不够灵活。
4.把字库放入FLASHIC中。
这种方法比较灵活
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12864 LCD 液晶显示 原理 使用方法