【雕爷学编程】Arduino动手做(133)---LCD1602扩展板模块

news2024/11/19 1:27:07

7款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十三:LCD1602 字符液晶屏 输入输出扩展板 LCD Keypad Shield

在这里插入图片描述

LCD

LCD 即 Liquid Crystal Display 的首字母缩写,意为“液态晶体显示器”,即液晶显示器。而 LED 显示器是指液晶显示器(LCD)中的一种,即以 LED(发光二极管)为背光光源的液晶显示器(LCD)。可见,LCD 是包括 LED的。与 LED 显示器相对应的实际上是 CCFL显示器。

工作原理

液晶从形状和外观看上去都是一种液体,但它的水晶式分子结构又表现出固体的形态。像磁场中的金属一样,当受到外界电场影响时,其分子会产生精确的有序排列;如对分子的排列加以适当的控制,液晶分子将会允许光线穿透;光线穿透液晶的路径可由构成它的分子排列来决定,这又是固体的一种特征。液晶是一种有机复合物,由长棒状的分子构成。在自然状态下,这些棒状分子的长轴大致平行。液晶屏(Liquid Crystal Display,以下简称LCD)第一个特点是必须将液晶灌入两个列有细槽的平面之间才能正常工作。这两个平面上的槽互相垂直(90度相交),也就是说,若一个平面上的分子南北向排列,则另一平面上的分子东西向排列,而位于两个平面之间的分子被强迫进入一种90度扭转的状态。由于光线顺着分子的排列方向传播,所以光线经过液晶时也被扭转90度。但当液晶上加一个电压时,分子便会重新垂直排列,使光线能直射出去,而不发生任何扭转。LCD的第二个特点是它依赖极化滤光片和光线本身,自然光线是朝四面八方随机发散的,极化滤光片实际是一系列越来越细的平行线。这些线形成一张网,阻断不与这些线平行的所有光线,极化滤光片的线正好与第一个垂直,所以能完全阻断那些已经极化的光线。 只有两个滤光片的线完全平行,或者光线本身已扭转到与第二个极化滤光片相匹配,光线才得以穿透。LCD正是由这样两个相互垂直的极化滤光片构成,所以在正常情况下应该阻断所有试图穿透的光线。但是,由于两个滤光片之间充满了扭曲液晶,所以在光线穿出第一个滤光片后,会被液晶分子扭转90度,最后从第二个滤光片中穿出。另一方面,若为液晶加一个电压,分子又会重新排列并完全平行,使光线不再扭转,所以正好被第二个滤光片挡住。以Synaptics TDDI技术为例,是将触摸控制器和显示驱动器整合到了单一芯片中,这减少了组件数量,简化了设计。ClearPad 4291支持混合多点内嵌式设计,因利用了液晶显示器(LCD)中的已有层,因而无需分立式触控传感器。ClearPad 4191又前进了一步,利用了LCD中已有的电极,因此实现了更加简洁的系统架构。这两款解决方案都使触控屏更薄、显示器更明亮,有助于改进智能手机和平板电脑设计的整体美学效果。对于反射式的TN(扭转向列型 Twisted Nematic)液晶显示器其构造由如下几层组成:极化滤光片、玻璃、相互绝缘又透明的纵横两组电极、液晶体、电极、玻璃、极化滤光片、反射片。
在这里插入图片描述
LCD1602

也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符,所以简称1602。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。由若干个5x7或者5x10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做到板子上。采用单+5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比。

在这里插入图片描述
LCD1602管脚功能

1602采用标准的16脚接口,其中:

第1引脚:GND为电源地

第2引脚:VCC接5V电源正极

第3引脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4引脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5引脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳

变时执行指令。

第7~14引脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电

源。

第15引脚背光正极,

第16引脚背光负极。

在这里插入图片描述
LCD1602 电原理图

在这里插入图片描述
LCD1602的指令说明

在这里插入图片描述
LCD Keypad Shield扩展板
是一款提供2行16字符液晶显示的Arduino扩展板。扩展了多个按键输入,可供用户作为LCD显示屏的菜单选择按键或者操控按键使用。一个扩展板就能让你与Arduino设备进行互动。我们还扩展Arduino Reset按键,方便用户进行软件调试。用户通过调节扩展板上的蓝色电位器,能够帮助您调节LCD屏的对比度。

