(证明学过,以示纪念)

所谓1602就是每行可以显示16个字符,可以显示两行。1602液晶在工业中使用比较广泛,其基本都采用的是HD44780控制器,或者兼容该指令集,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。其实主要会看时序图就可以了。

1.1602字符LCD指标

注:工作电流是指液晶的耗电,没有考虑背光耗电。一般情况下,背光耗电大约为20mA。

2.引脚与功能

注:

3.1602字符LCD内部显存

1602液晶内部包含80个字节的显示RAM,用于存储需要发送的数据,第二行存储器地址范围为0x40~0x67。其中,第行存储器地址范围0x00~0x0F与1602字符LCD第一行位置对应;第二行存储器地址范围0x40~0x4F与1602字符LCD第二行位置对应,每行多出来的部分是为了显示移动字幕。

4.读写时序

 

5.1602的指令集

https://www.cnblogs.com/aslmer/p/5801363.html

6.读写的流程

7.代码演示

#include<reg51.h>
sbit P1_0 = P1 ^ ;
sbit P1_1 = P1 ^ ;
sbit P1_2 = P1 ^ ;
#define LCDPORT P2
#define RSCLR P1_0=0   //P1_0 接的是RS 寄存器 ,RS=1 : 数据寄存器 RS=0 指令寄存器
#define RSSET P1_0=1
#define RWCLR P1_1=0   //P1_1 接的是RW寄存器 , RW=1: 读数据     RW=0 写数据
#define RWSET P1_1=1
#define ENCLR P1_2 =0   //P1^2 接的是EN 使能寄存器 写时下降沿 读时 高电平有效
#define ENSET P1_2=1
void lcd_delay(unsigned char  delayTime)
{
  while (delayTime)
  {
    delayTime--;
  }
}

void wrirte_lcd_command(unsigned char write_command)
{
  lcd_delay();
  RSCLR;
  RWCLR;
  ENCLR; //使能 ,下降沿触发
  LCDPORT = write_command;
  ENSET;
  ENCLR;
}
void write_lcd_data(unsigned char write_data)
{
  lcd_delay();
     LCDPORT = write_data;
  RSSET;
  RWCLR;
  ENSET;
  ENCLR;

}
void initlize_lcd(void)
{
  unsigned char i;
  ; i > ; i--) lcd_delay();
  wrirte_lcd_command(0x3f); //表明数据总线是8位,字体大小是5*10的字体
  ; i > ; i--) lcd_delay();
  wrirte_lcd_command(0x3f); //表明数据总线是8位
  wrirte_lcd_command(0x0f); //打开显示,打开光标,并且显示。
  wrirte_lcd_command(0x01); //将地址计数器(AC)设为00H,DDRAM内容保持不变,光标移至左上脚
  ; i > ; i--) lcd_delay(); //进入模式设置指令(Entry Mode Set)
  wrirte_lcd_command(0x06); //光标右移,关闭整体移动。
}
void lcd_display(unsigned char x, unsigned char y, const unsigned char *str)
{
  switch (x)
  {
  :
    wrirte_lcd_command(0x80 + y); break;
  :
    wrirte_lcd_command(0xc0 + y); break;
  }
  while (*str)
  {
    write_lcd_data(*str);
    str++;
  }
}
const unsigned char lcddisplay_row1[] = { "sp-02122" };
const unsigned char lcddisplay_row2[] = { "hahahaaha" };
void Delay(unsigned int t)
{
  while (t)t--;
}
void main(void)
{
  unsigned char i;
  initlize_lcd();
  wrirte_lcd_command(0x80);//从第一行开始写
  ; i > ; i--)
  {
    write_lcd_data(i + 'A');
    Delay();
    Delay();
  }
  wrirte_lcd_command(0xc0);//改到第二行写
  ; i > ; i--)
  {
    write_lcd_data(i + 'a');
    Delay();
    Delay();
  }
  lcd_display(, , lcddisplay_row1);
  Delay();
  Delay();
  lcd_display(, , lcddisplay_row2);
  );
}

