第八章LCD编程

上传人:夏** 文档编号:568417579 上传时间:2024-07-24 格式:PPT 页数:53 大小:13.24MB
返回 下载 相关 举报
第八章LCD编程_第1页
第1页 / 共53页
第八章LCD编程_第2页
第2页 / 共53页
第八章LCD编程_第3页
第3页 / 共53页
第八章LCD编程_第4页
第4页 / 共53页
第八章LCD编程_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《第八章LCD编程》由会员分享,可在线阅读,更多相关《第八章LCD编程(53页珍藏版)》请在金锄头文库上搜索。

1、LCD,LCM 介绍介绍LCM1602LCM1602 编程步骤编程步骤第八章 LCD 编程自定自定义字符字符 及其及其 显示方法示方法()8 8.1 .1 LCDLCD,LCMLCM 介绍介绍1、什么是 LCD、LCM2、LCD模块 分类STM32F10xLCD:Liquid Crystal Display,液晶显示器背光:液晶是一种介于固态与液态之间的物质,本身不能发光,需要借助额外的光源才行。在液晶显示屏背面,需要有背光。LCM:Liquid Crystal Display Module,LCD模块1、什么是 LCD、LCM:STM32F10x2、LCD模块 分类:段码型点阵型段码型显示的

2、产品:例如计算器、电子表字符点阵型图形点阵型字符点阵型的产品:例如LCM1602图形点阵型的产品:例如LCM12864STM32F10x段码液晶叫法起源于早期液晶显示屏开始应用之时,主要是替代LED数码管(由7个笔段组成,仅能显示数字09),产品如计算器、电子表等,显示内容均为数字,也较简单。段码型:STM32F10x 段码式液晶,最普遍的,类似数码管的“8”字段,一个“8”字由7个笔段组成,也就是7个液晶像素。只能这7个笔段显示,或不显示。 STM32F10x “米”字型 段式液晶的“8”字由15个像素组成。 STM32F10x 当然段式液晶的笔段可以做成任意形状,只要驱动芯片的驱动能力许可

3、。比如公司的logo,其它图案,文字等等。段式液晶材料制作,价格低廉。段式液晶的驱动成本也很低廉STM32F10x字符点阵型 和 图形点阵型产品 的区别:(i)字符点阵型 :STM32F10x(ii)图形点阵型 :STM32F10xSTM32F10x字符点阵型 和 图形点阵型产品 的区别:(i)字符点阵型:整个屏虽然是由点阵构成。但整个屏被分成若干个小区域(例如1602:被分成16*2=32个区域),每个小区域显示1个字符,该小区域是由很少的点阵来显示,(例如1602:该小区域是由5*7点阵构成)。所以,通常字符(点阵)型只用来显示数字、字母,不用来显示汉字、图形。但是,若要用字符点阵型,显示

4、汉字、图形也可:处理方法-用2个或更多个小区域来显示汉字、图形。(ii)图形点阵型:它是由许多等间隔的点,围成的一个大的点阵列构成。例如LCM12864是由128*64个点构成。8 8. .2 2 LCM1602LCM1602 1、LCM1602简介2、LCM1602各引脚的定义3、LCM1602 与 单片机 的连接图4、LCM1602控制器 控制时序5、LCM1602控制器 指令和状态字6、LCM1602的4种存储器类型STM32F10xn LCM1602为字符型(点阵式)LCD模块。n字符型液晶显示模块是一种专门用于显示字母、数字、符号等的点阵式液晶显示模块。n但是,通过自定义,也可显示简

5、单的汉字和图形。nLCM1602的每一个显示的字符(或字母、数字等)是由5*7或5*11点阵组成。n每个点阵字符(5*7或5*11点阵)之间有一个间隔,起到字符间距和行间距的作用。1、LCM1602简介STM32F10xSTM32F10x正面反面STM32F10x编编 号号符符 号号引脚说明引脚说明编编 号号符符 号号引脚说明引脚说明1GND电源地9D2双向数据口2Vcc电源正极10D3双向数据口3V0对比度调节接可调电位器。直接接地:对比度最高11D4双向数据口4RS数据/命令选择,0:指令或状态,1:数据12D5双向数据口5R/W读/写选择,1:读,0:写13D6双向数据口6E模块使能端,

