当前位置: 首页 > news >正文

2021-04-22 51单片机玩转点阵

理论就不赘述了,网络上多得很,直接从仿真软件感性上操作认识点阵,首先打开ISIS仿真软件,放置一个点阵和电源与地线就可以开始了;由点阵任何一脚连线到地线,另一边对应的引脚就连接到电源,如图:点击运行看是否点亮?看到蓝色与红色的点表示电源正常但是没有任何亮点,这时对调一下电源与接地的连线或者反转一下点阵删除原来的连线后重新连接后运行可见点亮了点阵中的一个LED了,有时打开以前电路图,运行程序595驱动点阵显示全亮不显示字符,也要把点阵反转重新连接引脚。接下来连接上排另一引脚到电源试看,可见点亮了2个LED点,把上排第二引脚连线删除,连接下排第二个引脚试看,可见也点亮了2个LED点,由此可以推导出有2种接法:若要显示一个文字可以使用竖式也可以使用横式,取模软件对应的可以有这样的数据;而用横还是用竖则决定了哪一边接成数据,哪一边接成位,对应的单片机IO组就要送数据和位的信号了.

比如说要让点阵竖的一排都点亮,那么,就把下排当作数据,而上排对应的引脚就成为了位,如图;如果连接上排第二引脚到电源会怎样?仿真不伤电子元件的,可大胆一试如图;这样就点亮了2条竖线了,由此可以推导上排引脚都连接起来则整个点阵就都亮起来了,同理横式的就是反过来使用即上排为数据下排为位,因此,显示文字就有了竖式和横式,引脚的连线自上而下还是自下而上,自左而右还是自右而左后面讨论.显示文字或图像就是要控制哪些点亮哪些不亮就能组成文字或图像了.

到了这里是否有跃跃欲试的感觉?当然有了,那就来用单片机连接来控制点阵,首先连接电路如图点击运行试看没任何点亮,是因为还没有写一个字的代码,也没下载程序到单片机内,而单片机默认的引脚都是高电平的,除了P0组是开漏外,因此,P0组显示的不是红色和蓝色的,红色代表电源,蓝色代表接地.

接着找到一个字的数据,如:首先弄明白数据的类型,如边上的注释是我猜测的,事实上我也不知道这2个数组内容到底是什么,不过没关系,可以通过辅助工具看个大概这2组8个数据到底是什么,是否像注释的一样,这些数据来自问贴求问大佬为什么我的代码无法让8*8的led点阵点亮  用的是普中的板子?-编程语言-CSDN问答.

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位

打开电脑上的计算器,选项到程序员,如图,那如何在计算器上输入数据查看?首先看第一组8个数据,发现有数字也有字符,通常有字符的可推断为16进制,16进制内容是这样:0123456789ABCDEF,看数组内有FE字符即可断定,当然有经验的看到数据由0x也可断定是16进制数据,想了解的0x详情的自行摆渡去,不赘述了,0x后面2个就是数据了,因此,在计算器上点击按钮F和E,当然,得先在计时器上选16进制才能数人字符,输入字符后会是什么?如图,看到的是1111 1110正好对应一组IO的8个引脚的高低电平,再输入另外的数据试看,这样一看通常就是数据组了;

当然也不急,可再看第二数组,按顺序弄3个试看,可看到其中的0在移动,由显示可推测是位控制数据.

由上查看数组,并结合点阵引脚点亮的电平,可用来确定数据送给哪组IO从而完成显示文字。由上面点亮点阵可知0(低电平)点亮的竖式,因此,可确定第一组数据送点阵上排引脚,第二组数据送点阵下排引脚,点阵上排连接单片机P2组因此写代码时送给P2,点阵下排连接单片机P3组,同理写代码时送P3。
好,大致了解并初步确定之后,新建这个单片机代码工程,复制之上代码,写一个单片机运行的空循环代码,如下。由于引用了头文件REG52因此可以直接使用IO组,不需要再写声明IO组。

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{while(1){}
}

