LED点阵屏与LCD1602

news2024/11/16 16:21:30

目录

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
  • 指令数据都有执行时间,因此每次写入数据后都需要延时一段时间,否则会出错。

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

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

相关文章

使用libibverbs构建RDMA应用

本文是对论文Dissecting a Small InfiniBand Application Using the Verbs API所做的中英文对照翻译 Dissecting a Small InfiniBand Application Using the Verbs API Gregory Kerr∗ College of Computer and Information ScienceNortheastern UniversityBoston, MAkerrgccs…

三防笔记本丨工业笔记本电脑丨助力测绘行业的数字化转型

测绘行业测绘行业一直是高度技术化的领域&#xff0c;其重要性在于为建设、规划和资源管理提供准确的地理数据。然而&#xff0c;随着技术的发展&#xff0c;传统的测绘方法已经难以满足对数据精度和实时性的要求。因此&#xff0c;测绘行业正逐渐向数字化转型&#xff0c;采用…

唯美首页纯静态html5引导页源码,格子化win8风格官方引导页面源码

唯美首页纯静态html5引导页源码&#xff0c;格子化win8风格官方引导页面源码&#xff0c;喜欢的朋友可以拿去使用 源码下载 唯美首页纯静态html5引导页源码

Rust 基础语法和数据类型

数据类型 Rust提供了一系列的基本数据类型&#xff0c;包括整型&#xff08;如i32、u32&#xff09;、浮点型&#xff08;如f32、f64&#xff09;、布尔类型&#xff08;bool&#xff09;和字符类型&#xff08;char&#xff09;。此外&#xff0c;Rust还提供了原生数组、元组…

记忆的方法 简单易行的记忆技巧:归纳整理,联想,重点标注压缩,改错,留痕记念(去个地方买个特别能长久保留的纪念品),差异

记忆的方法有很多&#xff0c;以下是一些简单易行的记忆技巧&#xff1a; 分类整理&#xff1a;将需要记忆的信息进行分类&#xff0c;这样可以帮助你更好地组织和记忆信息。例如&#xff0c;尝试记住一组词语时&#xff0c;可以将它们按照类别或相关性分组。归纳整理。间隔重…

mysql的安装和部署

##官网下载mysql 我下载的是一个mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 可以通过xshell 或者xftp传送 xshell则是先下载一个lrzsz 执行以下的命令 yum install lrzsz -y #安装好我下面有个一键安装的脚本 #!/bin/bash#解决软件的依赖关系 yum install cmake ncurses…

LangChain学习笔记—RAG(检索增强生成)

LangChain LangChain是一个软件开发框架&#xff0c;可以更轻松地使用大型语言模型&#xff08;LLM&#xff09;创建应用程序。它是一个具有 Python 和 JavaScript 代码库的开源工具。LangChain 允许开发人员将 GPT-4 等 LLM 与外部数据相结合&#xff0c;为聊天机器人、代码理…

代理IP在爬虫中的连接复用与开销减少

目录 一、引言 二、代理IP的基本概念 三、代理IP在爬虫中的使用 四、代理IP的连接复用 五、减少开销的策略 六、代码示例与注释 七、总结 一、引言 在爬虫开发中&#xff0c;代理IP的使用是常见的做法&#xff0c;尤其在目标网站设置了反爬虫机制时。代理IP能够帮助爬虫…

【鸿蒙 HarmonyOS】获取设备的地理位置

一、背景 获取移动设备的地理位置&#xff0c;包含&#xff1a;经度、维度、具体地理位置等&#xff0c;地理位置信息能在许多业务场景中被应用&#xff0c;如导航、地图服务、位置服务、社交媒体等。 下面以一个Demo例子&#xff0c;来实现获取设备地理位置的功能 官方文档…

27.WEB渗透测试-数据传输与加解密(上)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;26.WEB渗透测试-BurpSuite&#xff08;五&#xff09; BP抓包网站网址&#xff1a;http:…

经济学 赋税

赋税&#xff1a; 1.为政府服务提供金钱来源 2. 用于保护环境 3.帮助国家使用财政和货币政策&#xff0c;推动经济增长 4.再分配社会财富的一种方式&#xff0c;平衡富人和穷人的贫富差距 5.帮助我们支付市场自身可能无法实现的服务&#xff0c;比如公共安全&#xff0c;国…

Day105:代码审计-PHP原生开发篇SQL注入数据库监控正则搜索文件定位静态分析

目录 代码审计-学前须知 Bluecms-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-2次注入审计分析 知识点&#xff1a; 1、PHP审计-原生态开发-SQL注入&语句监控 2、PHP审计-原生态开发-SQL注入&正则搜索 3、PHP审计-原生态开发-SQ…

全力推进Copilot,微软抽调Teams团队精英

据 Business Insider 网站报道&#xff0c;他们获得的一份俺们微软内部备忘录显示&#xff0c;说俺们微软正在建立一个专门团队&#xff0c;负责俺们家的 Copilot 及其相关产品的后续开发工作。 该备忘录由俺们微软人工智能业务副总裁贾里德・斯帕塔罗&#xff08;Jared Spata…

【201】Java8读取JSON树形结构并插入到MySQL数据库表中

我写了一个 maven 项目的 Demo&#xff0c;用来演示 JAVA8 如何读取 JSON 文件树形结构&#xff0c;并将这种树形结构保存到 MySQL 中。 json文件 city.json {"name": "山东省","sub": [{"name": "青岛市","sub"…

【蓝桥杯嵌入式】RTC——实时时钟

一、RTC简介 RTC RTC—real time clock&#xff0c;实时时钟&#xff0c;主要包含日历、闹钟和自动唤醒这三部分的功能&#xff0c;其中的日历功能我们使用的最多。日历包含两个32bit的时间寄存器&#xff0c;可直接输出时分秒&#xff0c;星期、月、日、年。 从Cubemx里的配置…

【OpenCV】图像算术操作

1 前言 介绍图像算术操作&#xff0c;以及其可以实现的图像亮度、对比度调整效果。相关API&#xff1a; add() subtract() multiply() divide() addWeighted() 2 代码及内容 #include "iostream" #include "opencv2/opencv.hpp"using namespace std…

成都源聚达:抖音小店押金收费标准

在数字浪潮中&#xff0c;抖音小店如星辰般熠熠生辉&#xff0c;吸引了无数商家和创业者。然而&#xff0c;想要在这片星海中畅游&#xff0c;首先得了解其押金的收费标准。正如古人言&#xff1a;“无规矩不成方圆”&#xff0c;明确规则是成功的关键一步。 抖音小店的押金制度…

java爬虫入门程序

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…

vue2+element-ui 实现OSS分片上传+取消上传

遇到问题&#xff1a;项目中需要上传500MB以上的视频。一开始使用上传组件el-upload&#xff0c;调用后台接口&#xff0c;但是出现了onprogress显示百分百后接口一直pending&#xff0c;过了很多秒后接口才通&#xff0c;如果遇到大文件的话&#xff0c;接口就会报超时。 解决…

批量复制空白文件夹,轻松管理文件,高效办公新选择

在繁忙的办公环境中&#xff0c;文件管理是提升工作效率的关键。想象一下&#xff0c;你需要为每一个新项目、新任务或新客户创建一个新的文件夹来整理和存储相关文件。手动一个一个地创建文件夹不仅耗时&#xff0c;而且容易出错。现在&#xff0c;我们为你带来一个全新的解决…