6、下降沿触发:写数据或指令1:读14D7双向数据口7D0双向数据口15BLA背光源正极8D1双向数据口16BLK背光源地2、LCM1602各引脚的定义STM32F10x3、LCM1602 与 单片机 的连接图(1)LCM1602 与 MCS51单片机 的连接图(2)LCM1602 与 STM32单片机 的连接图STM32F10xnLCM与STC89C52的连接图,如右图所示:(1)LCM1602 与 MCS51单片机 的连接图lLCM1602有八个数据引脚(D0D7)与STC89C52相连,用于接收指令和数据;lSTC89C52通过LCM1602的RS,RW和E这三个端口控制LCM模块。P22P

7、22STM32F10x(2)LCM1602 与 STM32单片机 的连接图原理图-LCM1602 与 STM32单片机 的连接图.pptSTM32F10x写指令 输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码输出:无读状态 输入:RS=L,RW=H,E=H输出:DB0DB7=状态写数据 输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据输出:无读数据 输入:RS=H,RW=H,E=H输出:DB0DB7=数据(从LCD读数据,一般无必要)状态状态指令指令4 4、LCLCM1602M1602控制器控制控制器控制时序:时序:数据数据数据数据LCM1602的控制器,(控制驱动

8、电路为HD44780/KS0066),其控制时序如下:STM32F10x5 5、LCLCM M16021602控制器指令和状态字控制器指令和状态字工作方式工作方式设置指令:设置指令: DL:设置数据总线宽度,一般设置为 1;DL=1:数据总线宽度为 8 位,即 DB7DB0 有效; DL=0:数据总线宽度为 4 位,即 DB7DB4 有效。N:设置显示字符的行数,1602 LCD一般都设置为 1;N=0:为一行字符; N=1:为两行字符;F:设置显示字符的点阵,一般设置为 0;F=0:为 5X7点阵字符体; F=1:为 5X11 点阵字符体;1这位,很多的数据参考手册都写错了STM32F10x

9、显示状态显示状态设置指令:设置指令:该指令控制着画面、光标和闪烁的开与关。D:画面显示控制位; D=1 为显示开, D=0 为显示关;该指令仅影响显示屏的开关,并不影响显存中的数据。 C:光标显示控制位;C=1 光标显示;C=0 光标不显示。B:光标闪烁闪烁显示控制位;B=1 光标闪烁启动;B=0 光标闪烁关闭;STM32F10x光标光标或或画面画面滚动滚动设置指令:设置指令:S/C (Screen/Cursor):滚动对像的选择 S/C=1 画面滚动 S/C=0 光标滚动R/LR/L(Right/LeftRight/Left):滚动方向的选择 R/L=1 向右滚动 R/L=0 向左滚动 S/

10、C R/L 设定情况 0 0 光标左移 1 格,且 AC 值减 1 0 1 光标右移 1 格,且 AC 值加 1 1 0 显示器上画面(即字符和光标全部)左移一格1 1 显示器上画面(即字符和光标全部)右移一格STM32F10x写或读一个字符后,写或读一个字符后, 光标光标或或画面画面滚动滚动设置指令设置指令:I/DI/D(Increase/DecreaseIncrease/Decrease): I/D=0 I/D=0 当当写或读一个字符后,光标写或读一个字符后,光标左左移移1 1格格,ACAC自动减一;自动减一; I I/ /D=1 D=1 当当写或读一个字符后,光标写或读一个字符后,光标右

11、右移移1 1格格,ACAC自动增一;自动增一; S S(shiftshift):设置):设置写或读一个字符后写或读一个字符后,是否允许,是否允许画面平移画面平移S = 1S = 1:当写或读一个字符后,:当写或读一个字符后,允许允许画面画面平移平移; S = 0S = 0:当写或读一个字符后,:当写或读一个字符后,画面不动画面不动。例如,S=1:当写或读一个字符后,整屏显示(I/D=1)左移或者右移(I/D=0)一格。达到光标不移动而屏幕移动的效果。S=0S=0:当写或读一个字符后,整屏显示不移动。当当I/D=1I/D=1,光标光标右右移移1 1格格,ACAC自动增一自动增一;当当I/D=0I