对于Arduino初学者来说,不必为繁琐复杂液晶驱动电路连线而头疼了,这款LCD扩展板将电路简化,直接将此板插到Arduino Duemilanove 或 Uno控制器上即可使用,调用Arduino自带的LCD库,简单的几行代码便可以完成数据和字符的显示功能,有兴趣的朋友还能学习自定义显示内容。

在这里插入图片描述
LCD Keypad Shield扩展板技术规格

1602蓝色背景液晶(2行16字节)

具有LCD对比度调节功能

5个按键输入

扩展模拟信号传感器接口和数字口

ICSP编程接口

具有APC220,蓝牙V3接口

尺寸:58x80mm

模块应用

锅炉控制面板

机器人控制面板

环境监控设备

机械运行状态监控

在这里插入图片描述
LCD Keypad Shield扩展板模块电原理图

在这里插入图片描述
LCD Keypad Shield输入输出扩展板使用2行16个字符液晶,具有对比度调节和背光灯,使用1个模拟口便完成5个按键的输入,1个复位按键,未使用的IO口都扩展出来备用,充分利用IO口。占用数字端口:PIN4(DB4),5(DB5),6(DB6),7(DB7),8(RS),9(E),10(背光控制),模拟按键端口A0。

引脚定义

模拟A0 按钮(选择、向上、向右、向下和向左)

数字4 DB4

数字5 DB5

数字6 DB6

数字7 DB7

数字8 RS(数据或信号显示选择)

数字9 复位

数字10 背光控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百三十三:LCD1602 字符液晶屏 输入输出扩展板 LCD Keypad Shield

实验之一:这个程序用来测试LCD液晶显示模块和5个按键。

LiquidCrystal库:IDE—工具—管理库—搜索LiquidCrystal—安装

*/



#include <LiquidCrystal.h>

// 选择LCD上使用到的引脚

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// 定义各按键

int lcd_key    = 0;

int adc_key_in  = 0;

#define btnRIGHT  0

#define btnUP    1

#define btnDOWN  2

#define btnLEFT  3

#define btnSELECT 4

#define btnNONE  5

//读取按键值

int read_LCD_buttons()

{

adc_key_in = analogRead(0);      // 从模拟口0读值

// 直接读到的5个按键值在以下值附近:0,144,329,504,741

// 通过设定不同的阀值,就可以对应读到相应的按键

if (adc_key_in > 1000) return btnNONE;

if (adc_key_in < 50)  return btnRIGHT;  

if (adc_key_in < 250)  return btnUP;

if (adc_key_in < 450)  return btnDOWN;

if (adc_key_in < 650)  return btnLEFT;

if (adc_key_in < 850)  return btnSELECT;  

// V1.0的版本使用以下的阀值:

/*

if (adc_key_in < 50)  return btnRIGHT;  

if (adc_key_in < 195)  return btnUP;

if (adc_key_in < 380)  return btnDOWN;

if (adc_key_in < 555)  return btnLEFT;

if (adc_key_in < 790)  return btnSELECT;  

*/

return btnNONE;

}

void setup()

{

lcd.begin(16, 2);          // 开始

lcd.setCursor(0,0);

lcd.print("Push the buttons"); // 输出“Push the buttons”

}

void loop()

{

lcd.setCursor(9,1);        // 光标定在第二行,空开9格

lcd.print(millis()/1000);    // 输出等待时间

lcd.setCursor(0,1);        // 光标移动到第二行开头

lcd_key = read_LCD_buttons();  // 读取按键

switch (lcd_key)          // 选择按键

{

  case btnRIGHT:

    {

    lcd.print("RIGHT ");

    break;

    }

  case btnLEFT:

    {

    lcd.print("LEFT  ");

    break;

    }

  case btnUP:

    {

    lcd.print("UP  ");

    break;

    }

  case btnDOWN:

    {

    lcd.print("DOWN  ");

    break;

    }

  case btnSELECT:

    {

    lcd.print("SELECT");

    break;

    }

    case btnNONE:

    {

    lcd.print("NONE  ");

    break;

    }

}

}

Arduino实验场景图

在这里插入图片描述
按下不同按键的输出显示

