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中,数字(number)是一种基本数据类型,用于表示数值。以下是对Lua中数字的详细教程: 一、数字类型概述 Lua中的数字遵循IEEE 754双精度浮点标准,可以表示非常大的正数和负数,以及非常小的正…...

[CKS] K8S ServiceAccount Set Up
最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于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 中,Menu 是一个用于创建下拉菜单或上下文菜单的控件。它通常由多个 MenuItem 组成,每个 MenuItem 可以包含文本、图标和快捷…...

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

【电机控制器】STC8H1K芯片——UART串口通信
【电机控制器】STC8H1K芯片——UART串口通信 文章目录 [TOC](文章目录) 前言一、UART1.串口初始化2.串口中断3.发送一个字节 二、实验1.原理图2.实验现象 三、参考资料总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、UART 1.串口初始化 …...
STM32移植RT-Thread---时钟管理
一RTT时钟节拍概念 RT-Thread的时钟节拍(Tick)是操作系统用于管理时间和任务调度的一个基本单位。它在实时操作系统中尤为关键,用于实现任务的延时、超时管理等功能。以下是关于RT-Thread时钟节拍的简单说明: 1.Tick定义&#x…...
Jasypt 实现 yml 配置加密
文章目录 前言一、集成 Jasypt1. pom 依赖2. yml 依赖 3. 加密工具类3. 使用二、常见问题1. application.yml 失效问题2. 配置热更新失败问题 前言 jasypt 官方地址:https://github.com/ulisesbocchio/jasypt-spring-boot Jasypt可以为Springboot加密的信息很多&a…...

uniapp—android原生插件开发(2原生插件开发)
本篇文章从实战角度出发,将UniApp集成新大陆PDA设备RFID的全过程分为四部曲,涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程,轻松应对安卓原生插件开发与打包需求! ***环境问题移步至:uniapp—an…...
NLP之ASR之moonshine:moonshine的简介、安装和使用方法、案例应用之详细攻略
NLP之ASR之moonshine:moonshine的简介、安装和使用方法、案例应用之详细攻略 目录 moonshine的简介 moonshine的安装和使用方法 1、安装 推荐使用uv管理Python环境 安装Moonshine包 Torch后端 TensorFlow后端 JAX后端 ONNX运行时 2、使用方法 0、测试 1…...

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

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

计算机的错误计算(一百四十八)
摘要 本节探讨 MATLAB 中 附近数的正割函数与 附近数的余割函数的计算精度问题。 例1. 已知 计算 直接贴图吧: 另外,16位的正确值分别为 0.4105556037464873e9、0.3670813182326778e13、-0.2549029285657875e8 与 -0.1248777628817462e12&am…...

MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解
行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。 应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。 对于行…...

SLM401A系列42V商业照明线性恒流芯片 线性照明调光在LED模组及灯带智能球泡灯上应用
SLM401A系列型号选型: 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…...

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

蓝桥杯 懒洋洋字符串--字符串读入
题目 代码 #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:如何控制帧率?问题2:如何触发退出事件?问题3:如何实时调整视频窗口的大小问题4:YUV如何一次读取一帧的数据? 问题1:如何控制帧率? 单独用一个子线程给主线…...
微服务架构面试内容整理-Archaius
Archaius 是由 Netflix 开发的一个配置管理库,主要用于处理动态配置和环境配置。在微服务架构中,Archaius 允许开发者以灵活的方式管理配置,从而更好地应对变化的需求。以下是 Archaius 的主要特点、工作原理和使用场景: 主要特点 1. 动态配置: Archaius 支持动态更新配置…...
实现 Nuxt3 预览PDF文件
安装必要的库,这里使用PDF.js库 npm install pdfjs-dist --save 为了解决跨域问题,在server/api 下 创建一个请求api, downloadFileByProxy.ts import { defineEventHandler } from h3;export default defineEventHandler(async event >…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...