51单片机——LCD1602液晶显示屏

news/2024/11/19 5:51:09/

如下图:红框就是LCD1602液晶显示屏,他是可插拔的,插上去后数码管就会乱码无效了,因为他两共用了MCU的8个P0口
在这里插入图片描述

LCD1602原理图
在这里插入图片描述
在这里插入图片描述
从上面两幅图可以看出来

  • LCD1602的LCD_D0~LCD_D7分别对应MCU的P00-P07
  • LCD1602的LCD_RS对应MCU的P26
  • LCD1602的LCD_RW对应MCU的P25
  • LCD1602的LCD_E对应MCU的P27

LCD1602的16个引脚
在这里插入图片描述

A在5*7点阵的字模
在这里插入图片描述
在这里插入图片描述
PC收到41H的代码后就去字模文件中将代表A字的这一组数据送到显卡去点亮屏幕上相应的点,你就看到“A”这个字符了。

LCD1602指令集:
在这里插入图片描述
显示A的步骤

  • 第一步:功能设置,八位数据接口,两行显示,5*7点阵,写指令0x38

  • 第二步:显示设置,显示开,光标关,闪烁关,写指令0x0c

  • 第三步:输入方式设置,数据读写操作后,光标自动加一,画面不动,写指令0x06

  • 第四步:清屏,写指令0x01

  • 第五步:设置光标位置,即DDRAM地址设置
    如果是第一行,写指令0x80|(col-1)
    如果是第二行,写指令0x80|(col-1+0x40)
    这里做下解释,如下图所示,LCD1602只能显示两行,每行16个。
    所以第一行写指令0x80|(col-1),假设col=1,即用户想在第一行第一列写数据,我们只需要写指令0x80|0x00即可,第一行第二列写数据,我们写指令0x80|0x01。
    在这里插入图片描述

  • 第六步:写A这个数据,把P0口直接赋值为A即可

例程:显示A
Delay.h

#ifndef __DELAY_H__
#define __DELAY_H__void Delay(unsigned int xms);#endif

Delay.c


void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}

LCD1602.h

#ifndef __LCD1602_H__
#define __LCD1602_H__//用户调用函数:
void LCD_Init();
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char);
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String);
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);#endif

LCD1602.c

