12864LCD液晶显示原理及使用方法

12864LCD液晶显示原理及使用方法
液晶简介
液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件.
点阵图形液晶显示屏是 LCD 的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD 的特点:工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。
12864LCD是一种图形点阵液晶显示器它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。可完成图形显示,也可以显示8×4 (16×16 点阵)汉字或者显示16×4(8×16 点阵)ASCII码。分为两种,带字库的和不带字库的。不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。带字库的LC
D提供字库字模,但是只能显示GB2312的宋体。各有优缺点,根据不同应用场景灵活选择。其液晶模块原理图如下所示。
12864LCD点阵图形液晶模块原理框图
汽车喷水电机下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。
如下表所示:12864LCD 的引脚说明
管脚号管脚名称LEVER 管脚功能描述
1GND        0        电源地
2VCC+5.0V 电源电压
3VLCD      —        液晶显示器驱动电压
4RS (D/I) H/LD/I=“H”,表示DB7∽DB0 为显示数据
D/I=“L”,表示DB7∽DB0 为显示指令数据
5R/W H/L R/W=“H”,E=“H"数据被读到DB7∽DB0
R/W=“L”,E=“H→L”数据被写到IR 或DR
6EN    H/L R/W=“L”,E 信号下降沿锁存DB7∽DB0
R/W=“H”,E=“H”DDRAM 数据读到DB7∽DB0
7DB0 H/L 数据线
8DB1 H/L数据线
9DB2 H/L 数据线
10DB3 H/L 数据线
11DB4 H/L数据线
12DB5 H/L数据线
13DB6 H/L数据线
14DB7 H/L数据线
15CS1 H/L H:选择芯片(右半屏)信号
16CS2 H/L H:选择芯片(左半屏)信号
17RET H/L复位信号,低电平复位
18VEE      —10VLCD 驱动负电压车门限位器
19LED+      -      LED 背光板电源
20LED—      -      LED 背光板电源
12864LCD点阵图形液晶模块应用连接电路
液晶驱动设置
在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:仿真环境下和实物开发板编程。
仿真驱动定义如下:
#define    uint8    unsigned char
#define    uint32  unsigned int
#define    LCD_databus    P0  //LCD8位数据口
sbitDI = P2^2;  //DI为0写指令或读状态;1数据
sbit  RW = P2^1;  //RW为1写;0读
sbit  EN = P2^0;  //使能端
sbit  CS1 = P2^4; //片选1低电平有效,控制左半屏
sbit  CS2 = P2^3; //片选1低电平有效,控制右半屏
实物开发板驱动接线和定义如下
#define    LCD_PORT_NUM    0 //LCD端口P0
#define    DATA_PORT_NUM  1 //数据端口P1
#define    CS1_PIN        23  //片选1低电平有效,控制左半屏
#define    CS2_PIN        24  //片选1低电平有效,控制右半屏
#define    RST_PIN        21  //复位信号低电平有效
#define    RW_PIN        20  //RW为1写;0读
#define    DI_PIN        19  //DI为0写指令或读状态;1数据
#define    EN_PIN        22  //使能端
uchar DIN[8] = {24, 23, 20, 21, 28, 29, 19, 22}; 
//8位数据线的接线方式P2.24, P2.23,…P2。22对于D0,D1,…D7,低位到高位
涉及到的一些控制指令:
0x3E关显示,0x3F开显示;
总共有八页,一页占八行点阵点,页的首地址为0xB8
行的起始地址为0xC0,有规律的改变起始行号可以实现滚屏的效果;
列的起始地址为0x40一直到0x7F64列;
读状态指令时,数据位最高位D71内部忙,为0空闲;对应接线为P2.22;
长链二元酸
通过GPIO_ReadValue获取P2端口的32位数据P2。0P2.31,然后进行相应的与或操作进行判断。
仿真环境下的驱动程序编写:
void delay(uint8 i) //延时函数
{
while(-—i);
}
void Read_busy()  //读忙函数——数据位的最高位D7为1则忙
{
P0 = 0X00;
DI = 0;
RW = 1;
EN = 1
while(P0 & 0x80)
{
;
EN = 0;
void write_LCD_command(uint8 value) //写命令函数
{
Read_busy();  //每次读写都要忙判断
DI = 0;  //选择命令
RW = 0;  //读操作
LCD_databus = value;
EN = 1;  //EN由1—0锁存有效数据
_nop_();
_nop_();
EN = 0; 5460a
}
void write_LCD_data(uint8 value)  //写数据函数
Read_busy();gmr传感器
DI = 1;  //选择数据
RW = 0;
LCD_databus = value;
EN = 1;  //EN由1—0锁存有效数据
_nop_();
_nop_();
EN = 0;
void Set_page(uint8 page)  //设置显示起始页
page = 0xB8 | page;  //页的首地址为0xB8
wite_LCD_command(page);
void Set_line(uint8 startline)  //设置显示的起始行
{
startline = 0xC0 |startline;
write_LCD_command(startline);
}
void Set_column(uint8 column)  //设置显示的列
column = column & 0x3F;  //列的最大值为64
column = column | 0x40;  //列的首地址为0x40
write_LCD_command(column);
}
void SetOnOff(uint8 onoff)  //显示开关函数;0x3E是关显示,0x3F是开显示
{
挂包钩onoff = 0x3E | onoff;
write_LCD_command(onoff);
}
void SelectScreen(uint8 screen)  //选择屏幕
{
switch(screen)
{
    case 0: CS1 = 0; CS2 = 0; break;  //全屏
case 1: CS1 = 0; CS2 = 1; break;  //左半屏
case 2: CS1 = 1; CS2 = 0; break;  //右半屏
default: break;
}
void ClearScreen(uint8 screen)  //清屏
{
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
}
}
void InitLCD()  //LCD初始化
{
Read_busy();
SelectScreen(0);
SetOnOff(0);  //关显示
SelectScreen(0);
SetOnOff(1);  //开显示
SelectScreen(0);
ClearScreen(0);
Set_line(0);
}
连接开发板实物的底层应用程序:
voidLCD_Check_Busy(void)
{
unsignedint value = 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));
GPIO_SetValue(LCD_PORT_NUM, (1 << 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_ClearValue(LCD_PORT_NUM, (1 〈〈 EN_PIN));
GPIO_SetDir(DATA_PORT_NUM, 0x31F80000L, 1);
data_setpin(0);
其他的函数按照上面的进行设置,其中函数GPIO_SetValue将对应的位置1,;函数GPIO_ClearValue将对应的位置0;函数GPIO_ReadValue获取对应端口的数据,函数GPIO_SetDir设置相应端口的相应位的方向--输入输出.

本文发布于:2024-09-21 10:58:10,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/113745.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:液晶   图形   显示   数据   点阵   设置   驱动   管脚
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议