ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

4.11 51单片机-LCD1602显示屏

2021-12-31 21:02:00  阅读:180  来源: 互联网

标签:4.11 高电平 1602 51 低电平 单片机 lcd LCD1602 光标


4.11 LCD1602显示屏

4.11.1 原理图介绍

图4-11-1

图4-11-2

根据原理图得知:

LCD1602的数据脚接P0口。

RD(RS)引脚接P2.6

WR(RW)引脚接P2.5

LCDE(E)引脚接P2.7

4.11.2 LCD1602字符屏幕介绍

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。

它是由若干个5x7或者5x11的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。

图4-11-3 

图4-11-4 

图4-11-5

4.11.3 时序介绍

图4-11-6 

 

图4-11-8 

 

图4-11-9

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表示在高电平时为4位总线,低电平时为8位总线;N表示在低电平时为单行显示,高电平时双行显示;F表示在低电平时显示5×7的点阵字符,高电平时显示5×10的点阵字符。

(7)指令7:字符发生器RAM地址设置。

(8)指令8:DDRAM地址设置。

(9)指令9:读忙信号和光标地址。其中,BF为忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平则表示不忙。

(10)指令10:写数据。

(11)指令11:读数据。

4.11.4 示例代码

下面代码实现在LCD1602屏幕上显示两排字母数字。

图4-11-10

示例代码:

#include <reg51.h>
sbit lcd_1602_RS=P2^6;  //区分命令和数据
sbit lcd_1602_R_W=P2^5; //读写区分
sbit lcd_1602_E=P2^7;   //使能信号
#define lcd_1602_data_cmd P0  //发送接收数据和命令

//1602的初始化函数
void LCD1602_Init(void)
{
    LCD1602_WriteCmd(0x38); //设置显示模式
    LCD1602_WriteCmd(0x06); //设置数据指针自增
    LCD1602_WriteCmd(0x0C); //设置光标显示关闭,开启显示
    LCD1602_WriteCmd(0x01); //清屏
}

//1602写数据
void LCD1602_WriteData(unsigned char dat)
{
    lcd_1602_RS=1;//表示写数据
    lcd_1602_R_W=0;//表示写操作
    lcd_1602_data_cmd=dat;//写入的数据
    lcd_1602_E=1;//高脉冲
    DelayMs(5);
    lcd_1602_E=0;
}

//1602写命令
void LCD1602_WriteCmd(unsigned char cmd)
{
    lcd_1602_RS=0;
    lcd_1602_R_W=0;
    lcd_1602_data_cmd=cmd; 
    lcd_1602_E=1;
    DelayMs(5);
    lcd_1602_E=0;
}

/*
设置光标地址
x : 显示的位置
y :显示的行数 0表示1行显示  1表示第2行显示 
*/
void LCD1602_SetCursorAddr(unsigned char x,unsigned char y)
{
    unsigned char addr=0;
    if(y==1) //表示设置在第2行显示
    {
        addr=x+0x40;  //第二行地址
    }
    else
    {
        addr=x+0x00;    //第一行地址
    }
    LCD1602_WriteCmd(0x80|addr); //加上0x80表示设置地址
}

/*
设置显示的数据
*dat :表示要显示的数据
len  :显示数据的长度
*/
void LCD1602_DisplayData(unsigned  char *dat,unsigned char len)
{
     while(len--)
     {
         LCD1602_WriteData(*dat++);
     }   
}
code u8 str1[]="ABCDEFGHIJ";  //字符串结尾 '\0'
code u8 str2[]="1234567890";  //字符串结尾 '\0'
int main()
{
    LCD1602_Init();  //1602初始化
    DelayMs(50);
    LCD1602_SetCursorAddr(0x3,0x0);  //设置光标地址
    LCD1602_DisplayData(str1,strlen(str1)); //在1602上显示数据
    LCD1602_SetCursorAddr(0x3,0x1);  //设置光标地址
    LCD1602_DisplayData(str2,strlen(str2)); //在1602上显示数据
    while(1)
    {
       
}
}

标签:4.11,高电平,1602,51,低电平,单片机,lcd,LCD1602,光标
来源: https://blog.csdn.net/xiaolong1126626497/article/details/121031948

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有