STC89C52单片机学习——第22节: LED点阵屏显示图形动画

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!

本文写于:2025.03.16

51单片机学习——第22节: LED点阵屏显示图形&动画

  • 前言
  • 开发板说明
  • 引用
  • 解答和科普
  • 一、LED显示动画(取帧)
  • 二、LED动画(流水)
  • 问题
  • 总结

前言

   本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始51单片机的学习之路。
   欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习51单片机了,就跟着B站上的江协科技开始学习了.
   在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
   另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!

开发板说明

   本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。不再另外购买视频中的普中开发板了。
   原理图如下
在这里插入图片描述
视频中的都用这个开发板来实现,如果有资源就利用起来。
仔细看了看:开发板的晶振为:11.0592Mhz;12Mhz晶振是用来给CH340G芯片外置晶振;

下图是实物图
在这里插入图片描述

引用

51单片机入门教程-2020版 程序全程纯手打 从零开始入门
还参考了下图中的书籍:
手把手教你学51单片机(C语言版)
在这里插入图片描述
STC89C52手册
在这里插入图片描述

解答和科普

一、LED显示动画(取帧)

在这里插入图片描述
原理:
就是要把你展示的画面逐帧的放入进数组中,让他循环8次取的一帧的画面,然后延迟一下,然后再展示下一帧动画,这样就动起来了。如本次实验用来3帧,分别为M\、U、P,然后还做了越界判断。这是一些细节。
1.1江协科技

#include <REGX52.H>
#include "Delay.h"
#include "MatrixLED.h"//动画数据
unsigned char code Animation[]={0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C,0x3C,0x42,0xA1,0x85,0x85,0xA1,0x42,0x3C,0x3C,0x42,0xA5,0x89,0x89,0xA5,0x42,0x3C,
};void main()
{unsigned char i,Offset=0,Count=0;MatrixLED_Init();while(1){for(i=0;i<8;i++)	//循环8次,显示8列数据{MatrixLED_ShowColumn(i,Animation[i+Offset]);}Count++;			//计次延时if(Count>15){Count=0;Offset+=8;		//偏移+8,切换下一帧画面if(Offset>16){Offset=0;}}}
}
#include <REGX52.H>
#include "Delay.h"sbit RCK=P3^5;		//RCLK
sbit SCK=P3^6;		//SRCLK
sbit SER=P3^4;		//SER#define MATRIX_LED_PORT		P0/*** @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;
}/*** @brief  点阵屏初始化* @param  无* @retval 无*/
void MatrixLED_Init()
{SCK=0;RCK=0;
}/*** @brief  LED点阵屏显示一列数据* @param  Column 要选择的列,范围:0~7,0在最左边* @param  Data 选择列显示的数据,高位在上,1为亮,0为灭* @retval 无*/
void MatrixLED_ShowColumn(unsigned char Column,Data)
{_74HC595_WriteByte(Data);MATRIX_LED_PORT=~(0x80>>Column);Delay(1);MATRIX_LED_PORT=0xFF;
}
#ifndef __MATRIX_LED_H__
#define __MATRIX_LED_H__void MatrixLED_Init();
void MatrixLED_ShowColumn(unsigned char Column,Data);#endif

1.2 慧净开发板