在这里插入图片描述
Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百三十三:LCD1602 字符液晶屏 输入输出扩展板 LCD Keypad Shield

  实验之二:ADC密钥测试

  LiquidCrystal库:IDE—工具—管理库—搜索LiquidCrystal—安装

*/



#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

char msgs[5][16] = {"Right Key OK ",

              "Up Key OK  ",

              "Down Key OK  ",

              "Left Key OK  ",

              "Select Key OK"

            };

int adc_key_val[5] = {50, 200, 400, 600, 800 };

int NUM_KEYS = 5;

int adc_key_in;

int key = -1;

int oldkey = -1;

void setup()

{

  lcd.clear();

  lcd.begin(16, 2);

  lcd.setCursor(0, 0);

  lcd.print("ADC key testing");

}

void loop()

{

  adc_key_in = analogRead(0);  // 从A0传感器端读取值

  key = get_key(adc_key_in);  // 转换为按键

  if (key != oldkey)  // 如果检测到按键

  {

  delay(50);  // 等待解除缓冲时间

  adc_key_in = analogRead(0);  // 从A0传感器端读取值

  key = get_key(adc_key_in);  // 转换为按键

  if (key != oldkey)

  {

    lcd.setCursor(0, 1);

    oldkey = key;

    if (key >= 0) {

      lcd.print(msgs[key]);

    }

  }

  }

  delay(100);

}

// 将ADC值转换为密钥号

int get_key(unsigned int input)

{

  int k;

  for (k = 0; k < NUM_KEYS; k++)

  {

  if (input < adc_key_val[k])

  {

    return k;

  }

  }

  if (k >= NUM_KEYS)k = -1;  // 未按下有效键

  return k;

}

Arduino实验场景图

在这里插入图片描述
实验开源仿真编程(Linkboy V4.62)

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FDTD Solutions基础到精通,适用于微纳光学领域光学器件、超表面的仿真

专题二&#xff1a; “ FDTD 时域有限差分数值模拟方法与应用 课 程 内 容 FDTD基础入门 1 FDTD Solutions 求解物理问题的方法 1.1 FDTD与麦克斯韦方程 1.2 FDTD中的网格化 2 FDTD Solutions 特点与应用 3 FDTD功能与使用 主窗口——CAD人机交互界面计算机辅助设计…

SQL Server Management Studio (SSMS) 指定端口Port连接, 用逗号, 例如: localhost,1433