12、/D=0,光标光标左左移移1 1格格,ACAC自动减一自动减一。STM32F10x清屏清屏指令:指令: 功能: 清除液晶显示器,即将 DDRAM 的内容全部填入空白的 ASCII 码 20H; 光标归位,即将光标撤回液晶显示屏的左上方; 将地址计数器(AC)的值设为 0。 STM32F10x光标归位光标归位指令:指令:功能: 把光标撤回到显示器的左上方; 把地址计数器(AC)的值设置为 0; 保持 DDRAM 的内容不变。 STM32F10xCGRAMCGRAM 地址设置地址设置指令指令:该指令将 6位的 CGRAM 地址写入地址指针计数器 AC 内,随后的数据操作是对 CGRAM的读/写操作

13、。 注:CGRAM 为用户自定义字符的空间,用来保存用户自定义的字符的字模。不同于显存(DDRAM)。 例如,把自定义的字符的字模,写入CGRAM中。STM32F10xDDRAMDDRAM 地址设置地址设置指令:指令: 该指令将 7位的 DDRAM 地址写入地址指针计数器 AC 当中,随后的数据操作是对 DDRAM(显存)的读/写操作例如,把当前所要显示的字符的字符代码(即该字符的ASCII码,即该字符在字符库中的字符库中的地址码地址码)写入DDRAM。注意:该指令不是把欲显示的字符的字模写入DDRAM中。这点不同于CGRAM 地址设置指令。欲显示的字符的字模事先已保存在CGROM中。一旦某字

14、符的ASCII码写入DDRAM,LCM1602控制器 就会自动去CGROM字模存储器中,查找该字符的字模,在LCM1602液晶屏上,显示该字符。 STM32F10x固化在CGROM中的字符,和在CGRAM中自定义的字符,显示方式都是一样:首先,光标定位:用函数函数LCD_SetCursor( )光标定位。其次,显示字符:用函数函数LCD_DISP_CHAR(m)显示字符。该函数的参数:参数:在字符库中,当前所要显示的字符的字符代码(即该字符的ASCII码,即该字符在字符库中的地址码字符库中的地址码)STM32F10x状态查询状态查询字字BFBF(Busy FlagBusy Flag):为状态查

15、询位,代表内部操作是否完成。):为状态查询位,代表内部操作是否完成。1 1: 忙,代表内部操作忙,代表内部操作未未完成。完成。0 0:空闲,代表内部操作:空闲,代表内部操作已已完成。完成。AC6AC60 0:为:为7 7位的位的 AC AC 值,即当前地址指针计数器值,即当前地址指针计数器ACAC的值。的值。 STM32F10x6、LCM1602的4种存储器类型在LCM1602中,包括4种类型的存储器:DDRAM、CGROM、CGRAM、字模存储器。1、DDRAM 显示数据RAM2、CGROM 用于保存已固化好的字模库3、CGRAM 用于保存自定义的字模库4、字模存储器 是由CGROM和CGR

16、AM构成固化了192 个常用字符的字模 STM32F10x3、LCD初始化初始化5、设置光标位置,显示字符设置光标位置,显示字符4、LCD清屏清屏8 8. .3 3 LC LCM1602M1602 编程步骤编程步骤1、加入头文件加入头文件2、使能使能使用到的使用到的外设对应的时钟外设对应的时钟STM32F10x1、加入头文件加入头文件#include stm32f10x_lib.h/若使用RCC_Configuration( ); 使能GPIO外设对应的时钟,还必 须 加 入 以 下 头 文 件 。 /若 使 用 具 体 的 使 能 外 设 命 令 ( 例 如 , RCC_APB2Periph

17、ClockCmd( )等 ),则不需要加入以下命令。#include HelloRobot.hSTM32F10x#include “LCD.h/该头文件的作用:对main()函数中使用的函数,进行声明。声明,本文件要用到的,其它文件中的函数。(省略了extern)实际可以直接在main函数之前,声明这些函数,以代替本头文件。声明声明调用调用/以上这些函数在LCD.C中定义STM32F10x2、使能使能使用到的使用到的外设对应的外设对应的时钟时钟 RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE

18、);在LCD_Init( )函数中,只定义了外设的结构体变量,没有对外设的时钟使能,必须在这里,补加 对外设的时钟使能。void LCD_Init(void)GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStr

