51单片机——LCD1602液晶屏 C语言入门编程

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

目录

LCD1602:

数据指令: 

字节写入时序:

1. LCD1602:LCD1602液晶上显示字符信息


LCD1602:

        1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若 干个5x7的点阵字符位组成,每个点阵字符位都可以用显示一个字符, 每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。

        字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。写入显示地址时要求最高位D7恒定为高电平1。

51单片机——LCD1602液晶屏 C语言入门编程

数据指令: 

//初始化
0X38 //八位数据接口,两行显示,5*7点阵
0X0C //显示开,光标关,闪烁关
0X06 //数据读、写操作后,AC自动加一,画面不动
0X01 //清除DDRAM和AC值,光标复位(清屏)
//显示位置
发送指令(0x80|(lie-1));	//设置光标位置80~8F
发送指令(0x80|(lie-1)+0x40);	//设置光标位置C0~CF

51单片机——LCD1602液晶屏 C语言入门编程

51单片机——LCD1602液晶屏 C语言入门编程

51单片机——LCD1602液晶屏 C语言入门编程

51单片机——LCD1602液晶屏 C语言入门编程

51单片机——LCD1602液晶屏 C语言入门编程

字节写入时序:

        不是所有的地址都可以直接用来显示字符数据,只有第一行中的00-0F,第二行中的40-4F才能显示,其他地址只能用于存储。要使用LCD1602,首先需要对其初始化,即通过写入一些特定的指令实现。 然后选择要在LCD1602的哪个位置显示并将所要显示的数据发送到LCD的DDRAM。

        ①当要写指令字,设置LCD1602的工作方式时:需要把RS置为电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入(下降沿即可)。

        ②当要写入数据字,在1602上实现显示时:需要把RS置为电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入(下降沿即可)。 写指令和写数据,差别仅仅在于RS的电平不一样而已。

        当要写命令字节的时候,时间由左往右,RS变为低电平,R/W变为低电平, 注意看是RS的状态先变化完成。然后这时,DB0~DB7上数据进入有效阶段,接着E引脚有一个整脉冲的跳变,接着要维持时间最小值为tpw=400ns的E脉冲宽 度。然后E引脚负跳变,RS电平变化,R/W电平变化。这样便是一个完整的LCD1602写命令的时序。

51单片机——LCD1602液晶屏 C语言入门编程

51单片机——LCD1602液晶屏 C语言入门编程

1. LCD1602:LCD1602液晶上显示字符信息

        LCD1602函数

#include <REGX52.H>
#include "intrins.h"

sbit LCD_RS=P2^6;
sbit LCD_WR=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DB P0

void LCD_Delay1ms()//LCD1602延时1ms函数@11.0592MHz
{
    unsigned char i, j;
    _nop_();
    i = 2;
    j = 199;
    do
    {
        while (--j);
    } while (--i);
}

void LCD1602_WriteCommand(unsigned char Command)//写指令
{
    LCD_RS=0;
    LCD_WR=0;
    LCD_DB=Command;
    LCD_EN=1;
    LCD_Delay1ms();//延时 速度太快可能读不过来
    LCD_EN=0;
    LCD_Delay1ms();//延时 速度太快可能读不过来
}

void LCD1602_WriteData(unsigned char Data)//写数据
{
    LCD_RS=1;
    LCD_WR=0;
    LCD_DB=Data;
    LCD_EN=1;
    LCD_Delay1ms();//延时 速度太快可能读不过来
    LCD_EN=0;
    LCD_Delay1ms();//延时 速度太快可能读不过来
}

void LCD1602_Init(void)//初始化
{
    LCD1602_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵
    LCD1602_WriteCommand(0x0c);//显示开,光标关,闪烁关
    LCD1602_WriteCommand(0x06);//数据读、写操作后,AC自动加一,画面不动
    LCD1602_WriteCommand(0x01);//清除DDRAM和AC值,光标复位(清屏)
}

void LCD1602_SetCursor(unsigned char hang,lie)//设置光标位置 1~2行,1~16列
{
    if(hang==1)
    {
        LCD1602_WriteCommand(0x80|(lie-1));//第一行设置光标位置80~8F
    }
    else if(hang==2)
    {
    LCD1602_WriteCommand(0x80|(lie-1)+0x40);//第二行设置光标位置C0~CF
    }
}

void LCD1602_zifu(unsigned char hang,lie,Data)//显示字符 1~2行,1~16列,字符'*'
{
    LCD1602_SetCursor(hang,lie);
    LCD1602_WriteData(Data);
}

void LCD1602_zifuchuan(unsigned char hang,lie,char *Datas)//显示字符串 1~2行,1~16列,字符串"**"
{
    unsigned char i;
    LCD1602_SetCursor(hang,lie);
    for(i=0;Datas[i]!='\0';i++) 
    {
        LCD1602_WriteData(Datas[i]);
    }
}

int LCD_Pow(int X,int Y)//返回值=X的Y次方
{
    unsigned char i;
    int Result=1;
    for(i=0;i<Y;i++)
    {
        Result*=X;
    }
    return Result;
}

