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

51单片机入门 -驱动 8x8 LED 点阵屏

硬件型号、软件版本、以及烧录流程

  • 操作系统:Windows 10 x84-64
  • 单片机:STC89C52RC
  • 编译器:SDCC
  • 烧录软件:stcgal 1.6
  • 开发板:普中51单片机开发板A2套件(2022)

在 VS Code 中新建项目到烧录的过程:

  1. 左侧EIDE图标 - 新建项目 - 空项目 - 8位MCU项目 - 保存文件夹。
  2. 更改构建配置:SDCC;更改烧录配置:stcgal
  3. 在项目文件夹下新建 src/main.c,右键 项目资源 - 添加源文件夹 - 普通文件夹,选择 src
  4. src 目录下开发,最后点击右上角 构建烧录,单片机上电,完成烧录。

LED 点阵屏

8x8 LED 点阵屏和之前用的数码管很相似,通过交叉选择的方式来减少控制引脚,从 8⋅8=648\cdot 8=6488=64,降到了 8+8=168+8=168+8=16 个引脚,比如控制第1行、第1列对应的引脚 A1、K1 分别为 高、低 电平,那么左上角的LED就会亮起。

74HC595 串转并模块

单片机通过 IO 引脚来和外界交互,但是这些引脚比较有限,需要对引脚进行扩展,或者说把占用引脚数较多的设备通过一些方式减少引脚数量。

  1. 38译码器。如果 8 位输出在同一时间可以只需要选择其中一位置高或置低,那么一共就只有 8 个状态:0000 0001, 0000 0010, 0000 0100, 0000 1000, 0001 0000, 0010 0000, 0100 0000, 1000 0000。这样就只需要 3 个二进制位,就足以表达 3 个状态(23=82^3=823=8),这就是38译码器,比如在控制数码管的时候,其实并不需要让它们同时亮起,只需要反复扫描刷新,超过了人眼的刷新率,就可以让它看起来是同时亮起了。
  2. 串行转并行。如果实际需求 8 位要同时独立控制,也就是 256 个状态,这是无法使用38译码器来实现的,那么可以使用串行数据转并行数据的方法,用时间换空间的思路,将输出的一段时间的连续信号通过移位寄存器存储起来,然后同时将存储的 8 个信号直接推到 8 个引脚上,也就是并行输出。

74HC595 是一个串转并模块,将接收到的串行信号,以并行的形式输出。不过它同样要占用单片机的 3 个引脚来实现这个效果。

  • SER:单片机将高/低电平输出到 SER 引脚。
  • SRCLK:模块接收到 SRCLK 的上升沿时,读取 SER 的电平作为移位寄存器的新的输入,8 位移位寄存器整体被推动一位,溢出位给到QH′QH^\primeQH(用来级联时输出到下一块 74HC595 的 SER 端)
  • RLCK:模块接收到 RLCK 的上升沿时,将当前 8 位寄存器存储的数据一并推到 8 位输出端:QA, QB, QC, QD, QE, QF, QG, QH。

文字取模

找一个文字取模软件,设置长宽,然后在上面点出想要显示的内容即可。

把按列生成的16进制数组复制下来,粘贴到代码里面。

完整代码

