jsp做网站de后台管理,阿里巴巴网站建设教程视频,wordpress preview,快站淘客目录 一、LCD1602简介1.1 显示原理1.2 引脚及应用电路1.3 技术参数1.4 引脚功能1.5 指令集1.6 连接方式 二、时序图2.1 写时序2.2 读时序 三、代码演示3.1 LCD1602.c3.2 示例 注意#xff1a;一定要看 一、LCD1602简介
LCD1602#xff08;Liquid Crystal Display#xff09… 目录 一、LCD1602简介1.1 显示原理1.2 引脚及应用电路1.3 技术参数1.4 引脚功能1.5 指令集1.6 连接方式 二、时序图2.1 写时序2.2 读时序 三、代码演示3.1 LCD1602.c3.2 示例 注意一定要看 一、LCD1602简介
LCD1602Liquid Crystal Display液晶显示屏是一种字符型液晶显示模块可以显示ASCII码的标准字符和其它的一些内置特殊字符还可以有8个自定义字符 显示容量16×2个字符每个字符为5*7点阵
1.1 显示原理
点阵图形式液晶由M×N个显示单元组成假设LCD显示屏有64行每行有128列每8列对应1字节的8位即每行由16字节共16×8128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应每一字节的内容与显示屏上相应位置的亮暗对应。例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定当000HFFH时屏幕左上角显示一条短亮线长度为8个点当3FFHFFH时屏幕右下角显示一条短亮线当000HFFH001H00H002H00H…00EH00H00FH00H时在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。
字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD常用16×116×220×2和40×2等的模块。一般的LCD1602字符型液晶显示器的内部控制器大部分为HD44780能够显示英文字母、阿拉伯数字、日文片假名和一般性符号。
1.2 引脚及应用电路 1.3 技术参数
1显示容量16×2个字符。 2芯片工作电压4.5~5.5V。 3工作电流2.0mA5.0V。 4模块最佳的工作电压5.0V。 5字符尺寸2.95mm×4.35mm宽×高。
1.4 引脚功能
LCD1602采用标准的14脚无背光或16脚带背光接口各引脚接口说明见下表 各引脚的功能介绍如下 ·引脚1VSS为地电源。 ·引脚2VDD接5V正电源。 ·引脚3VL为液晶显示器对比度调整端接正电源时对比度最弱接地时对比度最高对比度过高时会产生“鬼影”现象使用时可以通过一个10kQ的电位器调整其对比度。 ·引脚4RS为寄存器选择脚高电平时选择数据寄存器、低电平时选择指令寄存器。 ·引脚5R/W为读/写信号线高电平时进行读操作低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址当RS为低电平R/W为高电平时可以读忙信号当RS为高电平R/W为低电平时可以写入数据。 ·引脚6E端为使能端当E端由高电平跳变为低电平时液晶模块执行命令。 ·引脚7~ 14D0~D7为8位双向数据线。 ·引脚15背光源正极。 ·引脚16背光源负极。
1.5 指令集
LCD1602液晶模块内部的控制器共有11条控制指令 LCD1602液晶模块的读/写操作、显示屏和光标的操作都是通过指令编程来实现的其中1为高电平0为低电平分别介绍如下 1指令1清屏。指令码01H光标复位到地址00H。 2指令2光标复位。光标复位到地址00H。 3指令3输入方式设置。其中I/D表示光标的移动方向高电平右移低电平左移S表示显示屏上所有文字是否左移或右移高电平表示有效低电平表示无效。 4指令4显示开关控制。其中D用于控制整体显示的开与关高电平表示开显示低电平表示关显示C用于控制光标的开与关高电平表示有光标低电平表示无光标B用于控制光标是否闪烁高电平闪烁低电平不闪烁。 5指令5光标或字符移位控制。其中S/C表示在高电平时移动显示的文字低电平时移动光标。 6指令6功能设置命令。其中DL表示在高电平时为8位总线低电平时为4位总线N表示在低电平时为单行显示高电平时双行显示F表示在低电平时显示5×7的点阵字符高电平时显示5×10的点阵字符。 7指令7字符发生器RAM地址设置。 8指令8DDRAM地址设置。 9指令9读忙信号和光标地址。其中BF为忙标志位高电平表示忙此时模块不能接收命令或数据如果为低电平则表示不忙。 10指令10写数据。 11指令11读数据。
1.6 连接方式
LCD1602与单片机的连接有两种方式一种是直接控制方式另一种是所谓的间接控制方式。它们的区别只是所用的数据线的数量不同其他都一样。
1.直接控制方式 LCD1602的8根数据线和3根控制线ERS和R/W与单片机相连后即可正常工作。一般应用中只须往LCD1602中写入命令和数据因此可将LCD1602的R/W读/写选择控制端直接接地这样可节省1根数据线。VO引脚是液晶对比度调试端通常连接一个10kΩ的电位器即可实现对比度的调整也可采用将一个适当大小的电阻从该引脚接地的方法进行调整不过电阻的大小应通过调试决定。
2.间接控制方式 间接控制方式也称为四线制工作方式是利用HD44780所具有的4位数据总线的功能将电路接口简化的一种方式。为了减少接线数量只采用引脚DB4~DB7与单片机进行通信先传数据或命令的高4位再传低4位。采用四线并口通信可以减少对微控制器I/O的需求当设计产品过程中单片机的I/O资源紧张时可以考虑使用此方法。
二、时序图
2.1 写时序 2.2 读时序 三、代码演示
3.1 LCD1602.c
#include REGX52.H//引脚定义
sbit LCD_RSP2^6;
sbit LCD_RWP2^5;
sbit LCD_EP2^7;
#define LCD_DataPort P0/*** brief LCD1602延时函数12MHz调用可延时1ms* param 无* retval 无*/
void LCD_Delay() //12.000MHz 1ms
{unsigned char i, j;i 2;j 239;do{while (--j);} while (--i);
}/*** brief LCD1602写命令* param Command 要写入的命令* retval 无*/
void LCD_WriteCommand(unsigned char Command)
{LCD_RS0;LCD_RW0;LCD_DataPortCommand;LCD_E1;LCD_Delay();LCD_E0;LCD_Delay();
}/*** brief LCD1602写数据* param Data 要写入的数据* retval 无*/
void LCD_WriteData(unsigned char Data)
{LCD_RS1;LCD_RW0;LCD_DataPortData;LCD_E1;LCD_Delay();LCD_E0;LCD_Delay();
}/*** brief LCD1602初始化函数* param 无* retval 无*/
void LCD_Init(void)
{LCD_WriteCommand(0x38);LCD_WriteCommand(0x0C);LCD_WriteCommand(0x06);LCD_WriteCommand(0x01);
}/*** brief LCD1602设置光标位置* param Line 行位置范围1~2* param Column 列位置范围1~16* retval 无*/
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{if(Line1){LCD_WriteCommand(0x80|(Column-1));}else{LCD_WriteCommand(0x80|(Column-1)0x40);}
}/*** brief 在LCD1602指定位置上显示一个字符* param Line 行位置范围1~2* param Column 列位置范围1~16* param Char 要显示的字符* retval 无*/
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)
{LCD_SetCursor(Line,Column);LCD_WriteData(Char);
}/*** brief 在LCD1602指定位置开始显示所给字符串* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param String 要显示的字符串* retval 无*/
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char *String)
{unsigned char i;LCD_SetCursor(Line,Column);for(i0;String[i]!\0;i){LCD_WriteData(String[i]);}
}/*** brief 返回值X的Y次方*/
int LCD_Pow(int X,int Y)
{unsigned char i;int Result1;for(i0;iY;i){Result*X;}return Result;
}/*** brief 在LCD1602指定位置开始显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~65535* param Length 要显示数字的长度范围1~5* retval 无*/
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(iLength;i0;i--){LCD_WriteData(0Number/LCD_Pow(10,i-1)%10);}
}/*** brief 在LCD1602指定位置开始以有符号十进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围-32768~32767* param Length 要显示数字的长度范围1~5* retval 无*/
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
{unsigned char i;unsigned int Number1;LCD_SetCursor(Line,Column);if(Number0){LCD_WriteData();Number1Number;}else{LCD_WriteData(-);Number1-Number;}for(iLength;i0;i--){LCD_WriteData(0Number1/LCD_Pow(10,i-1)%10);}
}/*** brief 在LCD1602指定位置开始以十六进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~0xFFFF* param Length 要显示数字的长度范围1~4* retval 无*/
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;unsigned char SingleNumber;LCD_SetCursor(Line,Column);for(iLength;i0;i--){SingleNumberNumber/LCD_Pow(16,i-1)%16;if(SingleNumber10){LCD_WriteData(0SingleNumber);}else{LCD_WriteData(ASingleNumber-10);}}
}/*** brief 在LCD1602指定位置开始以二进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~1111 1111 1111 1111* param Length 要显示数字的长度范围1~16* retval 无*/
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(iLength;i0;i--){LCD_WriteData(0Number/LCD_Pow(2,i-1)%2);}
}
3.2 示例
#include REGX52.H
#include LCD1602.h
#include Delay.hvoid main()
{LCD_Init(); //LCD初始化LCD_ShowChar(1,1,A); //在1行1列显示字符ALCD_ShowString(1,3,Hello); //在1行3列显示字符串HelloLCD_ShowNum(1,9,66,2); //在1行9列显示数字66长度为2LCD_ShowSignedNum(1,12,-88,2); //在1行12列显示有符号数字-88长度为2LCD_ShowHexNum(2,1,0xA5,2); //在2行1列显示十六进制数字0xA5长度为2LCD_ShowBinNum(2,4,0xA5,8); //在2行4列显示二进制数字0xA5长度为8LCD_ShowChar(2,13,0xDF); //在2行13列显示编码为0xDF的字符LCD_ShowChar(2,14,C); //在2行14列显示字符Cwhile(1){}
}注意一定要看
千万不要直接复制代码因为是模块化编写模块的代码没有往上复制模块的代码在以往的文章中可以找到大家一定要自己动手跟着视频学