#include <REGX52.H>
#include <INTRINS.H>sbit  	wei= P2^1;
sbit	duan=P2^0;
sbit	dianzhen=P2^2;
sbit LCDEN=P2^5;unsigned char  code Animation[]={0xFF,0x11,0x55,0x6D,0x7D,0x7D,0x7D,0x7D,0x7D,0x7D,0x7D,0x7D,0x7D,0x7D,0x83,0xFF,0x07,0x7B,0x7B,0x7B,0x07,0x7F,0x7F,0x7F};void Delay(unsigned int xms)		//@11.0592MHz
{while(xms--){unsigned char i, j;i = 2;j = 199;do{while (--j);} while (--i);}
}void MatrixLED_ShowColumn(unsigned char Column,Data)
{duan=1;P0=(0x80>>Column);duan=0;dianzhen=1;P0=Data;Delay(1);dianzhen=0;duan=1;P0=0x00;duan=0;}void main()
{unsigned char i,Offset=0,Count=0;LCDEN=0;wei=1;P0=0xff;wei=0;dianzhen=0;while(1){for(i=0;i<8;i++){MatrixLED_ShowColumn(i,Animation[i+Offset]);}Count++;		//计次延时if(Count>50){Count=0;Offset+=8;//偏移+1,切换下一帧画面if(Offset>16){Offset=0;}}}}

实验现象:

LED点阵屏显示动画逐帧

二、LED动画(流水)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意取模的方式,最好先用88的动画来看看是不是和开发板的选取模式相对应,我在这上面走了不少坑,昨天晚上调试了一晚上,可以选择88的看看选的数据对不对验证一下。

#include <REGX52.H>
#include <INTRINS.H>sbit  	wei= P2^1;
sbit	duan=P2^0;
sbit	dianzhen=P2^2;
sbit LCDEN=P2^5;unsigned char  code Animation[]={0x3C,0x5A,0x66,0x7E,0x7E,0x7E,0xFF,0x7E,0x7E,0x7E,0x7E,0x7E,0x81,0xFF,0x03,0x7B,0x7B,0x03,0x7F,0x7F,0x7F,0x7F,0x83,0x7F,0x7F,0x01,0x7D,0x7D,0x7D,0x83,0xFF,0xFF
};void Delay(unsigned int xms)		//@11.0592MHz
{while(xms--){unsigned char i, j;i = 2;j = 199;do{while (--j);} while (--i);}
}void MatrixLED_ShowColumn(unsigned char Column,Data)
{duan=1;P0=(0x80>>Column);duan=0;dianzhen=1;P0=Data;Delay(1);dianzhen=0;duan=1;P0=0x00;duan=0;}void main()
{unsigned char i,Offset=0,Count=0;LCDEN=0;wei=1;P0=0xff;wei=0;dianzhen=0;while(1){for(i=0;i<8;i++){MatrixLED_ShowColumn(i,Animation[i+Offset]);}Count++;		//计次延时if(Count>50){Count=0;Offset++;//偏移+1,切换下一帧画面if(Offset>24){Offset=0;}}}}

实验现象:

LED点阵屏显示动画流动只移动一行

问题

1、能不能换个方向流动,目前来看我的LED点阵是往下流动,我想着是不是能做到左右移动。

总结

本节课主要学了LED点阵屏动画,动画的形成其实就是每一帧动画再加上延迟,就会形成流动的动画,我们只需要加上延迟,还有偏移量就能实现LED点阵屏来完成动画的效果。

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

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

相关文章

浅谈数据分析及数据思维

目录 一、数据分析及数据分析思维&#xff1f;1.1 数据分析的本质1.2 数据分析思维的本质1.2.1 拥有数据思维的具体表现1.2.2 如何培养自己的数据思维1.2.2.1 书籍1.2.2.2 借助工具1.2.2.3 刻意练习 二、数据分析的价值及必备能力&#xff1f;2.1 数据分析的价值2.1.1 现状分析…

Cursor的使用感受,帮你使用好自动化编程工具,整理笔记

使用感受 说实话&#xff0c;我觉得cursor还是好用的&#xff0c;可能我刚开始使用&#xff0c;没有使用的非常的熟练&#xff0c;运用也没有非常的透彻&#xff0c;总体体验还是不错的&#xff0c;在使用它时&#xff0c;我优先考虑&#xff0c;前端页面功能复用的时候&#…

设计模式之组合模式:原理、实现与应用

引言 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以统一对待单个对象和组合对象&#xff0c;从而简化了客户端代码。本文将深入探讨组合模式的原理…

appium之Toast元素识别

Appium之Toast元素识别教程与实例 一、Toast简介 Toast是Android系统中的轻量级消息提示框&#xff0c;以浮动形式短暂显示&#xff08;通常2-3秒&#xff09;&#xff0c;无法被点击且不会获取焦点。常见于登录失败、操作提示等场景&#xff0c;如“密码错误”或“网络异常”。…

Mysql中创建表时的约束条件

约束条件说明示例用法主键约束 &#xff08;PRIMARY KEY&#xff09;唯一标识表中的每一行记录&#xff0c;一个表只能有一个主键&#xff0c;主键列的值不能为NULL且不能重复CREATE TABLE students ( student_id INT PRIMARY KEY name VARCHAR(50) );创建表时直接指定某一…

SSM框架——Spring面试题

Spring常见面试题 Spring框架中的单例bean是线程安全的吗 不是线程安全的 Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。 因为一般在spring的bean的中都是注入无状态的对象&#xff0c;没有线程安全问题&#xff0c;如果在bean中定义了可…

20250317笔记本电脑在ubuntu22.04下使用acpi命令查看电池电量

20250317笔记本电脑在ubuntu22.04下使用acpi命令查看电池电量 2025/3/17 18:05 百度&#xff1a;ubuntu查看电池电量 百度为您找到以下结果 ubuntu查看电池电量 在Ubuntu操作系统中&#xff0c;查看电池电量通常可以通过命令行或者图形界面来完成。下面是一些常见的方法&…

SpringBoot第三站:配置嵌入式服务器使用外置的Servlet容器

目录 1. 配置嵌入式服务器 1.1 如何定制和修改Servlet容器的相关配置 1.server.port8080 2. server.context-path/tx 3. server.tomcat.uri-encodingUTF-8 1.2 注册Servlet三大组件【Servlet&#xff0c;Filter&#xff0c;Listener】 1. servlet 2. filter 3. 监听器…

Docker 使用指南

Docker 是一种开源的容器化平台&#xff0c;它通过使用容器来进行应用程序的打包、分发和部署。下面是 Docker 的基本概念和优势&#xff1a; 容器化&#xff1a;Docker 使用容器来封装应用程序及其所有依赖项&#xff0c;使其能够在任何环境中运行&#xff0c;并且与底层系统隔…

C# WPF编程-启动新窗口

C# WPF编程-启动新窗口 新建窗口&#xff1a; 工程》添加》窗口 命名并添加新的窗口 这里窗口名称为Window1.xaml 启动新窗口 Window1 win1 new Window1(); win1.Show(); // 非模态启动窗口win1.ShowDialog(); // 模态启动窗口 模态窗口&#xff1a;当一个模态窗口被打开时&a…

谈谈 undefined 和 null

*** 补充 null 和 ‘’

Ubuntu快速安装使用gRPC C++

目录 引言一、快速安装1. 安装必要依赖库2. 安装gRPC 二、测试使用三、参考博客 引言 关于gRPC随着云原生微服务的火热也流行了起来&#xff0c;而且学好一个gRPC框架对目前来说也是必须的了。然而对于一个基础的小白来说&#xff0c;这个gRPC的框架运用起来是及其的困难&…

高数1.5 极限的运算法则

1. 预备知识 2.四则求极限法则 3.复合运算求极限法则

Python中的“泛型”和“多重继承”

“泛型”和“多重继承”属于 Python 的语法规则。 1. 泛型&#xff08;Generic[T]&#xff09; 通俗解释 泛型允许你在定义类或函数时&#xff0c;不指定具体的类型&#xff0c;而是使用一个“占位符”&#xff08;通常命名为 T&#xff09;。这就像你制作一个盒子&#xff0…

pandas学习笔记(一)——基础知识和应用案例

pandas学习笔记 基础语法参考菜鸟教程&#xff1a;https://www.runoob.com/pandas/pandas-tutorial.html # jupyter import pandas as pd import matplotlib from matplotlib import pyplot as plt import numpy as npmatplotlib.use(TkAgg)data {timestamp: [1, 2, 3, 4, 5…

海绵音乐 3.4.0 | 免费AI音乐创作软件,支持多种风格智能生成

海绵音乐是一款专为Android用户设计的免费AI音乐创作软件&#xff0c;搭载深度神经网络作曲引擎&#xff0c;支持流行、电子、古风等12种音乐风格智能生成。提供多轨道编辑界面&#xff08;8轨同步混音&#xff09;&#xff0c;可自定义鼓点、旋律和和弦进行实时混音&#xff0…

2025 香港 Web3 嘉年华:全球 Web3 生态的年度盛会

自 2023 年首届香港 Web3 嘉年华成功举办以来&#xff0c;这一盛会已成为全球 Web3 领域规模最大、影响力最深远的行业活动之一。2025 年 4 月 6 日至 9 日&#xff0c;第三届香港 Web3 嘉年华将在香港盛大举行。本届活动由万向区块链实验室与 HashKey Group 联合主办、W3ME 承…

【Dify平台】Function Call 模式模式和ReAct模型有什么不同?

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 1. DIFY 平台的 Function Call 模式 2. ReAct…

解决 React Native 0.76 中 com.facebook.react.settings 插件缺失问题

在使用 React Native 0.76 创建项目时&#xff0c;遇到以下错误&#xff1a; FAILURE: Build failed with an exception. * Where: Settings file /Users/wangxp/learn/AwesomeProject/android/settings.gradle line: 2 * What went wrong: Plugin [id: com.facebook.react.se…

Linux目录结构以及文件操作

Linux目录结构以及文件操作 ubuntu属于Linux的发行版&#xff0c;带图形界面。但是跑在嵌入式设备中的Linux操作系统往往不带图形界面&#xff0c;直接使用命令来操作。Linux区分大小写。 在Linux系统上&#xff0c;文件被看作字节序列。 普通文件&#xff08;—&#xff09…