(学习日记)2023.4.12

news2024/9/19 13:15:50

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

2023.4.12

  • 一、51:LED点阵屏图形
  • 二、 Keil:`ERROR L107: ADDRESS SPACE OVERFLOW`
  • 三、51:LED点阵屏显示汉字动画

一、51:LED点阵屏图形

  1. 74HC595
    在这里插入图片描述
  2. 设置引脚变量
sbit RCK=P3^5;		//RCLK
sbit SCK=P3^6;		//SRCLK
sbit SER=P3^4;		//SER

#define MATRIX_LED_PORT		P0	// 点阵屏数据口连接到P0
  1. 编写 字节写入函数
    这个函数用来向74HC595芯片中写入一个字节的数据.
    具体来说,是将8位二进制数依次通过SER引脚输入到74HC595芯片中,然后通过SCKRCK控制信号输出到点阵屏中。
    这个函数在程序中被调用来实现点阵屏的数据显示
/**
  * @brief  74HC595写入一个字节
  * @param  Byte 要写入的字节
  * @retval 无
  */
void _74HC595_WriteByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SER=Byte&(0x80>>i);		// 逐位写入字节
		SCK=1;					// 时钟上升沿,数据被移位
		SCK=0;					// 时钟下降沿
	}
	RCK=1;						// 上升沿时,将数据存储到寄存器中
	RCK=0;						// 下降沿,保持RCK管脚为低电平
}
  1. 编写 初始化函数
    这个函数用来初始化点阵屏的控制引脚,即将RCKSCKSER信号全部初始化为0
/**
  * @brief  点阵屏初始化
  * @param  无
  * @retval 无
  */
void MatrixLED_Init()
{
	SCK=0;		// 置SCK管脚为低电平
	RCK=0;		// 置RCK管脚为低电平
}
  1. 编写 数据显示函数
    这个函数用来显示一个指定列的数据
    其中,参数Column是要显示的列的序号,范围为0~70表示最左边的列,7表示最右边的列;参数Data是该列的数据,是一个8位二进制数,高位在上,1表示点亮0表示熄灭
    这个函数在内部会调用_74HC595_WriteByte函数将Data写入到74HC595芯片中,并通过P0口来控制点阵屏的列选信号,从而实现在指定列显示指定的数据。
/**
  * @brief  LED点阵屏显示一列数据
  * @param  Column 要选择的列,范围:0~7,0在最左边
  * @param  Data 选择列显示的数据,高位在上,1为亮,0为灭
  * @retval 无
  */
void MatrixLED_ShowColumn(unsigned char Column,unsigned char Data)
{
	_74HC595_WriteByte(Data);			// 向74HC595写入要显示的数据
	MATRIX_LED_PORT=~(0x80>>Column);	// 设置要显示的列
	Delay_ms(1);						// 延时一段时间以显示出效果
	MATRIX_LED_PORT=0xFF;				// 清除要显示的列的数据
}

二、 Keil:ERROR L107: ADDRESS SPACE OVERFLOW

  1. 原因:
    这个错误是由于芯片的数据段(DATA)空间不足而导致的。
    在代码中,有一些变量或数组被存储在数据段中,但是这个芯片的数据段大小是有限制的,超过限制就会导致这个错误。

  2. 解决办法1:删变量
    单片机的RAM不够,但变量太多,所以删掉一些不重要的变量就ok

  3. 解决办法2:修改保存位置
    在这里插入图片描述
    Small改成 Compact Large,其中:

  • DATA:指的是内部RAM的默认存储区域。在Keil中,该区域的变量被分配在数据段中,也就是由CPU直接寻址的RAM中。这意味着,这些变量的寻址速度比较快,但是存储容量较小,通常只有几百个字节
  • PDATA:指的是片内可编程RAM(Programmable Data Memory),也称为P-RAM或小数据RAM。这是一种在内部RAM之外的额外存储区域,可以用于存储在程序中定义的常量和变量。P-RAM 的优点是访问速度比外部存储器快,但是存储容量相对较小。在Keil中,变量分配在P-RAM中,可以通过编译器和链接器配置来控制。
  • XDATA:指的是片外扩展RAM的存储区域,可以扩展内部RAM的存储容量。X-RAM通常用于需要大量存储空间的应用程序。在Keil中,变量分配在X-RAM中,可以通过编译器和链接器配置来控制。

