(证明学过,以示纪念)

所谓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. (转)Linux内核基数树应用分析

    Linux内核基数树应用分析 ——lvyilong316 基数树(Radix tree)可看做是以二进制位串为关键字的trie树,是一种多叉树结构,同时又类似多层索引表,每个中间节点包含指向多个节点的 ...

  2. Web—07-JQuery

    jquery是一个函数库,一个js文件,页面用script标签引入这个js文件就可以使用. <script type="text/javascript" src=" ...

  3. Servlet基础知识总结

    Servlet是JavaWeb应用开发的核心组件.Servlet运行在Servlet容器中(例如最常用的Tomcat),它可以为各种客户请求提供相应服务.Servlet可以轻松完成以下任务: 动态生成 ...

  4. ETL项目1:大数据采集,清洗,处理:使用MapReduce进行离线数据分析完整项目

    ETL项目1:大数据采集,清洗,处理:使用MapReduce进行离线数据分析完整项目 思路分析: 1.1 log日志生成 用curl模拟请求,nginx反向代理80端口来生成日志. #! /bin/b ...

  5. django的数据库操作-16

    目录 增 1.save 2.create 查 1.基本查询 2.过滤查询 3. F对象 4. Q对象 5. 聚合函数 6. 排序 7. 关联查询 8. 关联+过滤查询 删 改 1. save 2. u ...

  6. 定时任务crond服务

    crond 什么是? crond 是linux系统中用于定期执行命令或指定程序任务的服务.一般情况下,安装完系统操作之后,默认会启动任务调度服务. linux调度任务的工作可以分为两类: 系统自身执行 ...

  7. sed: unix与doc换行的转换

    在Linux (Unix)平台下回车换行以\n表示 在Window平台下回车换行以\r\n表示 两者的差异导致了: 在window下看Linux的文本排版全乱 在Linux在看Window的文本则是存 ...

  8. ubuntu下python在pycharm环境下安装setuptools和pip,和distutils.core

    python安装好后,我们用pycharm安装所需的第三方模块时,出现“Python packaging tools not found. install packaging tools”点击安装输完 ...

  9. 20155236 2016-2017-2 《Java程序设计》第三周学习总结

    20155236 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 1.在原始码中只能有一个公开类,且主文档名必须与公开类名称相同:其实只要有一个类定义,就会产 ...

  10. 2017-2018-2 《网络对抗技术》 20155322 第二周 Exp1 PC平台逆向破解(5)M

    #2017-2018-2 <网络对抗技术> 20155322 第二周 Exp1 PC平台逆向破解(5)M [博客目录] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 ...