Microsoft SQL Server Management Studio (SSMS) 指定端口连接, 用,逗号, 例如 localhost,1433 localhost 等效 localhost,(逗号&#xff09;1433

使用项目跟踪工具,让项目管理更高效,使用项目管理工具的好处

为了确保项目按照预期规划完成&#xff0c;项目经理必须跟踪每个活动的进度。 项目跟踪是贯穿整个项目生命周期的重要活动&#xff0c;它可以通过有效的方式清晰地了解项目的实际进展情况。 项目管理工具可以帮助项目管理者实时跟踪项目状态&#xff0c;及时发现问题并跟踪解…

【springboot整合】Springboot和RedisCache

前面介绍了CacheAutoConfiguration默认生效的是SimpleCacheConfiguration配置类&#xff0c;实际中我们更多的是利用redis作为缓存&#xff0c;现在我们继续看看RedisCacheConfiguration有什么不同 原理分析 在引入redis相关依赖之后&#xff0c;对应的RedisCacheConfiguratio…

基于BS架构的汽车销售管理系统(源码+文档+报告+安装环境)

如今&#xff0c;越来越多的人愿意选择一种适合自己的管理方案&#xff0c;随着线上管理系统的快速兴起&#xff0c;大量的车辆信息被人们所熟知&#xff0c;而4S店车辆管理系统无疑是对4S店车辆进行管理的最好的系统。4S店车辆系统&#xff0c;为用户提供了一种可以让他们更好…

(16)燃油流量和液位传感器

文章目录 前言 16.1 燃油流量传感器 16.1.1 连接到自动驾驶仪 16.2 燃油液位传感器 16.2.1 PWM油位传感器 16.2.2 模拟油位传感器 前言 在 4.0 及以后的固件版本中&#xff0c;ArduPilot 提供了使用燃油流量和液位传感器的能力&#xff0c;此外还有电池监控器。支持脉冲输…

MongoDB复制集原理

复制集简介 Mongodb复制集由一组Mongod实例&#xff08;进程&#xff09;组成&#xff0c;包含一个Primary节点和多个Secondary节点&#xff0c;Mongodb Driver&#xff08;客户端&#xff09;的所有数据都写入Primary&#xff0c;Secondary从Primary同步写入的数据&#xff0…

Flink-窗口源码

滚动窗口底层只有一个窗口&#xff0c;每次用for循环&#xff0c;把前面过期的数据移除&#xff0c;留下的数据再进行计算 滑动窗口的时间窗口&#xff0c;是有多个window的&#xff0c;因为有重叠的数据 计数窗口、计数滑动窗口&#xff0c;底层只有一个窗口 会话窗口只有一…

视频融合平台EasyCVR电子地图增加鼠标悬停展示经纬度

EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可…

结合底层源码介绍ConcurrentHashMap如何保证线程安全,佬会爱上这篇文章嘛

前言&#xff1a; 本篇文章主要讲解结合底层源码介绍ConcurrentHashMap如何保证线程安全的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了…

周鸿祎晒出清华大学研究生录取通知书:终于考上了

周鸿祎晒出清华大学研究生录取通知书 IT之家获悉&#xff0c;近日&#xff0c;360公司创始人、董事长周鸿祎在微博上晒出了自己的清华大学研究生录取通知书&#xff0c;并称&#xff1a;“终于考上了&#xff0c;感谢360智脑的老师们&#xff0c;希望360智脑能帮助我顺利毕业&a…

【Python笔记】之-bash: python: command not found

问题&#xff1a; 在服务器环境&#xff0c;使用python命令时提示&#xff1a;-bash: python: command not found 查看服务器python版本&#xff0c;一般是在/usr/bin目录下&#xff0c;在终端输入命令如下&#xff1a; find /usr/bin -iname python*得到输出&#xff1a; …

C# OpenCvSharp 图像校正

效果 Demo下载 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Extensions;nam…

解决在IDEA中Ctrl+Y快捷键失效问题

之前我们一般使用CtrlY的方式删除当前行&#xff0c;但是有的时候这个快捷键就会被其他软件占用&#xff0c;就需要我们重新配置一下&#xff1a; 1、点击IDEA中的设置 2、点击Keymap—>Editor Actions 3、往下翻&#xff0c;双击Delete Line&#xff0c;再点击Add Keyboar…

【Opencv】PIL Opencv 向图片写入文字并旋转文字,Opencv图片旋转不截断,Opencv图片旋转不裁剪

文章目录 失真Pillow的实现Opencv的实现不裁剪的旋转图像旋转文字并贴图 失真 刚性变换&#xff1a; 只有物体的位置(平移变换)和朝向(旋转变换)发生改变&#xff0c;而形状不变&#xff0c;得到的变换称为刚性变换。刚性变换是最一般的变换。 使用透视变换&#xff0c;文字会…

Multi-Query Attention 阅读笔记

《Fast Transformer Decoding: One Write-Head is All You Need》 核心贡献&#xff1a;优化 multi-head attention 为文中命名的 multi-query attention&#xff0c;减少多head相关运算&#xff0c;不降低精度 且 大幅提升解码速度。 具体对比如下&#xff1a; multi-head a…

win下编译ycm报错 “could not find any instance of Visual Studio” 解决办法

ycm-core/YouCompleteMe: A code-completion engine for Vim 是一款vim插件&#xff0c;可为不同的代码类型提供语义级别的补全能力。 问题描述 通过vim-plug插件管理器安装ycm后&#xff0c;还需对进入其插件目录~\vimfiles\plugged\YouCompleteMe 进行编译python .\install…

分类预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入分类预测

分类预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入分类预测 目录 分类预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多…

DS18B20-STM32温度读取

command data 高地位组合即为温度数据 1. 初始化时钟 void Init_DS18B20(void) {char CY 1;while (CY){DQ_OUT();DQ_SET_H(); delay_us(20); DQ_SET_L(); //送出低电平复位信号delay_us(360); //延时至少480usdelay_us(240);DQ_SET_H(); …