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

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.lryc.cn/news/2418129.html

相关文章:

  • Linux常用命令及使用方法
  • android移动开发基础案例教程答案,渣本毕业两年经验,文末有彩蛋
  • 图片预览参考网址
  • ​【Socket】Java Socket编程基础及深入讲解​
  • 数字人解决方案——3D数字人从捕捉到建模与合成方法解析
  • 设备管理器里一片空白没有东西解决方法
  • 闪讯无线助手-Android端闪讯破解路由器拨号实现原理
  • fedora18装一些软件及配置
  • 2024亲测可用最新PHP仿猪八戒任务威客网整站源码/在线接任务网站源码
  • 360浏览器插件360抢票王火车票刷票技巧
  • 为什么南派三叔要封笔?
  • 数据库常见面试题(附答案)
  • F3arRa1n发布V4.2.1,完整绕过支持iOS14.5.1修复通知
  • NVIDIA官方中文版GPU编程指南v2.20(转载自GZeasy)
  • 一盒两用!——破解电信IPTV机顶盒为普通安卓机顶盒
  • 佳易王头疗养发护发馆会员管理系统试用版操作教程
  • Web服务器配置——搭建自己的web服务器,要求可以进行局域网内部的DNS地址解析。
  • 哈大客运专线起终点为现大连站五年左右建成通车
  • 使用阿里云轻量级服务器配置socket代理实现局域网远程访问
  • x264源代码简单分析:编码器主干部分-2
  • 生物药剂学与药物动力学习题1-15章
  • PDF转WORD工具破解版
  • TweenMax学习笔记整理
  • 试图共享文件夹时出现错误,没有启动服务器服务,此时尚未创建共享资源,试图共享时出现错误,没有启动服务器服务,此时尚未创建共享资源...
  • ENOENT raw.githubusercontent.com pngquant failed to build
  • MVVM大比拼之avalon.js源码精析
  • 用JSmooth转换可执行jar包为exe文件
  • java示波器程序_Verilog实现示波器
  • jsp代码实例第51课
  • 《唐山大地震》高清下载,迅雷下载,在线观看!