51单片机——LCD1602模块

这篇具有很好参考价值的文章主要介绍了51单片机——LCD1602模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

51单片机lcd1602,51单片机,嵌入式硬件,单片机

一.LCD1602介绍

1.LCD1602 (Liquid Crystal Display

)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符。
2.显示容量:16x2个字符,每个字符为5*7点阵。

二.LCD1602接口介绍

引脚 功能
VSS 接地
VDD 电源正极(4.5v-5.5v)
VO 对比调节电压
RS 数据/指令选择,1为数据,0为指令
RW 读/写选择,1为读,0为写
E 使能,1为数据有效,下降沿执行命令(使能:相当于遥控器的电源键)
D0-D7 数据输入/输出
A 背灯电源正极
K 背灯电源负极

注:当RS=1时,D0-D7为数据,当RS=0时,D0-D7为指令。

三.LCD1602原理图

51单片机lcd1602,51单片机,嵌入式硬件,单片机

51单片机lcd1602,51单片机,嵌入式硬件,单片机

四.LCD1602内部结构图 

51单片机lcd1602,51单片机,嵌入式硬件,单片机

 DDRAM:在哪个方格子显示数据(RS=0——指令)。

CGRAM(可写)+CGROM(不可写):在方格子显示什么数据(RS=1——数据)。

AC(光标位置):控制当前要写在屏幕对应的那个格子。

DDRAM确定显示位置然后字模库显示想要数据,最后输出在屏幕上。

51单片机lcd1602,51单片机,嵌入式硬件,单片机

五.时序结构

51单片机lcd1602,51单片机,嵌入式硬件,单片机

 RS,RW和D7-D0上面介绍过了,这里介绍E,E下面有一行字母valid Data(有效数据),则E为高电平的时候数据有效,之后在设置为低电平,以便下一次数据设置,因此代码为:

E=1;

Delay1ms();

E=0;

Delay1ms();

所以想写数据跟指令的代码为:

#include <REGX52.H>
#include <INTRINS.H>


sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCE_Dataport P0

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}


void LCD_WriteCommand(unsigned char Command)//写指令
{
	LCD_RS=0;
	LCD_RW=0;
	LCE_Dataport=Command;
	LCD_EN=1;
	Delay1ms();
	LCD_EN=0;
	Delay1ms();
}

void LCD_WriteData(unsigned char Data)//写数据
{
	LCD_RS=1;
	LCD_RW=0;
	LCE_Dataport=Data;
	LCD_EN=1;
	Delay1ms();
	LCD_EN=0;
	Delay1ms();
}

六.LCD1602初始化

51单片机lcd1602,51单片机,嵌入式硬件,单片机

51单片机lcd1602,51单片机,嵌入式硬件,单片机

初始化就是设置LCD1602一开始显示的功能,一般设置为:

void LCD_WriteCommand(unsigned char Command)//写指令
{
	LCD_RS=0;
	LCD_RW=0;
	LCE_Dataport=Command;
	LCD_EN=1;
	Delay1ms();
	LCD_EN=0;
	Delay1ms();
}

void LCD_Init(void)//初始化
{
	LCD_WriteCommand(0x38);
	LCD_WriteCommand(0x0C);
	LCD_WriteCommand(0x06);
	LCD_WriteCommand(0x01);
}

七.如何表示显示位置? 

51单片机lcd1602,51单片机,嵌入式硬件,单片机

如果想显示在第一行第二列的话则表示十六进制的0x01,但是显示在那里时,要求最高位D7为高电平,因此从0000 0001变成1000 0001,因此每次高位为0x80,所以就是0x80+0x01=0x81,在代码里面第一行第二行可以直接表示1或2,但是列却要减1以后在化成十六进制,所以第一行第n列则为(0x80 |( lie-1)) ,第二行第n列则表示(0x80 |(lie-1)+0x40),第二行加上0x40是因为第二行开始就是40H,而不是00H,下面代码展示。