void lCD1602_shuzi(unsigned char hang,lie,unsigned int Num,unsigned char wei)//显示十进制数字 1~2行,1~16列,数字0~65535,范围1~5
{
    unsigned char i;
    LCD1602_SetCursor(hang,lie);
    for(i=wei;i>0;i--)
    {
        LCD1602_WriteData(Num/LCD_Pow(10,i-1)%10+'0');
    }
}

void LCD1602_zfshuzi(unsigned char hang,lie,int zfNum,unsigned char wei)//显示有符号十进制数字 1~2行,1~16列,数字-32768~32767,范围1~5
{
    unsigned char i;
    unsigned int zfNumber;
    LCD1602_SetCursor(hang,lie);
    if(zfNum>=0)
    {
        LCD1602_WriteData('+');
        zfNumber=zfNum;
    }
    else
    {
        LCD1602_WriteData('-');
        zfNumber=-zfNum;
    }
    for(i=wei;i>0;i--)
    {
        LCD1602_WriteData(zfNumber/LCD_Pow(10,i-1)%10+'0');
    }
}

void LCD1602_hex(unsigned char hang,lie,unsigned int hex,unsigned char wei)//显示十六进制数字 1~2行,1~16列,数字0~0xFFFF,范围1~4
{
    unsigned char i,hexnum;
    LCD1602_SetCursor(hang,lie);
    for(i=wei;i>0;i--)
    {
        hexnum=hex/LCD_Pow(16,i-1)%16;
        if(hexnum<10)
        {
            LCD1602_WriteData(hexnum+'0');
        }
        else
        {
            LCD1602_WriteData(hexnum-10+'A');
        }
    }
}

void LCD1602_bin(unsigned char hang,lie,unsigned int bin,unsigned char wei)//显示二进制数字 1~2行,1~16列,数字0~1111 1111 1111 1111,范围1~16
{
    unsigned char i;
    LCD1602_SetCursor(hang,lie);
    for(i=wei;i>0;i--)
    {
        LCD1602_WriteData(bin/LCD_Pow(2,i-1)%2+'0');
    }
}

        主函数文章来源地址https://www.toymoban.com/news/detail-449802.html

#include <REGX52.H>
#include "LCD1602.h"

void main()
{
    LCD1602_Init();
    LCD1602_zifu(1,1,'a');
    LCD1602_zifuchuan(1,3,"Hello");
    lCD1602_shuzi(1,9,12,5);
    LCD1602_hex(1,15,0xae,2);
    LCD1602_bin(2,1,0xaa,8);
    LCD1602_zfshuzi(2,10,-36,2);
    while(1)
    {
		
    }
}

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

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

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

相关文章

  • 51单片机 | LCD1602 液晶显示实验

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

    2023年04月11日
    浏览(64)
  • 【51单片机】LCD1602 液晶显示实验指导书

             来介绍一种非常简单且常用的显示装置——LCD1602 液晶显示器,使用它可以显示更多的字符数字。这将有助于我们清晰的观察程序的运行结果,更加方便我们的后续调试和开发。         我们的开发板上集成了一个 LCD1602 液晶显示器接口,将LCD1602 液晶对应插

    2024年02月01日
    浏览(63)
  • 【附报告】51单片机计算器(LCD1602液晶显示)

      由于本文较早,这里推荐一下近期刚优化的:【优化】51单片机计算器(LCD1602液晶显示)_Gxtoeilee的博客-CSDN博客   1 设计目标 设计可选模式的计算器  2 主要功能 功能一:可选两种计算模式,模式一为四则运算,模式二为扩展内容; 功能二:除法的计算结果保留到小数点

    2024年02月11日
    浏览(57)
  • 【C语言】51单片机计算器(LCD1602液晶显示)

      由于本文较早,这里推荐一下近期刚优化的:【优化】51单片机计算器(LCD1602液晶显示)_Gxtoeilee的博客-CSDN博客   1 设计目标 设计可选模式的计算器  2 主要功能 功能一:可选两种计算模式,模式一为四则运算,模式二为扩展内容; 功能二:除法的计算结果保留到小数点

    2024年02月07日
    浏览(57)
  • Proteus仿真-LCD1602液晶屏使用方法(驱动一)

    一、硬件链接 在元件库中搜索LM016即可找到LCD1602液晶屏。 按下图方式链接单片机和屏幕。 二、软件驱动代码 三、示例程序

    2024年02月12日
    浏览(41)
  • 第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作

    目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图 第五讲 单片机驱动彩色液

    2024年01月16日
    浏览(49)
  • 第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算

    目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图 第五讲 单片机驱动彩色液

    2024年01月22日
    浏览(46)
  • 第八讲 单片机驱动彩色液晶屏 控制RA8889软件:显示图片

    目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图 第五讲 单片机驱动彩色液

    2024年01月22日
    浏览(52)
  • 第十三讲 单片机驱动彩色液晶屏 bin档的烧录方法

    目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图 第五讲 单片机驱动彩色液

    2024年02月19日
    浏览(48)
  • 【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块7

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)

    2024年02月16日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包