《《单片机原理与应用》ppt课件》由会员分享,可在线阅读,更多相关《《单片机原理与应用》ppt课件(42页珍藏版)》请在金锄头文库上搜索。
1、项目八 字符型液晶显示器电子工程系 刘颖(1)制作一个用LCD显示字符的单片机应用系统;(2)掌握字符型LCD显示接口电路工作原理及其应用; (3)了解点阵型LCD显示接口电路工作原理及其应用 。字符型液晶显示器 液晶显示器以其功耗低、体积小、重量轻、超薄型等诸多其他显示器件所无法比拟的优点,在袖珍式仪表和低功耗系统中,得到越来越广泛的应用。字符型 LCD 的结构和引脚 DDRAM :显示数据 RAM 。它用来寄存待显示的代码。 CGROM :字符发生器ROM。它内部已经存储了 160 个不同的点阵字符图形,字符图形用于字符的显示。 CGRAM :字符发生器 RAM 。它是8个允许用户自定义的
2、字符图形 RAM CGROM 和 CGRAM 中字符代码与字符图形的对应关系 DDRAM 的地址: LCD 控制器的指令系统规定,在送待显示字符代码的指令前,先要送 DDRAM 的地址,实际上是待显示的字符显示位置。若 LCD 为双行字符显示,则每行 40 个显示位置,第一行地址为 00H 27H ;第二行地址为 40H 67H 。 指令寄存器:用来接收 CPU 送来的指令码,也寄存 DDRAM 和 CGRAM 的地址。 数据寄存器:用来寄存 CPU 发来的字符代码数据。 状态标志位: LCD 控制器有一个忙信号标志位 BF 。当 BF =1 时, LCD 正在进行内部操作,此时不接收外部命令
3、。AC :地址计数器。 AC 的内容是 DDRAM 或 CGRAM 的单元地址。当对 DDRAM 或 CGRAM 进行读写操作后, AC 自动加 1 或减 1 。光标闪烁控制:此控制可产生光标或使光标在显示位置处闪烁,显示位置为 AC 中的 DDRAM 地址。 字符型 LCD 显示板有 14 条引脚线。这 14 条线的定义是标准的。其定义如下: Vss ( 1 ) :地。 VDD( 2 ) :电源电压。V 0( 3 ) :对比调整电压。 .RS ( 4 ) :寄存器选择。RS=0时,读状态寄存器或写命令寄存器;RS = 1 时,读写数据。R / W ( 5 ) :读写信号线。 R / W =1
4、 时,读操作; R / W =0 时,写操作。 .E ( 6 ) :显示板控制使能端。 D0 D7 ( 7 14 ) : 8 位双向三态 I / O 线。显示板控制器的指令系统 字符型 LCD 显示板控制器有 11 条指令。它的读写操作,以及屏幕和光标的操作都是通过指令编程来实现的。 指令RSD7D6D5D4D3D2D1D0清显示0000000000光标返回000000001置输入模式00000000I/DS显示开/关控制0000001DCB光标与字符移位000001S/CR/L置功能00001DLNF置字符发生存储器地址0001字符发生存储器地址AGG置数据存储器地址001显示数据存储器地址
5、ADD读忙标志或地址01BF计数器地址AC写数到CGRAM或DDRAM10要写的数从CGRAM或DDRAM读数11读出的数据指令功能如下:指令1 :清显示,光标复位到地址 00H 位置。指令2 :光标复位,光标返回到地址 00H 。指令 3 :读写方式下的光标和显示模式设置命令。 I / D :表示地址计数器的变化方向,即光标移动的方向。 I / D =1 : AC 自动加 1 ,光标右移一字符位; I / D = 0 : AC 自动减 1 ,光标左移一字符位。 S :显示屏上画面向左或向右全部平移一个字符位。S =0 :无效; S = 1 :有效。 S = 1 , I / D = 1 :显示
6、画面左移; S = 1 , I / D =0 :显示画面右移。 指令 4 :显示开关控制,控制显示、光标和光标闪烁的开关。 D :当 D =0时显示关闭, DDRAM 中数据保持不变。 C :当 C = 1 时显示光标。 B :当 B = 1 时光标闪烁。指令 5 :光标或显示移位。 DDRAM 中内容不改变。 S / C =1 时,移动显示; S / C =0时,移动光标。 R / L =1 时,为右移; R / L =0 时,为左移。指令 6 :功能设置命令。 DL =01 时,内部总线为 4 位宽度 DB7 = DB4 ; DL =0时,内部总线为 8 位宽度。 N = 0 时,单行显示
7、; N =1 时,双行显示。 F =0 时,为显示字形 57 点阵; F = 1 时,为显示 字形 510 点阵。指令 7 : CGRAM 地址设置。指令 8 : DDRAM 地址设置。指令 9 :读状态标志和 AC 中地址。指令 10 :写数据。指令 11 :读数据。 LCD 显示板与单片机的接口和编程 任务一字符型LCD显示系统字符显示子程序LCD初始化子程序主程序主程序 写入显示数据到LCD子程序写入指令数据到LCD子程序延时子程序软件设计 1602使能信号E 定义为P2口线的P2.2;1602读/写选择信号R/W定义为P2口线的P2.1,0为写数据信号,1为读数据信号;1602 数据/
8、命令选择信号RS定义为P2口线的P2.0,0为命令信号;1为数据信号;1602的8位双向数据线DB7DB0信号LCDPORT定义为P0口线; 初始化 通过初始化设置堆栈栈底为60H,调用LCD初始化子程序完成对LCD的初始化设置。 字符显示 完成对LCD初始化后,调用LCD字符显示子程序显示第一行字符和第二行字符。(1) 主程序设计 主程序主要完成硬件初始化、子程序调用等功能。初始化堆栈指针调用LCD初始化子程序调用字符显示子程序显示第二行字符调用字符显示子程序显示第一行字符开始主程序流程图#include sbit E=P22;sbit RW=P21;sbit RS=P20;typedef
9、unsigned char uchar;void Delay(unsigned int t)/ delay 40us for(;t!=0;t-) ;main( ) char msg116= AT89S51 DEMO ; char msg216= ; InitLcd( ); /初始化程序 DisplayMsg1(msg1); DisplayMsg2(msg2); while(1); (2) 写入显示数据到LCD子程序模块设计 当LCD1602的寄存器选择信号RSRS为1时,选择数据寄存器; 当LCD1602的读写选择线R/WR/W为0时,进行写操作; 当LCD1602的使能信号E E至高电平后再
10、过两个时钟周期至低电平,产生一个下降沿信号,往LCD写入显示数据。当RS1时,选择数据寄存器读/写标志位R/W0时,进行写操作LCD使能信号E至高电平后再过两个时钟周期至低电平,产生一个下降沿信号,往LCD写入显示数据子程序返回把显示数据送至P0口(LCD数据线DB7DB0)开始voidSendDataByte(unsignedcharch)RS=1;/选中数据寄存器RW=0;/写操作P0=ch;E=1;Delay(1);E=0;Delay(100);/delay40us (3) 写入指令数据到LCD子程序模块设计 当LCD1602的寄存器选择信号RSRS为0时,选择指令寄存器; 当LCD16
11、02的读写选择线R/WR/W为0时,进行写操作; 当LCD1602的使能信号E E至高电平后再过两个时钟周期至低电平,产生一个下降沿信号,往LCD写入指令代码。RS0时,选择指令寄存器读/写标志位R/W0时,进行写操作LCD使能信号E至“1”后再过两个时钟周期至“0”,产生下降沿信号,往LCD写入指令代码,LCD执行命令调用延时子程序DELAY子程序返回把指令数据送至P0口LCD数据线DB7DB0开始void SendCommandByte(unsigned char ch) RS=0; RW=0; P0=ch; E=1; Delay(1); E=0; Delay(100); /delay 4
12、0us (4) 字符显示子程序模块设计 设置LCD的DDRAM地址,调用写入指令到LCD子程序设置DDRAM地址指针;然后设置显示数据个数,设置显示数据索引值,调用写入显示数据到LCD子程序,使数据显示在LCD上;显示数据个数减1,显示数据索引值加1,按照上面的步骤显示下一个数据,直到显示数据个数为0,所有字符均显示在LCD上。字符显示子程序流程图 void DisplayMsg1(uchar *p) unsigned char count; SendCommandByte(0x80); /设置 DDRAM地址 for(count=0;count16;count+) SendDataByte(
13、*p+); void DisplayMsg2(uchar *p) unsigned char count; SendCommandByte(0xc0); /设置 DDRAM地址 for(count=0;count16;count+) SendDataByte(*p+); (5) LCD初始化子程序模块设计 1602字符型LCD的初始化过程为: 延时15ms,写指令38H(不检测忙信号); 延时5ms,写指令38H(不检测忙信号); 延时5ms,写指令38H(不检测忙信号); 以后每次写指令、读/写数据操作均需要检测忙信号; 写指令38H:显示模式设置; 写指令08H:显示关闭; 写指令01H:
14、显示清屏; 写指令06H:显示光标移动设置; 写指令0CH:显示开及光标设置。功能设置命令开始设定工作方式调用写入指令到LCD子程序设置显示状态调用写入指令到LCD子程序调用写入指令到LCD子程序清屏调用写入指令到LCD子程序子程序返回设置输入方式调用写入指令到LCD子程序图6.9LCD初始化子程序流程图void InitLcd( ) /初始化SendCommandByte(0x30); SendCommandByte(0x30); SendCommandByte(0x30); SendCommandByte(0x38);/设置工作方式 SendCommandByte(0x0c);/显示状态设置 SendCommandByte(0x01); /清屏 SendCommandByte(0x06);/输入方式设置