当前位置: 首页 > news >正文

51单片机学习记录-11-LCD1602

1 LCD1602介绍

LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符

显示容量:16×2个字符,每个字符为5*7点阵

2 引脚及应用电路

3 内部结构框图

4 存储器结构

DDRAM(数据显示区)

CGRAM+CGROM(字模库)

5 时序结构

写数据/指令

RS设置数据指令,R/W读写,E使能高电平有效,DB0-DB7代表数据

RS置高电平,R/W置低电平,DB0-DB7一个字节数据放在P0口使数据变化,E置高电平使数据有效,持续一段时间后置低电平

6 LCD1602指令集

7 LCD1602操作流程

(1)初始化:

        发送指令0x38                //八位数据接口,两行显示,5*7点阵

        发送指令0x0C                //显示开,光标关,闪烁关

        发送指令0x06                //数据读写操作后,光标自动加一,画面不动

        发送指令0x01         //清屏

(2)显示字符:

        发送指令0x80|AC        //设置光标位置

        发送数据                //发送要显示的字符数据

        发送数据                //发送要显示的字符数据

程序源码

LCD1602.c
#include <REGX52.H>//引脚定义
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_E=P2^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_RS=0;LCD_RW=0;LCD_DataPort=Command;LCD_E=1;LCD_Delay();LCD_E=0;LCD_Delay();
}/*** @brief  LCD1602写数据* @param  Data 要写入的数据* @retval 无*/
void LCD_WriteData(unsigned char Data)
{LCD_RS=1;LCD_RW=0;LCD_DataPort=Data;LCD_E=1;LCD_Delay();LCD_E=0;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(Line==1){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(i=0;String[i]!='\0';i++){LCD_WriteData(String[i]);}
}/*** @brief  返回值=X的Y次方*/
int LCD_Pow(int X,int Y)
{unsigned char i;int Result=1;for(i=0;i<Y;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(i=Length;i>0;i--){LCD_WriteData('0'+Number/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(Number>=0){LCD_WriteData('+');Number1=Number;}else{LCD_WriteData('-');Number1=-Number;}for(i=Length;i>0;i--){LCD_WriteData('0'+Number1/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(i=Length;i>0;i--){SingleNumber=Number/LCD_Pow(16,i-1)%16;if(SingleNumber<10){LCD_WriteData('0'+SingleNumber);}else{LCD_WriteData('A'+SingleNumber-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(i=Length;i>0;i--){LCD_WriteData('0'+Number/LCD_Pow(2,i-1)%2);}
}

http://www.xdnf.cn/news/801883.html

相关文章:

  • RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
  • 免费mp3音乐文件上传外链空间精选合辑
  • 网页设计成品DW静态网页Html5响应式css3——电影网站bootstrap制作(4页)
  • Windows Hook(1)加载DLL
  • 渗透测试实战之DNS欺骗攻击
  • 十个本年最炫的WebOS(网络操作系统)点评
  • 最新版飞秋下载
  • Android 6.0谷歌卡刷包,卡刷包走起:谷歌Nexus5升级安卓6.0/Android M教程
  • [转]NOKIA5320--偶必装的软件之大结局
  • TLF 中文字幕站
  • docker实践
  • CTF密码学总结(一)
  • 仙侣奇缘3说明
  • 如何在SQLServer中处理每天四亿三千万记录的
  • 私有服务器搭建及配置(下)
  • 锐捷设备密码破解方法
  • 金山篡改浏览器主页问题(改成毒霸网址大全)
  • LOL 战斗力查询
  • 下载并安装PPStream网络电视软件
  • linux mysql命令 bash: mysql: command not found 解决方法
  • xvid 详解 代码分析 编译等
  • 用HTML+CSS做一个漂亮简单的个人音乐网页
  • Android学习之路(17) Android Adapter详解
  • 作为新手小白,你应该了解的五个3DMAX的使用干货小技巧!
  • 主板常见故障维修24例
  • 最全操作系统综合题,腾讯T2大牛亲自教你
  • java编写webservice(使用Springboot框架)
  • 说一说windows7引导故障的解决
  • 【大模型:知识图谱】--3.py2neo连接图数据库neo4j
  • 堆栈平衡的说明