#include <REGX52.H>
#include <INTRINS.H>

sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCE_Dataport P0

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}

void LCD_WriteCommand(unsigned char Command)//写指令
{
	LCD_RS=0;
	LCD_RW=0;
	LCE_Dataport=Command;
	LCD_EN=1;
	Delay1ms();
	LCD_EN=0;
	Delay1ms();
}

void LCD_Setcursor(unsigned char line,unsigned char column)//行,列
{
	if(line==1)//设置光标位置
	{
		//第一列是数字1,但是位置是0x00,要把数字1转换0x00,就把数字1-1就0,所以转十六进制就是0x00
		LCD_WriteCommand(0x80|(column-1));
	}
	else
	{
		//第二行的第一列是从0x40开始,第二列是0x41,相当于0x40+0x01,0x01就是与上面一致
		LCD_WriteCommand(0x80|(column-1)+0x40);
	}
}

八.如何表示显示的数据?

51单片机lcd1602,51单片机,嵌入式硬件,单片机

 51单片机lcd1602,51单片机,嵌入式硬件,单片机

如果想显示字符A,则为0100 0001,化为十六进制就是0x41,在对照ASCLL码中的A刚刚好是0x41,因此想写数据直接'A',就可以了。 

九.LCD1602总代码

下图对应最下面代码的LCD—Shownum

51单片机lcd1602,51单片机,嵌入式硬件,单片机文章来源地址https://www.toymoban.com/news/detail-734355.html

#include <REGX52.H>
#include <INTRINS.H>

sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCE_Dataport P0

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}


void LCD_WriteCommand(unsigned char Command)//写指令
{
	LCD_RS=0;
	LCD_RW=0;
	LCE_Dataport=Command;
	LCD_EN=1;
	Delay1ms();
	LCD_EN=0;
	Delay1ms();
}

void LCD_WriteData(unsigned char Data)//写数据
{
	LCD_RS=1;
	LCD_RW=0;
	LCE_Dataport=Data;
	LCD_EN=1;
	Delay1ms();
	LCD_EN=0;
	Delay1ms();
}

void LCD_Init(void)//初始化
{
	LCD_WriteCommand(0x38);
	LCD_WriteCommand(0x0C);
	LCD_WriteCommand(0x06);
	LCD_WriteCommand(0x01);
}

void LCD_Setcursor(unsigned char line,unsigned char column)
{
	if(line==1)//设置光标位置
	{
		//第一列是数字1,但是位置是0x00,要把数字1转换0x00,就把数字1-1就0,所以转十六进制就是0x00
		LCD_WriteCommand(0x80|(column-1));
	}
	else
	{
		//第二行的第一列是从0x40开始,第二列是0x41,相当于0x40+0x01,0x01就是与上面一致
		LCD_WriteCommand(0x80|(column-1)+0x40);
	}
}

void LCD_Showchar(unsigned char line,unsigned char column,unsigned char Char)//line行,column列,Char字符
{//显示一个字符
	LCD_Setcursor(line,column);	
	LCD_WriteData(Char);
}

void LCD_Showstring(unsigned char line,unsigned char column,unsigned char *string)//line行,column列,string字符串
{//显示字符串,字符串直接等于指针,不用数组形式等于字符串,在等于指针形式,那传给指针的就是字符串的第一个字符的地址,然后string【i】一直往下就可以知道字符串,数组是连续的,如果baby的b在第一行第一列,那a就会在第一行,第二列。
	unsigned char i;
	LCD_Setcursor(line,column);		
	for(i=0;string[i]!='\0';i++)
	{
		LCD_WriteData(string[i]);//字符串本身就是地址,所以传进来的字符串用指针string来接
	}
}