精彩正式开始了,先试着送2个数组内的数据给点阵试看会如何?添加代码如下,并下载到仿真中后点击运行仿真,看到点阵都没亮,只看到点阵引脚有红色和蓝色的点。

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{P2=shuju[0];P3=sjwei[0];while(1){}
}


为了方便,修改代码用变量作为数组的索引,这样就改变一个变量的值也就同时改变了对数组索引的数据的使用,修改如下:

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{unsigned char b=1;P2=shuju[b];P3=sjwei[b];while(1){}
}

编译代码工程后下载到仿真,运行:

鹅鹅,这回看到点阵显示2个点了,哈哈,同时由之上的试验可以对比到为何出现2个点看计算器的BF和82图片,接下来把代码移动到循环内运行8个数据,看会如何?修改如下:

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{unsigned char b=1;while(1){P2=shuju[b];P3=sjwei[b];if(++b>7)b=0;}
}

编译代码工程后下载到仿真,运行:鹅鹅鹅,看到图形了,是个文字H?还是图形车轮?从演示可以看到引脚电平变化;

逐一测试问贴数据,并采用了消隐措施,看图会发现不同的地方。
 

 接下来编写3组数据循环自动切换显示:当然可以不断添加数据组。

#include<reg52.h>//头文件unsigned char code shuju[][8]={{0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00}, {0x18,0x24,0x12,0x12,0x12,0x24,0x18,0x00}, {0x00,0x7C,0x02,0x02,0x02,0x7C,0x00,0x00}};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{unsigned char b=0, j=0, xd=0, h=0;unsigned int ys=0;while(1){P2=shuju[j][b];P3=sjwei[b];while(++xd);//显示延时P3=255;//换位消隐if(++b>7)b=0;if(++ys>=1747){ys=0;if((++j)>=3)j=0;}}
}

 让文字移动起来:值计算替换数组节约空间使用。

使用2片595驱动点阵:兼顾回复单片机小白求助,三个74hc595控制三个lcd1602的设计思路 - 24小时必答区 
51蛋骗鸡-玩转点阵-595级联驱动-字幕移动实例资源 - 24小时必答区

