人生绕不开一台LCD1602,虽然它比较丑,接的线也比较多。#非标协议【上】

2024-02-04 02:36

本文主要是介绍人生绕不开一台LCD1602,虽然它比较丑,接的线也比较多。#非标协议【上】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

人生绕不开一台LCD1602,虽然它比较丑,接的线也比较多。#非标协议【上】

    • 前言
    • 预备知识
    • 1.初识LCD1602
      • 1.1概述
      • 1.2引脚说明
      • 1.3和单片机接线说明
      • 1.4LCD1602 的指令说明
    • 2.LCD在一个位置显示一个字母的逻辑
      • 2.1在哪里显示
      • 2.2显示的是什么
      • 2.4如何解决D0到D7既要传输字符位置信息又要传输字符数据信息
    • 3.LCD1602写时序分析
      • 3.1写时序图与写时序参数
      • 3.2写时序图分析
    • 4.编程实现LCD1602显示字符C
      • 4.1编程实现LCD1602显示字符C的核心思路
      • 4.2配置LCD1602数据引脚D0到D7
      • 4.3**配置LCD1602控制引脚RS、RW、EN**
      • 4.4根据写时序图配置LCD1602写指令和写数据函数
      • 4.5根据读时序图配置LCD1602检测忙信号函数
      • 4.6根据LCD1602手册一般初始化(复位)过程建立LCD609初始化函数
      • 4.7主函数整合
      • 4.8完整程序代码
    • 5.编程实现LCD1602显示一行
      • 5.1编程实现LCD1602显示一行核心思路
      • 5.2定义一个空类型名为LCD1602ShowARow的函数,形参为字符型的行,字符型的列,字符型的指针变量str。
      • 5.3运用C语言中的选择语句switch来选择哪行显示。
      • 5.4整体算法见代码
      • 5.5完整程序代码
      • 5.6 LCD1602接收字符串时不必担心光标偏移问题,LCD1602会自动偏移。
    • 结束语

前言

  本篇博文介绍的是用51单片机的非标准写协议【上】(LCD1602),包含初识LCD1602,LCD在一个位置显示一个字母的逻辑,LCD1602写时序分析,编程实现LCD1602显示字符C,编程实现LCD1602显示一行。看到这篇博文的朋友,可以先赞再看吗?

预备知识

  一、基本电路标识识别和接线,例如VCC,GND。
  二、数电时序图的阅读,高低电平的识别。
  三、C变量
  四、基本输入输出
  五、流程控制
  六、函数

  七、指针
  八,字符串

  如果以上知识不清楚,请自行学习后再来浏览。如果我有没例出的,请在评论区写一下。谢谢啦!

1.初识LCD1602

1.1概述

  LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)

在这里插入图片描述

1.2引脚说明