19、ucture); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); for(i=

20、0;i100000;i+); LCD_SET_IRS(); /选择输出:命令 给LCD LCD_WRITE(); /使74HC595的OE脚,为0:74595并行输出数据;同时LCM1602写控制端:0, 写LCM1602有效 for(i=0;i100;i+); LCD_INPUT(0x38);/设置显示模式:8位数据宽度,2行显示,5*7点阵 LCD_INPUT(0x0E); /开显示,显示光标 LCD_INPUT(0x06); /光标移动的设置:在写入或读出一个字符后,光标加1右移,并且地址指针加1定义结构体变量对GPIO参数,进行设置写写LCM1602LCM1602控制器指令,控制器指令

21、,设置其工作方式设置其工作方式STM32F10x3、LCD初始化初始化:使用函数LCD_Init( )设置与LCD相连的 STM32管脚初始化LCD模块初始化过程包括以下初始化过程包括以下2 2方面:方面:void LCD_Init(void) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO

22、_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; G

23、PIO_Init(GPIOA, &GPIO_InitStructure); for(i=0;i100000;i+); LCD_SET_IRS(); /选择输出:命令 给LCD LCD_WRITE(); /使74HC595的OE脚,为0:74595并行输出数据;同时LCM1602写控制端:0, 写LCM1602有效 for(i=0;i100;i+); LCD_INPUT(0x38);/设置显示模式:8位数据宽度,2行显示,5*7点阵 LCD_INPUT(0x0E); /开显示,显示光标 LCD_INPUT(0x06); /光标移动的设置:在写入或读出一个字符后,光标加1右移,并且地址指针加1设置

24、与LCD相连的 STM32管脚初始化LCD模块STM32F10x!详细注释:!详细注释:LCD_Init( )LCD_Init( )函数函数.doc.docSTM32F10x4、LCD清屏清屏【法一】使用函数 LCD_Clr( )【法二】使用函数 LCD_CMD(0x01)STM32F10xvoid LCD_Clr(void) unsigned char i; LCD_SetCursor(0x00); for(i=0;iLCD_MAX_Col;i+) LCD_DISP_CHAR( ); LCD_SetCursor(0x40); for(i=0;iLCD_MAX_Col;i+) LCD_DISP

25、_CHAR( );【法一】使用函数 LCD_Clr( )STM32F10x【法二】使用函数 LCD_CMD(0x01)void LCD_CMD(unsigned char ch) int i; LCD_SET_IRS(); for(i=0;i100;i+);/延时 LCD_INPUT(ch);在长沙太阳人电子有限公司的“1602液晶说明.pdf” P3设置数据总线上,传送的是指令设置数据总线上,传送的是指令STM32F10xLCD_SET_IRS();设置数据总线上,传送的是指令设置数据总线上,传送的是指令LCD_SET_DRS();设置数据总线上,传送的是数据设置数据总线上,传送的是数据ST

26、M32F10x(1)设置光标位置设置光标位置:使用函数:使用函数LCD_SetCursor( )5、设置光标位置,显示字符设置光标位置,显示字符 1602LC1602LCM M:可显示:可显示2 2行,每行行,每行1616个字符。个字符。第第1 1行行1616个字符的地址个字符的地址每个字符对应的地址:每个字符对应的地址:第第2 2行行1616个字符的地址个字符的地址例1,把光标定位在第1行第1个字符的位置:LCD_SetCursor(0x00);例2,把光标定位在第2行第1个字符的位置:LCD_SetCursor(0x40);STM32F10x函数函数LCD_SetCursor( ) : 既

27、实现了光标定位,又实现了DDRAM的地址设定。STM32F10x(2)显示字符显示字符:使用函数:使用函数LCD_DISP_CHAR( ) 该函数的该函数的参数:参数:单个单个字符常量字符常量(即用(即用单引号单引号括起的括起的一个字符)一个字符)或或 单个单个字符的字符的ASCIIASCII码码例如, LCD_SetCursor(0x40); LCD_DISP_CHAR(2);/在LCD1602第2行,显示2 LCD_DISP_CHAR(0x32);/在LCD1602第2行,显示2 LCD,LCM 介绍介绍LCM1602LCM1602 编程步骤编程步骤第八章 LCD 编程自定自定义字符字符 及其及其 显示方法示方法()

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号