三、51:LED点阵屏显示汉字动画

  1. 上述使用的MatrixLED_ShowColumn只能每次输出一列,那样程序将无比的冗长
    我们需要用数组来实现一次输出8列(因为点阵是 8*8
/**
  * @brief  LED点阵屏按列显示八列数据
  * @param  Data 选择列显示的数组,共八个数
  * @retval 无
  */
void MatrixLED_ShowData(unsigned char *Data)
{
	unsigned char i = 0;
	while(i<8)
		{
		MatrixLED_ShowColumn(i, Data[i]);
		i++;
	}
}

就可以通过如下来调用使用了:

unsigned char Data[]={0xff, 0x28, 0x7e, 0x6a, 0x6a, 0x66, 0x42, 0x7e};

运行发现,这是个横着的 西

  1. 中文点阵生成软件
    可以使用这个网站获得汉字的Data[]值。

目前是网上能搜到的最好用的一个

  1. 将文字显示横过来
    若觉得文字横着不好看,可以用下面的函数把文字显示横过来。
/**
  * @brief  将LED阵列沿对角线翻转
  * @param  Data 选择列显示的数组,共八个数
  * @retval 无
  */
void row2col(unsigned char *Data)
{
	unsigned char i = 0;
	unsigned char j = 0;
	unsigned char temp = 0;

	// 对于每列数据,遍历每个字节
	for (i = 0; i < 8; i++) 
		for (j = 0; j < i; j++) 
		{
			// 获取原始数据中当前列对应的位和行对应的位
			temp = (Data[j] >> (7 - i)) & 0x01;
			
			// 将原始数据中当前列对应的位和行对应的位交换
			// 如果原始数据中行对应的位为1,则将列对应的位也设为1
			// 否则,将列对应的位设为0
			((Data[i] >> (7 - j)) & 0x01) ? (Data[j] |= (1 << (7 - i))) : (Data[j] &= ~(1 << (7 - i)));
			
			// 如果原始数据中列对应的位为1,则将行对应的位也设为1
			// 否则,将行对应的位设为0
			(temp) ? (Data[i] |= (1 << (7 - j))) : (Data[i] &= ~(1 << (7 - j)));
		}
}
  1. 快速显示文字动画
    main.c 如下
#include <main.h>

void main()
{
	// 修改区
	unsigned char num = 5;		//字的数量
	unsigned char Data[][8]={
	{0x3c, 0xea, 0xff, 0x2a, 0x3a, 0xe5, 0x2f, 0x73},
	{0x7c, 0x7c, 0x44, 0x7c, 0xff, 0x5e, 0x70, 0xbf},
	{0x28, 0x7f, 0x53, 0xe4, 0xd6, 0x57, 0x65, 0x4c},
	{0x2c, 0x6e, 0x38, 0xc7, 0x7c, 0x7c, 0x46, 0x7e},
	{0x2c, 0x6e, 0x38, 0xc7, 0x7c, 0x7c, 0x46, 0x7e}
	};
	
	//程序变量(无需修改)
	unsigned char i=0;
	unsigned char delay=0;
	unsigned char time=50;
	
	for(i=0; i<num; i++)
		row2col(Data[i]);

	while(1)
	{
		for(i=0; i<num; i++)
		{
			while(delay++ != time)
			{
				MatrixLED_ShowData(Data[i]);
				Delay_ms(1);
			}
			delay=0;
		}
	}
}

将网站生成代码复制到 Data[][8]中,加上逗号,再更改num,即可快速显示一段文字动画。
在这里插入图片描述

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

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

相关文章

在线安装rancher2.4管理K8S集群并部署服务

条件&#xff1a; 1. 准备至少3台机器&#xff1b; 2. 三台机器需要有网络&#xff1b; 3. 安装rancher和K8S集群&#xff1b; # master节点 [rootlocalhost ~]# hostnamectl set-hostname k8s-master && bash [rootk8s-master ~]# hostname k8s-master [rootk8s-ma…

【面试】Mysql主键索引普通索引索引和唯一索引的区别是什么?

前言 在 MySQL 中, 索引是在存储引擎层实现的, 所以并没有统⼀的索引标准, 由于 InnoDB 存储引擎在 MySQL数据库中使⽤最为⼴泛, 下⾯以 InnoDB 为例来分析⼀下其中的索引模型.在 InnoDB 中, 表都是根据主键顺序以索引的形式存放的, InnoDB 使⽤了 B 树索引模型&#xff0c;所…

WAF攻防-信息收集识别被动探针代理池仿指纹白名单

文章目录信息收集常见检测&#xff1a;信息收集常见方法&#xff1a;信息收集-被动扫描-黑暗引擎&三方接口信息收集-工具扫描-Awvs&Xray&Goby内置信息收集常见检测&#xff1a; 1、脚本或工具速度流量快 2、脚本或工具的指纹被识别 3、脚本或工具的检测Payload 信…

013:Mapbox GL添加marker

第013个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加marker。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共70行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xiaozhu…

重装系统需要做的事

1 设置小鹤双拼 winr 输入regedit&#xff0c;定位到「计算机\HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Settings\CHS」 右键新建新建字符串值 数值名称&#xff1a;UserDefinedDoublePinyinScheme0 数值数据&#xff1a;小鹤双拼2*iuvdjhcwfgxmlnpbksqszxkrltvyovt …

css 使用blur,实现背景色高斯模糊,但不影响背景上的内容

实现效果 实现原理 1.filter&#xff1a;blur() 2.伪元素设置&#xff0c;不影响子元素显示 <!-- 库位使用率 --><div class"bkPart statusPart"><div class"co-title">库位使用率</div><div class"pickPos"><…

【RocketMQ】顺序消息实现原理

全局有序 在RocketMQ中&#xff0c;如果使消息全局有序&#xff0c;可以为Topic设置一个消息队列&#xff0c;使用一个生产者单线程发送数据&#xff0c;消费者端也使用单线程进行消费&#xff0c;从而保证消息的全局有序&#xff0c;但是这种方式效率低&#xff0c;一般不使用…

CDH6.3.2大数据集群生产环境安装(九)之部署flink1.13.2客户端

添加flink用户(可选,这里是因为公司需要这个参数所以才添加;所有节点都添加上,省事) 29.1. 添加 useradd flink部署flink客户端 选择一个集群节点作为客户端部署节点,这里选择zcpt-prd-bigdata-worker-01节点 30.1. 上传资源 flink-1.13.2-bin-scala_2.12.tgz 30.2. 解压…

Docker容器的官方镜像仓库

一、 官方镜像仓库介绍 镜像仓库分类 公有仓库 私有仓库 官方镜像仓库属于公有仓库 网址: hub.docker.com 网站名称:dockerhub 注册邮箱 创建仓库 创建自己的仓库 登录仓库 web界面登录 linux命令行登录 直接docker login 输入用户名和密码 这个自己创建的存储库一…

PID控制算法基础知识

PID控制算法基础知识 本文为PID控制算法的基础介绍 文章目录PID控制算法基础知识一、算法概述二、控制器的P、I、D项总结一、算法概述 PID是一个闭环控制算法。要实现PID算法&#xff0c;必须在硬件上具有闭环控制&#xff0c;就是需要有反馈。例如控制一个电机的转速&#xf…

RabbitMQ基础核心概念

目标&#xff1a; 了解RabbitMQ的核心概念 学习步骤&#xff1a; 1、模型概念 2、Producer (生产者) 、 Consumer(消费者) 3、Exchange (交换机) 4、Queue (消息队列) 5、Broker&#xff08;服务节点&#xff09; 6、RabbitMQ的五种工作模式 一、模型概念 说白了&#xff0c;R…

OldWang带你了解MySQL(八)

文章目录&#x1f525;聚合函数&#x1f525;AVG 和 SUM 函数&#x1f525;MIN 和 MAX 函数&#x1f525;COUNT 函数&#x1f525;数据分组(GROUP BY)&#x1f525;在多列上使用分组&#x1f525;约束分组结果(HAVING)&#x1f525;子查询&#x1f525;单行子查询&#x1f525;…

4月数据结构面试复习

目录 字节数 (278条消息) 数据结构保研面试题整理&#xff08;自用&#xff09;_推免面试数据结构问题_乌鸡摸鱼的博客-CSDN博客 https://zhuanlan.zhihu.com/p/138046349https://zhuanlan.zhihu.com/p/255030352计算机数据结构面试常问问题&#xff08;适合考研复试&#xff…

Redis7

Redis之父安特雷兹 Redis7概述 Redis:Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c;例如String、Hash、List、Set、SortedSet等等。数据是存在内…

云原生个人线路 Docker容器化

声明&#xff1a;此文章为博主个人学习记录&#xff0c;仅供学习和交流&#xff0c;如有侵权请联系博主。 Docker 基于Linux 内核的Cgroup&#xff0c;Namespace&#xff0c;以及Union FS等技术&#xff0c;对进程进行封装隔离&#xff0c;属于操作系统层面的虚拟化技术&#x…

Windows权限提升—MySQL数据库提权

Windows权限提升—MySQL数据库提权1. 前言2. 数据库提权介绍2.1. 常见数据库端口2.2. MySQL数据库提权条件2.3. MySQL数据库提权类型3. MySQL中UDF提权3.1. UDF提权介绍3.2. UDF提权思路3.3. UDF提权步骤3.3.1. 获取外连数据库3.3.1.1. 外连数据库3.3.1.2. 连接数据库3.3.1.3. …

python+vue 基于推荐算法的在线电影视播放网站

以广大影视剧迷们为研究对象&#xff0c;深入了解影视剧迷对在线视频观看视频的需求进行分析&#xff0c;形成系统需求分析设计一个符合影视剧迷们需求的在线视频网站。设计网站的前期工作包括对系统的各个功能进行详细分析&#xff0c;对数据库设计进行详细的描述&#xff0c;…

hadoop之MapReduce框架原理

目录 MapReduce框架的简单运行机制&#xff1a; Mapper阶段&#xff1a; InputFormat数据输入&#xff1a; 切片与MapTask并行度决定机制&#xff1a; job提交过程源码解析&#xff1a; 切片逻辑&#xff1a; 1&#xff09;FileInputFormat实现类 进行虚拟存储 &#x…

9.Nuxt.js的使用

九.Nust.js的使用 1.什么是SEO 2.百度的搜索结果 3.服务器端和客户端渲染 4.Nuxt.js技术简介 5.Nuxt.js的路由&#xff08;使用提供的nuxt-app项目初始化&#xff09; 6.Nuxt.js的页面布局和整体配置 7.Nuxt.js整合axios 九.Nust.js的使用 1.什么是SEO ①SEO SEO是通…

elasticSearch数据存储与搜索基本原理

1.缘起&#xff1a; 为啥想学习es&#xff0c;主要是在工作中会用到&#xff0c;但是因为不了解原理&#xff0c;所以用起来畏手畏脚的&#xff0c;就想了解下es是怎么存储数据&#xff0c;以及es是怎么搜索数据的&#xff0c;我们平时应该如何使用es&#xff0c;以及使用时候…