编号符号引脚说明编号符号引脚说明
1VSS电源地9D2数据
2VDD电源正极10D3数据
3VL液晶显示偏压11D4数据
4RS数据/命令选择12D5数据
5R/W读/写选择13D6数据
6E使能信号14D7数据
7D0数据15BLA背光源正极
8D1数据16BLK背光源负极

  第 1 脚: VSS 为电源地
  第 2 脚: VDD 接 5V 正电源
  第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”, 使用时可以通过一个 10K 的电位器调整对比度。(注:电位器可用50K的,接线方式为左右两只引脚接VCC,GND,中间引脚接VL
  第 4 脚: RS 为寄存器选择,高电平时选择数据寄存器、 低电平时选择指令寄存器。
  第 5 脚: R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。
  第 6 脚: E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。
  第 7~14 脚: D0~D7 为 8 位双向数据线。
  **第 15 脚:**背光源正极。
  **第 16 脚:**背光源负极。

1.3和单片机接线说明

  • 电源

  VSS -- GND
  VDD -- 5V

  • 对比度

  VL -- GND

  • 控制线

  RS -- P1.0
  RW -- P1.1
  E -- P1.4

  • 背光灯

  A -- 5V
  K -- GND

  • 数据

  D0到D7 -- P0.1到P0.7

1.4LCD1602 的指令说明

  LCD1602 液晶模块内部的控制器共有 11 条控制指令,如表 2 所示:

序号指令RSR/WD7D6D5D4D3D2D1D0
1清显示0000000001
2光标返回000000001*
3置输入模式00000001I/DS
4显示开/关控制0000001DCB
5光标或字符移位000001S/CR/L**
6置功能00001DLNF**
7置字符发生存贮器地址0001字符发生存贮器地址(自定义字符)
8置数据存贮器地址001显示数据存贮器地址(在哪里显示)
9读忙标志或地址01BF计算器地址
10写数到 CGRAM 或 DDRAM10要写的数据内容(显示什么)
11从 CGRAM 或 DDRAM 读数11读出的数据内容

  1602 液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。(说明: 1 为高电平、 0 为低电平)

  **指令 1:**清显示,指令码 01H,光标复位到地址 00H 位置。
  **指令 2:**光标复位,光标返回到地址 00H。
  **指令 3:**光标和显示模式设置。 I/D:光标移动方向,高电平右移,低电平左移。 实际上就是控制从左到右写入还是从右至左的写入顺序。 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 S=1 当写一个字符,整屏显示左移(ID=1)或者右移(I/D=0),以得到光标不移动而屏幕移动的效果。 S=0 当写一个字符,整屏显示不移动。
  **指令 4:**显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示. C:控制光标的开与关,高电平表示有光标,低电平表示无光标. B:控制光标是否闪烁, 高电平闪烁,低电平不闪烁。
  **指令 5:**光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 R/L:文字或者光标移动方向, R 表示右移, L 表示左移。
  **指令 6:**功能设置命令 DL:高电平时为 8 位总线,低电平时为 4 位总线。 N:低电平时为单行显示,高电平时双行显示。 F:低电平时显示 5×8 的点阵字符,高电平时显示 5×10的点阵字符。
  **指令 7:**字符发生器 RAM 地址设置。
  指令 8: DDRAM 地址设置。
  **指令 9:**读忙信号和光标地址。 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
  **指令 10:**写数据。
  **指令 11:**读数据。

2.LCD在一个位置显示一个字母的逻辑

2.1在哪里显示

在这里插入图片描述

  例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是

  **01000000B(40H)+10000000B(80H)=11000000B(C0H)。**

2.2显示的是什么

  1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同的点阵字符图形, 如表 3 所示,这些字符有:阿拉伯数字英文字母的大小写常用的符号,和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字符“A”的代码是 01000001B(41H), 显示时模块把地址 41H 中的点阵字符图形显示出来,我们就能看到字母“A”

在这里插入图片描述

  我们可以发现上表中字符“a”的高位为0110,低位为0001,高位低位组合一下,便知道其16进制数为61十进制数为97。刚好是字符“a”ASSII码。所以1602字符码是ASSII码,那么显示一个字符就可以在代码中直接定义一个字符。

2.4如何解决D0到D7既要传输字符位置信息又要传输字符数据信息

  可以通过第 4 脚: RS 寄存器来解决,当高电平时选择数据寄存器、 低电平时选择指令寄存器。也就是说RS=1,就是传输字符数据,RS=0时就是传送字符位置信息。

3.LCD1602写时序分析

3.1写时序图与写时序参数

  • 写时序图

在这里插入图片描述

  • 时序参数

在这里插入图片描述

3.2写时序图分析

在这里插入图片描述

4.编程实现LCD1602显示字符C

4.1编程实现LCD1602显示字符C的核心思路

  • 配置LCD1602数据引脚D0D7
  • 配置LCD1602控制引脚RSRWEN
  • 根据写时序图配置LCD1602指令和写数据函数
  • 根据读时序图配置LCD1602检测信号函数
  • 根据LCD1602手册一般初始化(复位)过程建立LCD609初始化函数
  • 主函数整合

4.2配置LCD1602数据引脚D0到D7

  • 使用51单片机P0口来传输LCD1602的字符地址位置

  • 代码如下

//数据线定义
//D0到D7 -- P0.1到P0.7
#define dataBuffer P0

4.3配置LCD1602控制引脚RS、RW、EN

  • 使用51单片机的P1.0口接RSP1.1口接RWP1.4口接EN
  • 代码如下
//控制线定义
/*
RS--P1.0
RW--P1.1
EN--P1.4
*/
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;

4.4根据写时序图配置LCD1602写指令和写数据函数

  • 写指令和写数据函数的时序都是一样的,只有RS的值不一样,RS=0写指令RS=1是写数据
  • 时序图代码注解

在这里插入图片描述

  • 写指令函数
void writeCmd(char cmd)
{       checkBusy();       //检测忙信号RS = 0;            //RS等于零,是写指令操作RW = 0;            //RW在手册中写的时序图是可以全程低电平EN = 0;            //根据手册中的写时序图,EN开始为低电平_nop_();           //执行空函数等待EN拉高dataBuffer = cmd;  //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1;            //根据手册中的写时序图,EN被拉高_nop_();           //执行空函数等待tpw和tF高电平过程_nop_();EN = 0;            //根据手册中的写时序图,EN被拉低_nop_();           //根据手册中的写时序图,让EN保持一段时间的低电平(这里一定不要忘了延时)
}
  • 写数据函数
void weiteData(char cData)
{checkBusy();       //检测忙信号RS = 1;            //RS等于1,是写数据操作RW = 0;            //RW在手册中写的时序图是可以全程低电平EN = 0;            //根据手册中的写时序图,EN开始为低电平_nop_();           //执行空函数等待EN拉高dataBuffer = cData;  //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1;            //根据手册中的写时序图,EN被拉高_nop_();           //执行空函数等待tpw和tF高电平过程_nop_();EN = 0;            //根据手册中的写时序图,EN被拉低_nop_();           //根据手册中的写时序图,让EN保持一段时间的低电平
}

4.5根据读时序图配置LCD1602检测忙信号函数

  • 检测忙函数可以根据LCD1602手册中指令说明指令9进行配置请看1.4,此时会发现RW=1,那么就会用到读时序图
  • 因为要检测LCD1602数据位第8位的值是否为1来确定是否,所以会用到while循环来一直检测。也会用到十六进制的0x80来判断,因为0x80==(1000 0000)2。
  • 时序图代码解释

在这里插入图片描述

  • LCD1602检测忙信号函数
void checkBusy()
{char tmp   = 0x80;dataBuffer = 0x80;while(tmp & 0x80)    //只要dataBuffer中的第8位为1就为忙,因为BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。{RS = 0;            //根据手册中指令表可知RS=0,RW=1RW = 1;            //RW=1为读的操作,所以需要配置读的时序图EN = 0;            //根据手册中的写时序图,EN开始为低电平_nop_();           //执行空函数等待EN拉高EN = 1;            //根据手册中的读时序图,EN被拉高_nop_();           //执行空函数等待tpw和tF高电平过程_nop_();tmp = dataBuffer;  //读取dataBuffer中的忙信号EN = 0;            //根据手册中的写时序图,EN被拉低_nop_();           //根据手册中的写时序图,让EN保持一段时间的低电平}
}

4.6根据LCD1602手册一般初始化(复位)过程建立LCD609初始化函数

  • 手册相关内容

(1) 延时 15ms
(2) 写指令 38H(不检测忙信号)
(3) 延时 5ms
(4) 以后每次写指令,读/写数据操作均需要检测忙信号
(5) 写指令 38H:显示模式设置
(6) 写指令 08H:显示关闭
(7) 写指令 01H:显示清屏
(8) 写指令 06H:显示光标移动设置
(9) 写指令 0CH:显示开及光标设置

  • LCD609初始化函数
void initLCD1602()
{
//(1) 延时 15msDelay15ms();
//(2) 写指令 38H(不检测忙信号)writeCmd(0x38);
//(3) 延时 5msDelay5ms();
//(4) 以后每次写指令,读/写数据操作均需要检测忙信号
//(5) 写指令 38H:显示模式设置writeCmd(0x38);
//(6) 写指令 08H:显示关闭writeCmd(0x08);
//(7) 写指令 01H:显示清屏writeCmd(0x01);
//(8) 写指令 06H:显示光标移动设置writeCmd(0x06);
//(9) 写指令 0CH:显示开及光标设置writeCmd(0x0C);
}

4.7主函数整合

  • 主函数代码
void main()
{char address = 0x80 + 0x05;  //字符显示位置char cData   = 'C';          //显示的字符数据initLCD1602();               //初始化LCD1602writeCmd(address);           //写字符位置weiteData(cData);            //写字符数据}

4.8完整程序代码

#include "reg52.h"
#include "intrins.h"//数据线定义
//D0到D7 -- P0.1到P0.7
#define dataBuffer P0//控制线定义
/*
RS--P1.0
RW--P1.1
EN--P1.4
*/
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;void Delay15ms()		//@11.0592MHz
{unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i);
}void Delay5ms()		//@11.0592MHz
{unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i);
}void checkBusy()
{char tmp   = 0x80;dataBuffer = 0x80;while(tmp & 0x80)    //只要dataBuffer中的第8位为1就为忙,因为BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。{RS = 0;            //根据手册中指令表可知RS=0,RW=1RW = 1;            //RW=1为读的操作,所以需要配置读的时序图EN = 0;            //根据手册中的写时序图,EN开始为低电平_nop_();           //执行空函数等待EN拉高EN = 1;            //根据手册中的读时序图,EN被拉高_nop_();           //执行空函数等待tpw和tF高电平过程_nop_();tmp = dataBuffer;  //读取dataBuffer中的忙信号EN = 0;            //根据手册中的写时序图,EN被拉低_nop_();           //根据手册中的写时序图,让EN保持一段时间的低电平}
}void writeCmd(char cmd)
{       checkBusy();       //检测忙信号RS = 0;            //RS等于零,是写指令操作RW = 0;            //RW在手册中写的时序图是可以全程低电平EN = 0;            //根据手册中的写时序图,EN开始为低电平_nop_();           //执行空函数等待EN拉高dataBuffer = cmd;  //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1;            //根据手册中的写时序图,EN被拉高_nop_();           //执行空函数等待tpw和tF高电平过程_nop_();EN = 0;            //根据手册中的写时序图,EN被拉低_nop_();           //根据手册中的写时序图,让EN保持一段时间的低电平
}void weiteData(char cData)
{checkBusy();       //检测忙信号RS = 1;            //RS等于1,是写数据操作RW = 0;            //RW在手册中写的时序图是可以全程低电平EN = 0;            //根据手册中的写时序图,EN开始为低电平_nop_();           //执行空函数等待EN拉高dataBuffer = cData;  //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1;            //根据手册中的写时序图,EN被拉高_nop_();           //执行空函数等待tpw和tF高电平过程_nop_();EN = 0;            //根据手册中的写时序图,EN被拉低_nop_();           //根据手册中的写时序图,让EN保持一段时间的低电平
}void initLCD1602()
{
//(1) 延时 15msDelay15ms();
//(2) 写指令 38H(不检测忙信号)writeCmd(0x38);
//(3) 延时 5msDelay5ms();
//(4) 以后每次写指令,读/写数据操作均需要检测忙信号
//(5) 写指令 38H:显示模式设置writeCmd(0x38);
//(6) 写指令 08H:显示关闭writeCmd(0x08);
//(7) 写指令 01H:显示清屏writeCmd(0x01);
//(8) 写指令 06H:显示光标移动设置writeCmd(0x06);
//(9) 写指令 0CH:显示开及光标设置writeCmd(0x0C);
}void main()
{char address = 0x80 + 0x05;  //字符显示位置char cData   = 'C';          //显示的字符数据initLCD1602();               //初始化LCD1602writeCmd(address);           //写字符位置weiteData(cData);            //写字符数据}

5.编程实现LCD1602显示一行

5.1编程实现LCD1602显示一行核心思路

  • 定义一个空类型名为LCD1602ShowARow的函数,形参为字符型的行字符型的列字符型的指针变量str
  • 运用C语言中的选择语句switch来选择哪行显示。
  • 整体算法见代码

5.2定义一个空类型名为LCD1602ShowARow的函数,形参为字符型的行,字符型的列,字符型的指针变量str。

void LCD1602ShowARow(char line,char column,char *str)

5.3运用C语言中的选择语句switch来选择哪行显示。

switch(line)
{case 1:break;case 2:break;
}

5.4整体算法见代码

void LCD1602ShowARow(char line,char column,char *str)
{switch(line) //选择哪行显示{case 1:                                        //第一行显示writeCmd(0x80 + column);                   //选择哪个位置显示,因为位置地址的最高位必须为1,所以0x80+列数while(*str)                                //判断字符串指针变量不为空执行循环,不用判断字符串结束标志{weiteData(*str);                         //发送字符串单个字符str++;                                   //字符串指针变量偏移}break;case 2:                                        //第二行显示writeCmd(0x80 + 0x40 + column);            //选择哪个位置显示,因为位置地址的最高位必须为1,所以0x80+列数,又因为第二行的列从0x40开始while(*str)                                //所以是从0x80 + 0x40 + 列数(特别注意){                     weiteData(*str);str++;}break;}
}

5.5完整程序代码

#include "reg52.h"
#include "intrins.h"//数据线定义
//D0到D7 -- P0.1到P0.7
#define dataBuffer P0//控制线定义
/*
RS--P1.0
RW--P1.1
EN--P1.4
*/
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;void Delay15ms()		//@11.0592MHz
{unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i);
}void Delay5ms()		//@11.0592MHz
{unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i);
}void checkBusy()
{char tmp   = 0x80;dataBuffer = 0x80;while(tmp & 0x80)    //只要dataBuffer中的第8位为1就为忙,因为BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。{RS = 0;            //根据手册中指令表可知RS=0,RW=1RW = 1;            //RW=1为读的操作,所以需要配置读的时序图EN = 0;            //根据手册中的写时序图,EN开始为低电平_nop_();           //执行空函数等待EN拉高EN = 1;            //根据手册中的读时序图,EN被拉高_nop_();           //执行空函数等待tpw和tF高电平过程_nop_();tmp = dataBuffer;  //读取dataBuffer中的忙信号EN = 0;            //根据手册中的写时序图,EN被拉低_nop_();           //根据手册中的写时序图,让EN保持一段时间的低电平}
}void writeCmd(char cmd)
{       checkBusy();       //检测忙信号RS = 0;            //RS等于零,是写指令操作RW = 0;            //RW在手册中写的时序图是可以全程低电平EN = 0;            //根据手册中的写时序图,EN开始为低电平_nop_();           //执行空函数等待EN拉高dataBuffer = cmd;  //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1;            //根据手册中的写时序图,EN被拉高_nop_();           //执行空函数等待tpw和tF高电平过程_nop_();EN = 0;            //根据手册中的写时序图,EN被拉低_nop_();           //根据手册中的写时序图,让EN保持一段时间的低电平
}void weiteData(char cData)
{checkBusy();       //检测忙信号RS = 1;            //RS等于1,是写数据操作RW = 0;            //RW在手册中写的时序图是可以全程低电平EN = 0;            //根据手册中的写时序图,EN开始为低电平_nop_();           //执行空函数等待EN拉高dataBuffer = cData;  //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1;            //根据手册中的写时序图,EN被拉高_nop_();           //执行空函数等待tpw和tF高电平过程_nop_();EN = 0;            //根据手册中的写时序图,EN被拉低_nop_();           //根据手册中的写时序图,让EN保持一段时间的低电平
}void initLCD1602()
{
//(1) 延时 15msDelay15ms();
//(2) 写指令 38H(不检测忙信号)writeCmd(0x38);
//(3) 延时 5msDelay5ms();
//(4) 以后每次写指令,读/写数据操作均需要检测忙信号
//(5) 写指令 38H:显示模式设置writeCmd(0x38);
//(6) 写指令 08H:显示关闭writeCmd(0x08);
//(7) 写指令 01H:显示清屏writeCmd(0x01);
//(8) 写指令 06H:显示光标移动设置writeCmd(0x06);
//(9) 写指令 0CH:显示开及光标设置writeCmd(0x0C);
}void LCD1602ShowARow(char line,char column,char *str)
{switch(line) //选择哪行显示{case 1:                                        //第一行显示writeCmd(0x80 + column);                   //选择哪个位置显示,因为位置地址的最高位必须为1,所以0x80+列数while(*str)                                //判断字符串指针变量不为空执行循环,不用判断字符串结束标志{weiteData(*str);                         //发送字符串单个字符str++;                                   //字符串指针变量偏移}break;case 2:                                        //第二行显示writeCmd(0x80 + 0x40 + column);            //选择哪个位置显示,因为位置地址的最高位必须为1,所以0x80+列数,又因为第二行的列从0x40开始while(*str)                                //所以是从0x80 + 0x40 + 列数(特别注意){                     weiteData(*str);str++;}break;}
}void main()
{initLCD1602();               //初始化LCD1602LCD1602ShowARow(1,6,"MaGe"); LCD1602ShowARow(2,2,"You Handsome");}

5.6 LCD1602接收字符串时不必担心光标偏移问题,LCD1602会自动偏移。

结束语

  很高兴您能看到这里,点个赞再走呗。谢谢您啦!!!

这篇关于人生绕不开一台LCD1602,虽然它比较丑,接的线也比较多。#非标协议【上】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676143

相关文章

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

关键字synchronized、volatile的比较

关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随着JDK新版本的发布,synchronized关键字的执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。多线程访问volatile不会发生阻塞,而synchronize

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备