基于preteus的1602液晶显示器的学习(LM016L)的更多相关文章

  1. 基于STM32的USB枚举过程学习笔记

    源:基于STM32的USB枚举过程学习笔记 基于STM32的USB枚举过程学习笔记(一) 基于STM32的USB枚举过程学习笔记(二) 基于STM32的USB枚举过程学习笔记(三) 基于STM32的U ...

  2. Android应用---基于NDK的samples例程hello-jni学习NDK开发

    Android应用---基于NDK的samples例程hello-jni学习NDK开发 NDK下载地址:http://developer.android.com/tools/sdk/ndk/index ...

  3. 基于jquery的插件turn.js学习笔记

    基于jquery的插件turn.js学习笔记 简介 turn.js是一个可以实现3d书籍展示效果的jq插件,使用html5和css3来执行效果.可以很好的适应于ios和安卓等触摸设备. How it ...

  4. StreamDM:基于Spark Streaming、支持在线学习的流式分析算法引擎

    StreamDM:基于Spark Streaming.支持在线学习的流式分析算法引擎 streamDM:Data Mining for Spark Streaming,华为诺亚方舟实验室开源了业界第一 ...

  5. 基于搜索的贝叶斯网络结构学习算法-K2

    基于搜索的贝叶斯网络结构学习算法-K2 2018-04-05 19:34:18 ItsBlue 阅读数 3172更多 分类专栏: 贝叶斯网络 网络结构学习   版权声明:本文为博主原创文章,遵循CC ...

  6. [炼丹术]基于SwinTransformer的目标检测训练模型学习总结

    基于SwinTransformer的目标检测训练模型学习总结 一.简要介绍 Swin Transformer是2021年提出的,是一种基于Transformer的一种深度学习网络结构,在目标检测.实例 ...

  7. 基于 Cmd MarkDown 的 markdown 语法学习

    首先我要打一个属于干货的广告:CmdMarkDown 是非常好用的markdown编辑器软件,支持全平台,由作业部落出品,分为客户端与WEB端两种使用场景. 本篇博客学习的markdown语法都是基于 ...

  8. Keras:基于Theano和TensorFlow的深度学习库

    catalogue . 引言 . 一些基本概念 . Sequential模型 . 泛型模型 . 常用层 . 卷积层 . 池化层 . 递归层Recurrent . 嵌入层 Embedding 1. 引言 ...

  9. 基于STM32的USB枚举过程学习笔记(转)

    之前使用ST官方的库以及网络的资料,完成了使用USB HID类进行STM32和PC机的通讯.由于其他原因并没有深入的分析,虽然实现了功能,但是关于USB设备的枚举,以及具体的通讯方式都没有清晰的概念, ...

随机推荐

  1. ASP.NET Core 如何设置发布环境

    在ASP.NET Core中自带了一些内置对象,可以读取到当前程序处于什么样的环境当中,比如在ASP.NET Core的Startup类的Configure方法中,我们就会看到这么一段代码: publ ...

  2. 浅谈JS作用域和闭包

    函数表达式和函数声明 变量/函数声明都会提前 console.log(a) let a =1 那么打印出来的a为 undefined,因为会将a提到前面并赋予默认值undefined 函数声明:函数声 ...

  3. 20181031noip模拟赛T1

    思路: 我们会发现不合法的位置只有两种情况 要么在前半边,要么在后半边 那么,我们将序列劈两次 使两次的长度分别为: (n为偶数时要特判一下,因为根本不可能) (n/2),(n/2+1) (n/2+1 ...

  4. 使用img标签能使用background-size:conver一样的效果

    使用css img { object-fit: cover; object-position:left center; } 就可以达到 和 background-size:cover; 一样的效果 共 ...

  5. hexo博客更换主题

    前边我们已经学会了博客的搭建了,这次我们来看看怎么样让我们的博客更漂亮,更个性化.那就是来更换博客的主题,让我们的博客与众不同起来.我们可以去hexo的主题官网去挑选你自己喜欢的主题风格.里边收录了很 ...

  6. Ruby中Enumerable模块的一些实用方法

    我在查看 Array 类和 Hash 类的祖先链的时候都发现了 Enumerable,说明这两个类都mixin了Enumerable模块.Enumerable模块为集合型类提供了遍历.检索.排序等方法 ...

  7. BurpSuite—-Repeater模块(中继器)

    一.简介 Burp Repeater 是一个手动修改并补发个别 HTTP 请求,并分析他们的响应的工具.它最大的用途就是和其他 Burp Suite 工具结合起来.你可以从目标站点地图,从 Burp ...

  8. 关于C/C++语言的部分BUG

    目录 scanf格式匹配引发的错误 局部变量被释放引发的bug 数组写入超出索引维度 指针的指针引发的思考 未定义赋值的变量引发的bug 题外话 scanf格式匹配引发的错误   运行如下程序时,出现 ...

  9. go语言 os.Rename() cannot move the file to a different disk drive 怎么办

    时值我小病在家休养生息,喜欢跳广场舞的外公来寻求我的帮助,他们跳广场舞是将存有歌曲的U盘插到音响上面,而音响大部分都是只能显示歌曲的索引index,不能直接显示歌曲名,所以为了方便他们会在U盘里面对歌 ...

  10. SQL SERVER循环遍历(普通循环和游标循环)

    1.首先需要一个测试表数据Student 2.普通循环 1)循环5次来修改学生表信息 --循环遍历修改记录--declare @i int   set @i=0while @i<5begin   ...