int LCD_Pow(int X,int Y)//平方函数,列如:10^2
{
	unsigned char i;
	int Result=1;
	for(i=0;i<Y;i++)
	{
		Result*=X;
	}
	return Result;
}

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--)
	{

    //+'0'是因为number/LCD_Pow(10,i-1) %10对应ASCLL码里面的十进制,想要字符的话得从0x40开始,然后加上十进制化成十六进制,0x40就是'0'
		LCD_WriteData('0'+number/LCD_Pow(10,i-1) %10);
	}
}

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);
	}
	
}

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);
			}
	}
}

void main()
{
	LCD_Init();
	LCD_Showchar(2,2,'I');
	LCD_Showchar(2,4,'L');
	LCD_Showchar(2,5,'O');
	LCD_Showchar(2,6,'V');
	LCD_Showchar(2,7,'E');
	LCD_Showchar(2,9,'Y');
	LCD_Showchar(2,10,'O');
	LCD_Showchar(2,11,'U');
	LCD_Shownum(1,8,520,3);
	LCD_Shownum(1,11,1314,4);
	LCD_Showsignednum(2,12,-8,1);
	LCD_Showhexnum(2,15,0xA6,2);
	
	while(1)
	{
	
	}
}

到了这里,关于51单片机——LCD1602模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机入门——LCD1602

    LCD ( Liquid Crystal Display 的简称) 液晶显示器 。 LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达

    2024年02月09日
    浏览(31)
  • 51单片机LCD1602调试工具

    参考视频:江协科技51单片机 LCD1602头文件代码 LCD1602 C语言文件 LCD1602主函数文件

    2024年01月24日
    浏览(46)
  • 51单片机LCD1602的使用

    本篇文章将为大家讲解LCD1602的使用方法。 LCD1602是一种常用的液晶显示器,它的原理是通过液晶分子的振荡来控制显示内容的。液晶分子在电场的作用下,会发生振荡,从而改变液晶分子的极性,从而控制显示内容。液晶显示器的控制电路会根据输入的信号,控制电场的强度

    2024年02月06日
    浏览(32)
  • MCU-51:单片机LCD1602详解

    LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:16×2个字符,每个字符为5*7点阵 点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应

    2023年04月09日
    浏览(76)
  • 51单片机(五)LCD1602调试工具

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2023年04月27日
    浏览(51)
  • 51单片机矩阵键盘——LCD1602显示

    本次的实验需要用到LCD1602液晶屏,需要用到LCD1602.c 与LCD1602.h文件链接: https://download.csdn.net/download/YLG_lin/86404949 使用矩阵键盘随意按下按键,LCD1602第二行前两位就会显示对应按键按下的数字。 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式 采用

    2023年04月09日
    浏览(35)
  • 51单片机 | LCD1602 液晶显示实验

      在前面章节,我们已经学习过几种显示装置,例如静态数码管、动态数码管、 8*8LED 点阵、串口通信。使用它们可以直观显示一些字符数据,但是它们也有各种局限性,比如显示字符数据太少,硬件设计复杂、代码编写难度大等。这一章就来介绍一种非常简单且常用的显

    2023年04月11日
    浏览(52)
  • 51单片机LCD1602液晶屏显示方法

    以显示hello,world!    2022.10.17  为例。 首先把LCD1602的模块化程序添加到项目目录中,模块化方法在51单片机之程序模块化_学习笔记吧的博客-CSDN博客这里可以学习。 实验程序: LCD1602.c文件代码: LCD1602.h文件代码: 把这两个代码,分别添加到LCD1602.c 和 LCD1602.h 文件,然后添加

    2023年04月08日
    浏览(42)
  • 51单片机外设系列:LCD1602 的详细编程

    前言,LCD1602是一个比较常用的单片机显示外设,下面我们从它的显示原理,来分析用51单片机编程的思路。另外结尾还提供了完成的程序代码参考。 一、LCD1602的外观、结构和基本参数 引脚功能解析: 第1引脚:GND为电源地脚。 第2引脚:VCC接5V电源正极。 第3引脚:VL为液晶显

    2024年02月05日
    浏览(33)
  • 51单片机学习笔记-12LCD1602液晶屏

    [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包