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.pswp.cn/diannao/73687.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73687.shtml
英文地址,請注明出處:http://en.pswp.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…