#include <8051.h>
#define RLCK  P3_5
#define SRCLK P3_6
#define SER   P3_4unsigned char animate[] = {0x00,0x62,0x91,0x89,0x46,0x00,0x00,0x7E,0x01,0x02,0x00,0x2F,0x00,0x00,0x32,0x49,
0x51,0x3E,0x00,0x7F,0x08,0x10,0x1F,0x00,0x10,0x7F,0x11,0x00,0x00,0x1E,0x01,0x0E,
0x01,0x1E,0x00,0x00,0x2F,0x00,0x1F,0x08,0x10,0x0F,0x00,0x06,0x09,0x09,0x7E,0x01,
0x00,0x00,};void Delay()		//@11.0592MHz
{unsigned char i;i = 200;while (--i);
}void _74HC595(unsigned char data) {for (int i = 0; i < 8; i++) {SER = data & (0x80 >> i);SRCLK = 0; // 产生上升沿,移位寄存器向下移位SRCLK = 1;}RLCK = 0;      // 产生上升沿,将寄存器的数据推到输出端RLCK = 1;
}void MatrixLED(unsigned char data, unsigned char column) {_74HC595(data);P0 = 0xFF ^ (1 << (7 - column));Delay();P0 = 0xFF;
}void main() {unsigned int cnt = 0, cnt2 = 0, offset = 5;while (1) {for (unsigned char i = 0; i < 8; i++)MatrixLED(animate[(i + offset) % 50], i);cnt++;if (cnt > 20){cnt = 0;offset = (offset + 1) % 50;}}
}

相关文章:

51单片机入门 -驱动 8x8 LED 点阵屏

硬件型号、软件版本、以及烧录流程 操作系统&#xff1a;Windows 10 x84-64单片机&#xff1a;STC89C52RC编译器&#xff1a;SDCC烧录软件&#xff1a;stcgal 1.6开发板&#xff1a;普中51单片机开发板A2套件&#xff08;2022&#xff09; 在 VS Code 中新建项目到烧录的过程…...

Xinlinx zynq7045国产替代 FMQL45T900全国产化 ARM 核心板+扩展板

TES745D 是一款基于 FMQL45T900 的全国产化 ARM 核心板。该核心板将 FMQL45T900&#xff08;与XC7Z045-2FFG900I 兼容&#xff09;的最小系统集成在了一个 87*117mm 的核心板上&#xff0c;可以作为一个核心模块&#xff0c;进行功能性扩展&#xff0c;能够快速的搭建起一个信号…...

硬刚ChatGPT!文心一言能否为百度止颓?中国版ChatGPT“狂飙”的机会在哪儿?

文章目录目录产品背景发展历程科技简介主要功能合作伙伴结语文心一言 &#xff08;英文名&#xff1a;ERNIE Bot&#xff09; *是百度基于文心大模型技术推出的生成式对话产品&#xff0c;被外界誉为“中国版ChatGPT”&#xff0c;将于2023年3月份面向公众开放。 [40] 百度在人…...

Python 异步: 在非阻塞子进程中运行命令(19)

动动发财的小手&#xff0c;点个赞吧&#xff01; 我们可以从 asyncio 执行命令。该命令将在我们可以使用非阻塞 I/O 写入和读取的子进程中运行。 1. 什么是 asyncio.subprocess.Process asyncio.subprocess.Process 类提供了由 asyncio 运行的子进程的表示。它在 asyncio 程序…...

蓝桥杯嵌入式第五课--输入捕获

前言输入捕获的考题十分明确&#xff0c;就是测量输入脉冲波形的占空比和频率&#xff0c;对我们的板子而言&#xff0c;就是检测板载的两个信号发生器产生的信号&#xff1a;具体来说就是使用PA15和PB4来做输入捕获。输入捕获原理简介输入捕获能够对输入信号的上升沿和下降沿进…...

Spring事务和事务传播机制

目录 Spring中事务的实现 1、通过代码的方式手动实现事务 2、通过注解的方式实现声明式事务 2.1、Transactional作用范围 2.2、Transactional参数说明 2.3、注意事项 2.4、Transactional工作原理 事务隔离级别 1、事务特性 2、Spring中设置事务隔离级别 2.1、MySQL事…...

基于OpenCV+CUDA实时视频抠绿、背景合成以及抠绿算法小结

一、关于抠绿 百度百科上描述抠绿“抠绿是指在摄影或摄像时,以绿色为背景进行拍摄,在后期制作时使用特技机的“色键”将绿色背景抠去,改换其他更理想的背景的技术。”绿幕的使用已经非常普遍,大到好莱坞大片,小到自媒体的节目,一些商业娱乐场景,几乎都用使用。但是很多非…...

MySQL 中的 UNION 语句

文章目录一、数据准备一、UNION 和 UNION ALL二、UNION 的执行顺序&#xff08;UNION 和其他语句一同出现&#xff09;三、MySQL 使用 UNION&#xff08;ALL&#xff09; ORDER 导致排序失效四、UNION 报错语法一、数据准备 -- 创建表 CREATE TABLE test_user (ID int(11) NO…...

高完整性系统工程(三): Logic Intro Formal Specification

目录 1. Propositions 命题 2.1 Propositional Connectives 命题连接词 2.2 Variables 变量 2.3 Sets 2.3.1 Set Operations 2.4 Predicates 2.5 Quantification 量化 2.6 Relations 2.6.1 What Is A Relation? 2.6.2 Relations as Sets 2.6.3 Binary Relations as…...

【linux】多线程概念详述

文章目录一、线程基本概念1.1 进程地址空间与页表1.2 页表结构1.3 线程的理解1.3.1 如何描述线程1.4 再谈进程1.5 代码理解1.5.1 原生库提供线程pthread_create1.6 资源共享问题1.7 资源私有问题二、总结2.1 什么是线程2.2 并行与并发2.3 线程的优点2.4 线程的缺点2.5 线程异常…...

【Java】P8 面向对象(3)方法 基本知识

面向对象 方法方法方法的声明权限修饰符返回值类型方法名形参列表方法体简单案例方法 方法 是对类或对象行为特征的抽象&#xff0c;用来完成某个功能的操作。方法的目的 是为了实现代码复用&#xff0c;减少冗余&#xff0c;简化代码&#xff1b;方法不能独立存在&#xff0c…...

js中null和undefined的区别

js中null和undefined的区别?这也是一个常见的js面试题 相同点 1&#xff0c;都是基本类型。 2&#xff0c;做判断值都是false。 !!null false // true !!undefined false // true不同点 1&#xff0c;诞生时间null在前&#xff0c;undefined在后。因为js作者Brendan-Eic…...

【Linux】linux中的c++怎么调试?gdb的介绍和使用。

背景1.1.前提知识程序的发布方式有两种&#xff0c;debug模式和release模式Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项windows上的调试方法有区别吗&#xff1f;1.调试思路是一样的2…...

提升Python代码性能的六个技巧

文章目录前言为什么要写本文&#xff1f;1、代码性能检测1.1、使用 timeit 库1.2、使用 memory_profiler 库1.3、使用 line_profiler 库2、使用内置函数和库3、使用内插字符串 f-string4、使用列表推导式5、使用 lru_cache 装饰器缓存数据6、针对循环结构的优化7、选择合适算法…...

VI的常用命令

VI的常用命令 文章目录VI的常用命令vi/vim是什么&#xff1f;VI普通模式命令VI编辑模式命令VI指令模式vi/vim是什么&#xff1f; VI是Unix操作系统和类Unix操作系统中最通用的文本编辑器 VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器。可以主动的将字体颜色辨别语法…...

【数据结构】万字深入浅出讲解单链表(附原码 | 超详解)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;C语言实现数据结构 &#x1f4ac;总结&#xff1a;希望你看完…...

无线WiFi安全渗透与攻防(五)之aircrack-ng破解WEP加密

系列文章 无线WiFi安全渗透与攻防(一)之无线安全环境搭建 无线WiFi安全渗透与攻防(二)之打造专属字典 无线WiFi安全渗透与攻防(三)之Windows扫描wifi和破解WiFi密码 无线WiFi安全渗透与攻防(四)之kismet的使用 aircrack-ng破解WEP加密 1.WEP介绍 其实我们平常在使用wifi的时…...

MySQL中事务的相关问题

事务 一、事务的概述&#xff1a; 1、事务处理&#xff08;事务操作&#xff09;&#xff1a;保证所有事务都作为一个工作单元来执行&#xff0c;即使出现了故障&#xff0c;都不能改变这种执行方式。当在一个事务中执行多个操作时&#xff0c;要么所有的事务都被提交(commit…...

推荐算法再次踩坑记录

去年搞通了EasyRec这个玩意&#xff0c;没想到今年还要用推荐方面的东西&#xff0c;行吧&#xff0c;再来一次&#xff0c;再次踩坑试试。1、EasyRec训练测试数据下载&#xff1a;git clone后&#xff0c;进入EasyRec&#xff0c;然后执行&#xff1a;bash scripts/init.sh 将…...

STM32 (十五)MPU6050

简介前言一、MPU6050简介MPU6050是一款性价比很高的陀螺仪&#xff0c;可以读取X Y Z 三轴角度&#xff0c;X Y Z 三轴加速度&#xff0c;还有内置的温度传感器&#xff0c;在姿态解析方面应用非常广泛。下面是它在淘宝上的参数图产品尺寸产品参数产品原理图&#xff1a;二、硬…...

基于Python+Hadoop+Spark的美食推荐系统 数据采集与可视化平台 Django框架

1、项目介绍 技术栈 Python语言、Django框架、Scrapy爬虫框架、Echarts 可视化&#xff0c;采集下厨房网站数据。功能模块推荐美食美食用料排行榜分析美食分类占比分析饮食科普美食分类美食详情信息美食详情做法后台数据管理项目介绍本项目基于指定技术栈&#xff0c;爬取下厨房…...

新手必看!Quartus II 10.0 + DE2-115开发板从安装到点亮LED的完整避坑指南

Quartus II 10.0 DE2-115开发板从安装到点亮LED的完整避坑指南 第一次接触FPGA开发时&#xff0c;我盯着DE2-115开发板上密密麻麻的接口和Quartus II复杂的界面&#xff0c;完全不知道从何下手。直到经历了无数次驱动安装失败、管脚分配错误和编译报错后&#xff0c;才终于让第…...

符号回归的工程化实践:基于深度学习的物理定律自动发现与工业部署

1. 符号回归&#xff1a;当深度学习遇见物理定律发现 第一次接触符号回归时&#xff0c;我被它的"反套路"特性惊艳到了——大多数深度学习模型都在努力变得更复杂&#xff0c;而它却在追求用最简单的数学公式解释世界。三年前我在化工厂做反应釜监控项目时&#xff0…...

超越极限:YOLOv8融合Dynamic Head(统一尺度-空间-任务感知注意力)—— 原理详解、代码实现与性能验证

引言 在目标检测领域,YOLO系列模型凭借其出色的速度与精度平衡,始终占据着举足轻重的地位。YOLOv8作为Ultralytics团队的最新力作,在架构设计、训练策略和部署便捷性上均达到了新的高度。然而,随着应用场景的日益复杂,如何让模型在多尺度变化、空间遮挡、任务干扰等挑战下…...

新手零门槛入门:用快马生成你的第一个jiyutrainer式Python练习脚本

作为一个刚接触Python的新手&#xff0c;想要练习编程却常常被各种环境配置和工具安装搞得晕头转向。最近我发现了一个特别适合新手入门的方法——使用InsCode(快马)平台来生成自己的第一个Python练习脚本。下面我就来分享一下这个零门槛的入门体验。 为什么选择jiyutrainer式练…...

告别用人“开盲盒”|江湖背调定义全生命周期风控范式

企业用人别踩坑&#xff01;传统单次背调只有入口安检&#xff0c;无法应对员工在职动态风险&#xff0c;漏洞百出江湖背调以“雇前可信、在职可控”&#xff0c;正式定义全生命周期用工风控范式&#xff0c;筑牢从招聘到离职全链路安全屏障&#xff01;传统背调vs全生命周期风…...

【BoClaw教程03】BoClaw实战:打工人常用技能

博云BoClaw官方教程系列&#xff08;三&#xff09;本教程聚焦打工人日常办公高频需求&#xff0c;详细讲解 BoClaw 在桌面整理、文档检索、PPT 制作、简历筛选、销售报表处理五大场景的实操方法、操作要点及避坑技巧&#xff0c;助力高效提升办公效率。1.桌面整理&#xff1a;…...

Anaconda 被误删后抢救手册:零重装、10 分钟极速恢复

引言 作为 Python 开发者、数据分析师、AI 学习者的「必备工具」&#xff0c;Anaconda 凭借便捷的环境管理、海量预安装包&#xff0c;成为入门与进阶的首选。但很多人曾因误操作 —— 比如清理 C 盘时删掉anaconda3文件夹、卸载时选错路径、甚至误删系统环境变量 —— 导致co…...

PhysX 5.1入门实战:从Hello World到刚体模拟的完整流程解析

PhysX 5.1入门实战&#xff1a;从Hello World到刚体模拟的完整流程解析 在游戏开发和物理仿真领域&#xff0c;PhysX引擎一直以其强大的性能和易用性著称。作为NVIDIA旗下的物理引擎解决方案&#xff0c;PhysX 5.1版本带来了更多优化和新特性。本文将带您从零开始&#xff0c;通…...

Python实战:用Statsmodels搞定简单线性回归(附NO浓度预测案例)

Python实战&#xff1a;用Statsmodels搞定简单线性回归&#xff08;附NO浓度预测案例&#xff09; 在数据分析领域&#xff0c;线性回归是最基础却最实用的统计方法之一。无论你是市场分析师预测销售额&#xff0c;还是环境科学家研究污染物分布&#xff0c;掌握线性回归都能让…...