#include<reg52.h>//头文件sbit ds=P1^0;//数据线  595的14脚
sbit shcp=P1^1;//数据输入时钟线 595的11脚
sbit stcp=P1^2;//输出存储器锁存时钟线 595的12脚
sbit mr=P1^3;//数据清零unsigned char code shuju[]={
0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00,0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00,0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,
0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00,0x18,0x24,0x12,0x12,0x12,0x24,0x18,0x00,
0x00,0x7C,0x02,0x02,0x02,0x7C,0x00,0x00
};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位,用移位函数,移位运算符,数字.
unsigned int QY(unsigned char sj, unsigned char jz)
{return (sj-sj/jz*jz);
}
void QuDong595(unsigned char sj)
{unsigned char aa=8;while(aa--){ds=sj>>7;sj<<=1;//十六进制数据发送
//		ds=QY(sj,2);sj/=2;//十进制数据发送shcp=1;//上升沿发生移位 上升沿时数据寄存器的数据锁存。shcp=0;}stcp=0;      stcp=1;//上升沿将数据送到输出锁存器   stcp=0;
}void main()
{unsigned char b=0, j=0, xd=0, h=0;	unsigned int ys=0;while(1){P2=shuju[b+j];P3=sjwei[b];QuDong595(shuju[b+j]);QuDong595(sjwei[b]);//%256while(++xd);//显示延时P3=255;//换位消隐mr=0;mr=1;if(++b>7)b=0;if(++h==0)//切换数据延时+显示延时if((++j)>=8*6)j=0;}
}

数据%256 QuDong595(~shuju[(7-b)+(8*8-j)]);

 数据7-b,7-b+j

利用取整特性求余提高速度,利用询问式提高速度,都能充分减少时间占用,提高时间支配能力。调换数据与位发送顺序取反。

使用硬件消隐,仿真接太多了,以至于发生不能完整显示转向去掉LED排后正常,花费很多时间排查

相关文章:

2021-04-22 51单片机玩转点阵

理论就不赘述了,网络上多得很,直接从仿真软件感性上操作认识点阵,首先打开ISIS仿真软件,放置一个点阵和电源与地线就可以开始了;由点阵任何一脚连线到地线,另一边对应的引脚就连接到电源,如图:点击运行看是否点亮?看到蓝色与红色的点表示电源正常但是没有任何亮点,这时对调一下…...

lua入门教程:数字

在Lua中&#xff0c;数字&#xff08;number&#xff09;是一种基本数据类型&#xff0c;用于表示数值。以下是对Lua中数字的详细教程&#xff1a; 一、数字类型概述 Lua中的数字遵循IEEE 754双精度浮点标准&#xff0c;可以表示非常大的正数和负数&#xff0c;以及非常小的正…...

[CKS] K8S ServiceAccount Set Up

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于Rolebinding的题目。 Question 1 The buffy Pod in the sunnydale namespace has a buffy-sa ServiceAccount with permissions the Pod doesn’t need. Modify the attached Role so that it onl…...

QML:Menu详细使用方法

目录 一.性质 二.作用 三.方法 四.使用 1.改变标签 2.打开本地文件 3.退出程序 4.打开Dialog 五.效果 六.代码 在 QML 中&#xff0c;Menu 是一个用于创建下拉菜单或上下文菜单的控件。它通常由多个 MenuItem 组成&#xff0c;每个 MenuItem 可以包含文本、图标和快捷…...

时间复杂度和空间复杂度 part2

一&#xff0c;空间复杂度 空间复杂度是衡量一个算法在执行过程中所需内存空间的量度。它反映了算法随着输入数据规模&#xff08;通常是 nn&#xff09;的增加&#xff0c;所消耗的内存量如何变化。空间复杂度是分析算法效率的一个重要方面&#xff0c;尤其是在内存资源有限的…...

【电机控制器】STC8H1K芯片——UART串口通信

【电机控制器】STC8H1K芯片——UART串口通信 文章目录 [TOC](文章目录) 前言一、UART1.串口初始化2.串口中断3.发送一个字节 二、实验1.原理图2.实验现象 三、参考资料总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、UART 1.串口初始化 …...

STM32移植RT-Thread---时钟管理

一RTT时钟节拍概念 RT-Thread的时钟节拍&#xff08;Tick&#xff09;是操作系统用于管理时间和任务调度的一个基本单位。它在实时操作系统中尤为关键&#xff0c;用于实现任务的延时、超时管理等功能。以下是关于RT-Thread时钟节拍的简单说明&#xff1a; 1.Tick定义&#x…...

Jasypt 实现 yml 配置加密

文章目录 前言一、集成 Jasypt1. pom 依赖2. yml 依赖 3. 加密工具类3. 使用二、常见问题1. application.yml 失效问题2. 配置热更新失败问题 前言 jasypt 官方地址&#xff1a;https://github.com/ulisesbocchio/jasypt-spring-boot Jasypt可以为Springboot加密的信息很多&a…...

uniapp—android原生插件开发(2原生插件开发)

本篇文章从实战角度出发&#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲&#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程&#xff0c;轻松应对安卓原生插件开发与打包需求&#xff01; ***环境问题移步至&#xff1a;uniapp—an…...

NLP之ASR之moonshine:moonshine的简介、安装和使用方法、案例应用之详细攻略

NLP之ASR之moonshine&#xff1a;moonshine的简介、安装和使用方法、案例应用之详细攻略 目录 moonshine的简介 moonshine的安装和使用方法 1、安装 推荐使用uv管理Python环境 安装Moonshine包 Torch后端 TensorFlow后端 JAX后端 ONNX运行时 2、使用方法 0、测试 1…...

albert模型实现微信公众号虚假新闻分类

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…...

OceanBase 应用实践:如何处理数据空洞,降低存储空间

问题描述 某保险行业客户的核心系统&#xff0c;从Oracle 迁移到OceanBase之后&#xff0c;发现数据存储空间出现膨胀问题&#xff0c;数据空间 datasize9857715.48M&#xff0c;实际存储占用空间17790702.00M。根据 required_mb - data_mb 值判断&#xff0c;数据空洞较为严重…...

计算机的错误计算(一百四十八)

摘要 本节探讨 MATLAB 中 附近数的正割函数与 附近数的余割函数的计算精度问题。 例1. 已知 计算 直接贴图吧&#xff1a; 另外&#xff0c;16位的正确值分别为 0.4105556037464873e9、0.3670813182326778e13、-0.2549029285657875e8 与 -0.1248777628817462e12&am…...

MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解

行级锁&#xff0c;每次操作锁住对应的行数据。锁定粒度最小&#xff0c;发生锁冲突的概率最低&#xff0c;并发度最高。 应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的&#xff0c;行锁是通过对索引上的索引项加锁来实现的&#xff0c;而不是对记录加的锁。 对于行…...

SLM401A系列42V商业照明线性恒流芯片 线性照明调光在LED模组及灯带智能球泡灯上应用

SLM401A系列型号选型&#xff1a; SLM401A10ED-7G:QFN1010-4 SLM401A15aa-7G:SOT23-3 SLM401A20aa-7G:SOT23-3 SLM401A20ED-7G:QFN1010-4 SLM401A25aa-7G:SOT23-3 SLM401A30aa-7G:SOT23-3 SLM401A40aa-7G:SOT23-3 SLM401A50aa-7G:SOT23-3 SLM401A6…...

京东零售推荐系统可解释能力详解

作者&#xff1a;智能平台 张颖 本文导读 本文将介绍可解释能力在京东零售推荐系统中的应用实践。主要内容包括以下几大部分&#xff1a;推荐系统可解释定义、系统架构、排序可解释、模型可解释、流量可解释。 推荐系统可解释定义 推荐系统可解释的核心包括三部分&#xff0…...

蓝桥杯 懒洋洋字符串--字符串读入

题目 代码 #include <iostream>using namespace std;int main(){int n;cin>>n;char s[210][4];int ans0;for(int i0;i<n;i){scanf("%s",s[i]);}for(int i0;i<n;i){char as[i][0];char bs[i][1];char cs[i][2];// cout<<a<< <<b…...

SDL打开YUV视频

文章目录 问题1&#xff1a;如何控制帧率&#xff1f;问题2&#xff1a;如何触发退出事件&#xff1f;问题3&#xff1a;如何实时调整视频窗口的大小问题4&#xff1a;YUV如何一次读取一帧的数据&#xff1f; 问题1&#xff1a;如何控制帧率&#xff1f; 单独用一个子线程给主线…...

微服务架构面试内容整理-Archaius

Archaius 是由 Netflix 开发的一个配置管理库,主要用于处理动态配置和环境配置。在微服务架构中,Archaius 允许开发者以灵活的方式管理配置,从而更好地应对变化的需求。以下是 Archaius 的主要特点、工作原理和使用场景: 主要特点 1. 动态配置: Archaius 支持动态更新配置…...

实现 Nuxt3 预览PDF文件

安装必要的库&#xff0c;这里使用PDF.js库 npm install pdfjs-dist --save 为了解决跨域问题&#xff0c;在server/api 下 创建一个请求api&#xff0c; downloadFileByProxy.ts import { defineEventHandler } from h3;export default defineEventHandler(async event >…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战&#xff1a;迈向安全内核的新篇章 ​​摘要&#xff1a;​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言&#xff0c;受限于 C 语言本身的内存安全和并发安全问题&#xff0c;开发复杂模块极易引入难以…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...