《液晶显示设计与实现.ppt》由会员分享,可在线阅读,更多相关《液晶显示设计与实现.ppt(53页珍藏版)》请在三一办公上搜索。
1、项目九液晶显示设计与实现,教学目的,了解RT12864液晶屏结构掌握RT12864液晶屏工作原理掌握RT12864液晶屏与单片机的接口方法会利用I/O口进行液晶显示电路设计进一步掌握液晶显示程序的设计方法,9.1 RT12864阵列液晶显示模块,9.1.1 认识RT12864液晶屏,LCD液晶显示的优点。现在液晶显示广泛应用的领域。RT12864是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件。,1602,12864,RT12864功能,RT12864 系列是一种图形点阵型液晶显示模块。主要由行驱动器与列驱动器组成,可显示128(列)64(行)点阵。可完成图
2、形显示,也可显示32个(16*16点阵)汉字七条控制指令,与CPU接口采用8位数据总线并口输入输出方式。,LCD引脚,RT12864液晶显示模块有20条引脚,VSS:电源负端(0V)VDD:电源正端(+5.0V)V0:LCD驱动电压(外接可调电阻,可调节对比度)VOUT:LCD 驱动负电压输出端LEDA:背光电源正端(+5.0V)LEDB:背光电源负端(0V),LCD引脚,RT12864液晶显示模块有20条引脚,RS:数据指令选择:(1)RS=1:选择数据,指向数据寄存器;(2)RS=0:选择指令,指向地址计数器、指向指令寄存器。R/W:(1)R/W=1:当前是读操作;(2)R/W=0:当前是
3、写操作E:(1)E为高电平时进行读操作;(2)R/WL:E为下降沿时进行写操作。,LCD引脚,RT12864液晶显示模块有20条引脚,CS1:片选信号,左半屏64 列选中(高电平有效)。CS2:片选信号,右半屏64 列选中(高电平有效)。RST:复位控制信号(低电平有效),LCD引脚,RT12864液晶显示模块有20条引脚,DB0DB7:数据总线,引脚功能,9.1.2 RT12864内部结构,IC2控制模块的右半屏,IC1控制模块的左半屏。IC1和IC2为列驱动器;IC3为行驱动器。了解行、列驱动器所包含的主要功能器件,对模块编程非常有利。,显示坐标关系,指令寄存器(IR):当D/I(RS)=
4、0时,在E信号下降沿的作用下,指令码写入IR。数据寄存器(DR):当D/I(RS)=1时,在E信号下降沿作用下,图形显示数据写入DR;在E信号高电平作用下由DR读到DB7DB0数据总线。忙标志BF:BF=1时,此时模块不接受外部指和数据;BF=0时,模块为准备状态,随时可接受外部指令和数据;利用STATUS READ指令,可以将BF读到DB7总线,从而检验模块之工作状态。,主要功能器件,主要功能器件,显示控制触发器DFF:此触发器是用于模块屏幕显示开和关的控制DFF=1为开显示DFF=0为关显示XY地址计数器:XY地址计数器是一个9位计数器高3位是X地址计数器,X地址计数器是没有记数功能的低6
5、位为Y地址计数器,Y地址计数器具有循环计数功能显示数据RAM(DDRAM):DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。,9.1.3 控制指令及相应代码,显示开关控制(DISPLAY ON/OFF)设置显示起始行(DISPLAY START LINE)设置页地址(SET PAGE“X ADDRESS”)设置Y地址(SET Y ADDRESS)读状态(STATUS READ)写显示数据(WRITE DISPLAY DATE)向LCD发送命令,1.显示开关控制,显示开关控制命令字格式如下:D=1:开显示(DISPLAY ON),即显示器可以进行各种显示操作;D=0
6、:关显示(DISPLAY OFF),即不能对显示器进行各种显示操作。,显示开关控制相应代码 void Set_OnOff(uchar onoff)onoff=0 x3e|onoff;/0011 111x Writ_Comd(onoff);,2.设置显示起始行,设置显示起始行命令字格式如下:指定显示屏从DDRAM中哪一行开始显示数据,起始行的地址可以是063的任意一行。,设置显示起始行相应代码 void Set_StartLine(uchar startline)/063 startline=startline,3.设置页地址,设置页地址命令字格式如下:所谓页地址就是DDRAM的行地址,8行为一
7、页,模块共64行(即8页)页地址由本指令或RST信号改变复位后页地址为0,设置页地址相应代码 void Set_Line(uchar line)line=line,4.设置Y地址,设置Y地址命令字格式如下:此指令的作用是将Y地址送入Y地址计数器,作为DDRAM的Y地址指针。在对DDRAM进行读写操作后,Y地址指针自动加1,指向下一个DDRAM单元。,设置Y地址相应代码 void Set_Column(uchar column)column=column,5.读状态,读状态命令字格式如下:当R/W=1和RS=0时,在E信号为“H”的作用下,状态分别输出到数据总线(DB7DB0)的相应位。各位状态
8、如下:BUSY:1为忙;0为空闲。RST:1为复位;0为正常。ON/OFF:1为显示开;0为显示关。,5.读状态相应代码,读状态相应代码void Check_Busy(void)uchar dat;RS=0;RW=1;Do DataPort=0 x00;EN=1;/在E为高电平时读操作有效 dat=DataPort;/读LCD状态 EN=0;dat=0 x80/直到不忙结束循环,6.写显示数据,写入要显示的内容,写显示数据命令字格式如下:此指令是把要显示的数据写入相应的DDRAM单元,Y地址指针自动加1。,写显示数据相应代码void Write_Dat(uchar dat)Check_Busy
9、();/要确认其在不忙时才可写数据 RW=0;RS=1;DataPort=dat;EN=1;EN=0;/写数据,7.向LCD发送命令,写命令字格式如下:,向LCD发送命令相应代码void Writ_Comd(uchar command)Check_Busy();/要确认其在不忙时才可写命令 RW=0;RS=0;DataPort=command;EN=1;EN=0;/写命令,9.2 RT12864液晶显示模块程序设计,液晶显示程序设计,LCD接口定义定义字符显示数据结构LCD驱动函数选择屏幕函数Select_Screen(uchar screen)清屏函数LCD_Clr(uchar sreen)
10、初始化函数LCD_Init(void)显示汉字字符函数 Display(uchar screen,uchar page,uchar column,uchar number)显示数字和字母字符函数 Displayen(uchar screen,uchar page,uchar column,uchar number),LCD接口定义,#define DataPort P0/LCD数据线D0-D7 sbit RS=P20;/数据指令 选择 RS sbit RW=P21;/读写 选择 sbit EN=P22;/读写使能 sbit cs1=P23;/片选1 sbit cs2=P24;/片选2 sbit
11、 RST=P25;,定义字符显示数据结构,显示汉字字符数组uchar code Hzk=/*-文字:电-*/*-宋体12;此字体下对应的点阵为:宽x高=16x16-*/0 x00,0 x00,0 xF8,0 x48,0 x48,0 x48,0 x48,0 xFF,0 x48,0 x48,0 x48,0 x48,0 xF8,0 x00,0 x00,0 x00,0 x00,0 x00,0 x0F,0 x04,0 x04,0 x04,0 x04,0 x3F,0 x44,0 x44,0 x44,0 x44,0 x4F,0 x40,0 x70,0 x00;,0 x00,0 x00,0 xF8,0 x48
12、,0 x48,0 x48,0 x48,0 xFF,0 x48,0 x48,0 x48,0 x48,0 xF8,0 x00,0 x00,0 x00,上半屏,定义字符显示数据结构,显示字母和数字字符数组uchar code Ezk=/*-文字:Q-*/*-宋体12;此字体下对应的点阵为:宽x高=8x16-*/0 xE0,0 x10,0 x08,0 x08,0 x08,0 x10,0 xE0,0 x00,0 x0F,0 x18,0 x24,0 x24,0 x38,0 x50,0 x4F,0 x00;,字模提取工具,输入字符如:大家好,字模提取工具,输入完成后按Ctrl+Enter,字模提取工具,选择
13、取模方式,字模提取工具,选择C51格式,字模提取工具,生成字模,LCD驱动函数,选择屏幕函数Select_Screen(uchar screen)void Select_Screen(uchar screen)switch(screen)case 0:cs1=1;cs2=1;break;case 1:cs1=1;cs2=0;break;case 2:cs1=0;cs2=1;break;,LCD驱动函数,清屏函数LCD_Clr(uchar sreen)void LCD_Clr(uchar screen)unsigned char i,j;Select_Screen(screen);for(i=0
14、;i8;i+)Set_Line(i);for(j=0;j128;j+)Write_Dat(0 x00);,LCD驱动函数,初始化函数LCD_Init(void)void LCD_Init(void)uchar i=250;/延时while(i-);Select_Screen(0);Set_OnOff(0);/关显示LCD_Clr(0);/清屏Select_Screen(0);Set_OnOff(1);/开显示Select_Screen(0);Set_StartLine(0);/开始行:0,LCD驱动函数,显示汉字字符函数void Display(uchar screen,uchar page,
15、uchar column,uchar number)int i;/screen选屏参数,pagr选页参数,column选列参数,number选第几汉字输Select_Screen(screen);column=column/i+32*number+16汉字的后16个数据输出,LCD驱动函数,显示字母和数字字符函数void Displayen(uchar screen,uchar page,uchar column,uchar number)int i;/screen选屏参数,pagr选页参数,column选列参数,number选第几汉字输Select_Screen(screen);column
16、=column/i+16*number+8字符的后8个数据输出,9.3 RT12864液晶显示字符,RT12864液晶显示字符,工作任务:利用RT12864液晶显示专业,姓名,学号;格式:专业:XXXXX姓名:XXX学号:XXXXXXXXXX,RT12864液晶电路设计,RT12864液晶程序设计,#include#include#define uint unsigned int#define uchar unsigned char#define DataPort P0/LCD12864数据线sbit BF=P07;sbit RS=P22;/数据指令 选择sbit RW=P21;/读写 选择s
17、bit EN=P20;/读写使能sbit cs1=P23;/片选1sbit cs2=P24;/片选2uchar code Hzk=;uchar code Ezk=;,RT12864液晶程序设计,/*状态检查,LCD是否忙*/void Check_Busy(void)uchar dat;RS=0;RW=1;do DataPort=0 x00;EN=1;/在E为高电平时读操作有效 dat=DataPort;/读LCD状态 EN=0;dat=0 x80/直到不忙结束循环,RT12864液晶程序设计,/*写命令到LCD中*/void Writ_Comd(uchar command)Check_Busy
18、();/要确认其在不忙时才可写命令 RW=0;RS=0;DataPort=command;EN=1;EN=0;/写命令/*开关显示,0 x3f是开显示,0 x3e是关显示*/void Set_OnOff(uchar onoff)onoff=0 x3e|onoff;/0011 111x Writ_Comd(onoff);,RT12864液晶程序设计,/*设定显示开始行,0 xc0是行的首地址*/void Set_StartLine(uchar startline)/063 startline=startline,RT12864液晶程序设计,/*设定列地址-Y 0-63,0 x40是列的首地址*/
19、void Set_Column(uchar column)column=column/写数据,RT12864液晶程序设计,/*选择屏幕screen:0-全屏,1-左屏,2-右屏*/void Select_Screen(uchar screen)switch(screen)case 0:cs1=1;cs2=1;break;case 1:cs1=1;cs2=0;break;case 2:cs1=0;cs2=1;break;,RT12864液晶程序设计,/*清屏screen:0-全屏,1-左屏,2-右*/void LCD_Clr(uchar screen)unsigned char i,j;Sele
20、ct_Screen(screen);for(i=0;i8;i+)Set_Line(i);for(j=0;j128;j+)Write_Dat(0 x00);,RT12864液晶程序设计,/*初始化LCD*/void LCD_Init(void)uchar i=250;/延时while(i-);Select_Screen(0);Set_OnOff(0);/关显示LCD_Clr(0);/清屏Select_Screen(0);Set_OnOff(1);/开显示Select_Screen(0);Set_StartLine(0);/开始行:0,RT12864液晶程序设计,/*显示全角汉字*/void Di
21、splay(uchar screen,uchar page,uchar column,uchar number)int i;Select_Screen(screen);column=column,RT12864液晶程序设计,/*显示半角汉字和数字和字母*/void Displayen(uchar screen,uchar page,uchar column,uchar number)int i;Select_Screen(screen);column=column,RT12864液晶程序设计,/*主函数*/void main()uint i;LCD_Init();/初始12864 LCD_Clr(0);/清屏 Set_StartLine(0);/显示开始行 while(1)for(i=0;i4;i+)Display(2,0,i*16,i);_nop_();Display(1,0,i*16,i+4);_nop_();,RT12864液晶程序设计,for(i=0;i3;i+)Display(2,0+2,i*16,i+8);_nop_();for(i=0;i8;i+)Displayen(2,0+2+2,i*8,i);_nop_();for(i=0;i2;i+)Displayen(1,0+2+2,i*8,i+8);_nop_();,