LED点阵屏与LCD1602

目录

LED点阵屏

点阵屏的介绍

LED点阵屏分类

点阵屏的显示原理

点阵案例

静态案例

电路图

keil文件

动态案例

电路图

keil文件

LCD1602

LCD1602概述

LCD1602内部结构

存储器结构

LCD引脚及应用电路

时序结构

LCD1602指令集

LCD1602编程

初始化

显示字符

仿真案例

电路图

keil文件

LED点阵屏

点阵屏的介绍

前言:LED点阵屏由若干个独立的LED组成,LED以矩阵的行式排列,以灯珠亮灭来显示文字、图片、视频等。

LED点阵屏分类

  • 按颜色:单色、双色、全彩
  • 按像素:8*8、16*16等(大规模的LED点阵通常由很多个小点阵拼接而成)

点阵屏的显示原理

  • LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以8字型排列而已
  • LED点阵屏与数码管一样,有共阴极和共阳极两种接法,不同的接法对应的电路结构不同
  • LED点阵屏需要进行逐行和逐列扫描,才能使所有LED同时显示

点阵案例

静态案例

需求:通过开关控制电阵屏上0-9的数字显示。

电路图

注意:P2是行,低电平有效;P3是列,高电平有效。

keil文件
#include "reg51.h"
sbit key=P1^0;
#用来在行的基础下做列显示——高电平有效
unsigned char code tab[]={
	0x00,0x7E,0xFF,0xC3,0xC3,0xFF,0x7E,0x00, //0
	0x00,0x00,0x43,0xFF,0xFF,0x03,0x00,0x00, //1
	0x00,0x63,0xC7,0xCF,0xDB,0xF3,0x63,0x00, //2
	0x00,0x42,0xDB,0xDB,0xDB,0xFF,0x66,0x00, //3
	0x00,0x3E,0x46,0xFF,0xFF,0x06,0x06,0x00, //4
	0x00,0xF6,0xF7,0xD3,0xD3,0xDF,0xDE,0x00, //5
	0x00,0x7E,0xFF,0xDB,0xDB,0xDF,0x4E,0x00, //6
	0x00,0xC0,0xC0,0xC7,0xFF,0xF8,0xC0,0x00, //7
	0x00,0x7E,0xFF,0xDB,0xDB,0xFF,0x7E,0x00, //8
	0x00,0x72,0xFB,0xDB,0xDB,0xFF,0x7E,0x00, //9
};
unsigned char row[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char num=0,flag=0;
void keyboard(){
	if(flag==0&&key==0){ //按键按下
		flag=1;
	}
	if(flag==1&&key==1){ //按键按下并且松手
		num++;
		flag=0;
	}
	if(num==10){
		num=0;
	}
}
void matrix(){
	int i=0;
	for(i=8*num;i<8*(num+1);i++){
		P2=~row[i-8*num]; //确定行,低电平有效
		P3=tab[i]; //确定列,高电平有效
	}
}
void main()
{
	while(1)
	{
		keyboard(); //按键盘
		matrix(); //显示点阵屏
	}
}

注意:此代码采用了逐行扫描的方式,通过行与行之间的延时将整个图画显示出来。

动态案例

需求:在点阵中动态显示移动字幕hello!

电路图

keil文件
#include "reg51.h"
unsigned char str[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0x08,0x08,0x08,0xff,0x00,0x0e,0x15,
0x15,0x15,0x08,0x00,0x7e,0x01,0x02,0x00,
0x7e,0x01,0x02,0x00,0x0e,0x11,0x11,0x0e,
0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char offset=0;
void main()
{
	unsigned char i=0,offset=0,n=10;
	while(1)
	{
		while(n--){
			for(i=0;i<8;i++){
				P2=~(0x80>>i);
				P3=str[i+offset];
			}
		}
		offset++;
		if(offset>40){
			offset=0;
		}
	}
}

LCD1602

LCD1602概述

  • LCD1602液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其他的一些内置特殊字符,还可以有8个自定义字符
  • 显示容量:16*2个字符,每个字符为5*2点阵
  • LCD1602是一个自带控制和扫描电路的,我们显示时只需要通过数据线将我们要显示的内容发送给它就行

LCD1602内部结构

解释:

  • LCD1602中的屏幕由32个小方块组成,其中每个小方块都属于一个点阵 
  • LCD1602的引脚都接在控制器中。
  • 里面由两个存储单元,CGRAM和CGROM,其相当于数码管中的段码表
  • DDRAM数据显示区,我们想要让他显示的数据是写在DDRAM中,然后他会通过DDRAM中的数据来向子模库找到相应字符的一个显示点阵的字模,然后再在屏幕对应的位置上显示我们的点阵数据。
  • DDRAM是40*2的会比屏幕长些(用于做移动字幕),但是他只有前16列(32块)映射到了屏幕上

存储器结构

注意:

  • DDRAM就是一个RAM存储器,存储器内部都有对应屏幕位置的地址;第一行对应屏幕第一行的地址;第二行对应屏幕第二行的地址。 
  • 80个字节的显示缓冲区DDRAM(原始地址:0x80),分2行,地址分别为00H——27H,40H——67H
  • 要在LCD的某个位置显示符号,只需要将显示符号的ASCII码存入DDRAM的对应位置即可
  • 在CG存储器中我们想要显示某个数据只需要填写他的索引码就行,就是字符对应横排的码与字符对应纵排的码连接组成索引码

LCD引脚及应用电路

时序结构

理解:我们在读数据之前要把RS设置为高电平,RW杠置高电平(因为RS=1,RW=1为读数据)之后将e置位高电平,经过一段时间后,那么内部就会把读出来的数据放入,持续一段时间后再把e置低,那么我们的一次读数据就完成了。 

理解:我们在写数据之前要把RS设置为高电平,RW杠置低电平(因为RS=1,RW=0为写数据)之后再把我们要写的一字节数据放在我们的对应口,当把这些数据设置好之后将e置位高电平,此时数据便是有效的,持续一段时间后再把e置低,那么我们的一次写数据就完成了。

LCD1602指令集

LCD1602编程

初始化

发送指令:0x38设置16*2显示,5*7点阵,8位数据接口
发送指令:0x0C设置开显示,不显示光标,闪烁关
发送指令:0x06数据读写操作后,光标自动+1,画面不动
发送指令:0x01清屏指令

显示字符

  • 发送指令0x80|AC:设置要显示字符的位置 

  • 发送数据:发送显示的字符数据

仿真案例

需求:通过LCD液晶屏幕在第二行的正中间显示Hello World!

电路图

keil文件

#include "reg51.h"
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;
unsigned char str[]={"Hello World!"};
void delay(unsigned int n){
	unsigned int i=0,j=0;
	for(i=0;i<n;i++){
		for(j=0;j<120;j++);
	}
}
#写指令
void writecom(unsigned char com){
	RS=0;
	RW=0;
	E=0;
	P2=com;
	delay(5);
	E=1;
	E=0;
}
#写数据
void writedat(unsigned char dat){
	RS=1;
	RW=0;
	E=0;
	P2=dat;
	delay(5);
	E=1;
	E=0;
}
#初始化液晶屏
void initlcd(){
	writecom(0x38);
	writecom(0x0c);
	writecom(0x06);
	writecom(0x01);
}
void display(){
	unsigned int i=0;
	writecom(0x80+0x40+2);
	delay(5);
	while(str[i]!='\0'){
		writedat(str[i]);
		delay(5);
		i++;
	}
}
void main(){
	initlcd();
	while(1){
		display();
	}
}

注意:

  • 实际地址在发送之前要把他的最高位置1,代表它是一个地址设置的指令。
  • 第一行第一列显示的地址:0x80+0x00;第二行第一列显示的地址:0x80+0x40
  • 指令数据都有执行时间,因此每次写入数据后都需要延时一段时间,否则会出错。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端三剑客 —— CSS (第五节)

目录 内容回顾&#xff1a; 特殊样式 特殊样式 CSS变量 常见函数 倒影效果 页面布局 Table 布局&#xff08;了解即可&#xff09; DIVCSS布局 弹性布局 1&#xff09;不使用弹性布局&#xff0c;而是使用DIVCSS 2&#xff09;使用弹性布局实现导航菜单 内容回顾…

中非绿色能源合作走深走实

近日&#xff0c;第十六届非洲能源大会在南非立法首都开普敦举行&#xff0c;探讨实现非洲能源转型的可持续解决方案。近年来&#xff0c;中国与非洲国家不断加强绿色能源合作&#xff0c;促进双方优势资源互补&#xff0c;逐步探索合作共赢的绿色能源合作方案。 势头良好 近年…

SystemC入门学习Demo用例的工程化配置

背景&#xff1a;对不同的用例文件&#xff0c;使用CMakeLists.txt进行工程化管理的演示&#xff0c;这样开发者可以更加关注在代码开发上。 1&#xff0c;首先安装好系统环境的systemC库&#xff1a;ubuntu系统安装systemc-2.3.4流程-CSDN博客 2&#xff0c;准备好一个demo用…

开源免费的MySQL和MariaDB图形化管理软件

2024年4月7日&#xff0c;周日凌晨 有很多开源免费的MySQL和MariaDB图形化管理界面可供选择。 以下是一些常用的工具&#xff1a; phpMyAdmin&#xff1a;phpMyAdmin 是一个用 PHP 编写的免费开源的 MySQL 和 MariaDB 管理工具&#xff0c;它提供了一个基于 Web 的界面&#…

PCF8591(ADDA转换芯片)

工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行IC总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程&#xff0c;允许在同个I2C总线上接…

软件测试下的AI之路(4)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

数控机床采集网关助力企业实现智能化生产-天拓四方

随着工业4.0时代的到来&#xff0c;智能制造成为制造业转型升级的重要方向。数控机床作为制造业的核心设备&#xff0c;其数据采集与监控对于提升生产效率、优化生产流程具有重要意义。本案例将介绍数控机床采集网关的应用&#xff0c;通过该网关实现数控机床数据的实时采集、传…

IP地址证书怎么申请?

在数字化时代&#xff0c;网络空间的安全与稳定至关重要。其中&#xff0c;IP地址作为互联网通信的基础标识&#xff0c;其安全认证则依赖于一项重要工具——IP地址证书。本文将深入探讨IP地址证书的概念、作用以及其在网络安全防护中的重要意义。 一、IP地址证书的作用 身份验…

Java设计模式—策略模式(商场打折)

策略这个词应该怎么理解&#xff0c;打个比方说&#xff0c;我们出门的时候会选择不同的出行方式&#xff0c;比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等&#xff0c;这些出行方式&#xff0c;每一种都是一个策略。 再比如我们去逛商场&#xff0c;商场现在正在搞活动&…

设计模式总结-桥接模式

桥接模式 模式动机模式定义模式结构模式分析桥接模式实例与解析实例一&#xff1a;模拟毛笔 模式优缺点 模式动机 设想如果要绘制矩形、圆形、椭圆、正方形&#xff0c;我们至少需要4个形状类&#xff0c;但是如果绘制的图形需要具有不同的颜色&#xff0c;如红色、绿色、蓝色…

MySQL-基本SQL语句编写:运算符练习

运算符练习 1.选择工资不在5000到12000的员工的姓名和工资 SELECT last_name,salary FROM employees #where salary not between 5000 and 12000; WHERE salary < 5000 OR salary > 12000;2.选择在20或50号部门工作的员工姓名和部门号 SELECT last_name,department_id…

蓝桥杯算法题:卡片换位

问题描述 你玩过华容道的游戏吗&#xff1f;这是个类似的&#xff0c;但更简单的游戏。 看下面 2 x 3 的格子 --------- | A | * | * | --------- | B | | * | --------- 1 2 3 4 5 在其中放 5 张牌&#xff0c;其中 A 代表关羽&#xff0c;B 代表张飞&#xff0c;* 代表士兵…

【Erlang】【RabbitMQ】Linux(CentOS7)安装Erlang和RabbitMQ

一、系统环境 查版本对应&#xff0c;CentOS-7&#xff0c;选择Erlang 23.3.4&#xff0c;RabbitMQ 3.9.16 二、操作步骤 安装 Erlang repository curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash安装 Erlang package s…

CMake学习笔记(三)区分macro与function

目录 共同点--形式类似 macro的形式 function的形式 不同点 1 输入参数的替换阶段不同 macro function 2 输入参数作用域不同 macro function 共同点--形式类似 macro的形式 macro(宏名 输入参数名).... endmacro() function的形式 function(函数名 输入参数名).…

如何确认ip地址?一步步教会你

在数字化和网络化的时代&#xff0c;IP地址作为设备的网络标识&#xff0c;扮演着至关重要的角色。无论是个人用户还是企业网络管理员&#xff0c;掌握如何确认IP地址的方法都显得尤为重要。虎观代理将全面介绍如何确认IP地址&#xff0c;并深入探讨其背后的原理和意义。 首先&…

RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表

RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表 文章目录 RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表1. MQTT概览2. MQTT 5.0 特性1. 特性概要2. Docker中安装RabbitMQ及启用MQTT5.0协议 3. MQTT 5.0 功能列表1. 消息过期1. 描述2. 举例3. 实现 2. 订阅标识…

Linux网卡与IP地址:通往网络世界的通行证

在探索Linux网卡和IP地址的关系之前&#xff0c;我们得先理解Linux网卡是怎么工作的。想象一下&#xff0c;每台计算机都是一个世界&#x1f30e;&#xff0c;而网卡就是连接这些世界的门户&#x1f6aa;。网卡的工作就是接收和发送数据包&#xff0c;就像邮差&#x1f4ec;递送…

还在担心报表不好做?不用怕,试试这个方法(三)

系列文章&#xff1a; 《还在担心报表不好做&#xff1f;不用怕&#xff0c;试试这个方法》&#xff08;一&#xff09; 《还在担心报表不好做&#xff1f;不用怕&#xff0c;试试这个方法》&#xff08;二&#xff09; 概要 在上一篇文章《还在担心报表不好做&#xff1f;…

C++数据结构与算法——回溯算法排列问题

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

SV学习笔记(六)

文章目录 覆盖率类型写在前面代码覆盖率断言覆盖率功能覆盖率漏洞率曲线 功能覆盖策略收集信息而非数据只测量需要的内容验证的完备性 覆盖组写在前面在类里定义covergroup 数据采样写在前面coverpoint和binbin的创建和应用命名coverpoint和bin条件覆盖率翻转覆盖率wildcard覆盖…