#include <REGX52.H>
#include <Delay.h>
//引脚配置:
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DataPort P0/*** @brief  LCD1602写命令* @param  Command 要写入的命令* @retval 无*/
void LCD_WriteCommand(unsigned char Command)
{LCD_RS=0;LCD_RW=0;LCD_DataPort=Command;LCD_EN=1;Delay(1);LCD_EN=0;Delay(1);
}/*** @brief  LCD1602写数据* @param  Data 要写入的数据* @retval 无*/
void LCD_WriteData(unsigned char Data)
{LCD_RS=1;LCD_RW=0;LCD_DataPort=Data;LCD_EN=1;Delay(1);LCD_EN=0;Delay(1);
}/*** @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 if(Line==2){LCD_WriteCommand(0x80|(Column-1+0x40));}
}/*** @brief  LCD1602初始化函数* @param  无* @retval 无*/
void LCD_Init()
{LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵LCD_WriteCommand(0x0c);//显示开,光标关,闪烁关LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动LCD_WriteCommand(0x01);//光标复位,清屏
}/*** @brief  在LCD1602指定位置上显示一个字符* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @param  Char 要显示的字符* @retval 无*/
void LCD_ShowChar(unsigned char Line,unsigned char Column,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,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(Number/LCD_Pow(10,i-1)%10+'0');}
}/*** @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(Number1/LCD_Pow(10,i-1)%10+'0');}
}/*** @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,SingleNumber;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){SingleNumber=Number/LCD_Pow(16,i-1)%16;if(SingleNumber<10){LCD_WriteData(SingleNumber+'0');}else{LCD_WriteData(SingleNumber-10+'A');}}
}/*** @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(Number/LCD_Pow(2,i-1)%2+'0');}
}

main.c

#include <REGX52.H>
#include "LCD1602.h"	//包含LCD1602头文件
void main()
{LCD_Init();LCD_ShowChar(1,1,'A');
}

结果:
在这里插入图片描述

百度网盘
51单片机系列文章所有文件内容都在此处
链接:https://pan.baidu.com/s/1iVir85WO_usDPxmyZ0qDIg
提取码:4spe


http://www.ppmy.cn/news/161799.html

相关文章

液晶显示屏行业信息汇总

1、概述 液晶显示屏英文全名为Liquid Crystal Display&#xff0c;简称LCD。它是一种借助于薄膜晶体管驱动的矩阵显示屏&#xff0c;以电流刺激液晶分子从而产生点、线、面配合LED背光源构成显示画面。 液晶显示产业链情况&#xff1a; 液晶显示屏重要组成部分&#xff1a; 按…

三星电视三星服务器没响应,三星液晶电视的常见故障有哪些

三星液晶电视常见的故障有以下这些&#xff1a; 一.偏色 1.检查主板信号R\G\B由输入到主芯片部分线路(有无虚焊短路 &#xff0c;电容电阻有无错值)。 2.进入工厂模式&#xff0c;进行白平衡调节&#xff0c;能否调出正常颜色。 3.必要时替换MCU或对MCU进行重新烧录。 二.花屏 …

三星液晶拼接屏厂家有哪些 液晶拼接屏特点介绍

液晶拼接屏作用非常大&#xff0c;既能单独作为 显示器 又可以拼接成超大屏幕使用&#xff0c;根据不同需求&#xff0c;做出相应的改变&#xff0c;屏幕可大可小&#xff0c;非常方便&#xff0c;满足用户多样化需求&#xff0c;并且液晶拼接亮度高、采用超窄边设计&#xff0…

国内有哪些液晶屏生产厂家?

国内液晶屏生产厂家的大咖级分别有以下&#xff1a; 1、京东方&#xff0c; LCD液晶屏全球市场排名前五位。技术已领先全球。其核心事业包括显示器件、智慧系统和健康服务。显示器件产品广泛应用于手机、平板电脑、笔记本电脑、显示器、电视、车载、可穿戴设备等领域&#xff1…

液晶显示屏LCD1602

液晶显示屏问题 ** 步骤 ** 液晶屏显示内部处理问题 读状态&#xff08;检测是否属于忙碌状态&#xff09; 写命令&#xff08;输入给函数想要显示的位置信息&#xff09; 写数据&#xff08;输入给函数想要显示的信息内容&#xff09; 初始化&#xff08;使用液晶屏之前应先…

三星S24A350型显示器黑屏解决方法

三星S24A350型显示器黑屏解决方法 今天一早来实验室&#xff0c;还是和往常一样打开电脑&#xff0c;但是有一点不一样的是电脑显示器么有任何反应。我关了显示器然后再打开&#xff0c;屏幕上就显示“HDMI“&#xff0c;然后就没有其他信息了。我把后面视频输入的线拔掉以后&a…

夏普屏、三星屏、台湾屏、IPS硬屏 各类液晶屏详解

夏普屏、三星屏、台湾屏、IPS硬屏 各类液晶屏详解 液晶电视的屏幕称之为液晶面板&#xff0c;现在市面上的液晶屏分为三大阵营&#xff1a; 一、夏普屏&#xff1b; 二、日韩厂商的液晶屏&#xff0c;如三星索尼&#xff08;S-LCD&#xff09;液晶屏和LGD液晶屏(原为LPL&…

微信号公众号嵌入H5

订阅号只能把H5的链接放入图文消息里面&#xff0c;只有服务号才能把链接放在菜单栏&#xff0c;使用微信JSSDK调用微信接口&#xff0c;文档地址