51单片机STC89C52RC——8.2 8*8 LED点阵模块(动态图像)

news2024/12/24 8:26:41

目的/效果

在《51单片机STC89C52RC——8.1 8*8 LED点阵模块(点亮一个LED)》我们点亮一个LED,接下来我们将在8*8的矩阵中展示动态的图像。

1:单列展示:

2:单行展示

3:笑脸

4:右移箭头

一,STC单片机模块

二,8*8 点阵 

在 《51单片机STC89C52RC——8.1 8*8 LED点阵模块(点亮一个LED)》,我们了解了如何点亮点阵的LED。

在《51单片机STC89C52RC——3.2 数码管动态展示(多位动态)_stc89c52单只数码管显示0到f电路图-CSDN博客》中我们要多个LED展示需要  动态显示轮流显示各个字符。利用人眼视觉暂留的特点,循环顺序变更位码,同时数据线上发送相应的显示内容。

2.1 一列一列 亮

#include <REGX52.H>  
#include "74HC595.h"
#include "Delay.h"
/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{	 	 
	while(1)
	{
		_74HC595_Show(0,0xff); //第一列
		Delay_ms(500);//延时500毫秒
		_74HC595_Show(1,0xff); //第二列
		Delay_ms(500);//延时500毫秒
		_74HC595_Show(2,0xff); //第三列
		Delay_ms(500);//延时500毫秒
		_74HC595_Show(3,0xff); //第四列
		Delay_ms(500);//延时500毫秒
		_74HC595_Show(4,0xff); //第五列
		Delay_ms(500);//延时500毫秒
		_74HC595_Show(5,0xff); //第六列
		Delay_ms(500);//延时500毫秒
		_74HC595_Show(6,0xff); //第七列
		Delay_ms(500);//延时500毫秒
		_74HC595_Show(7,0xff); //第八列
		Delay_ms(500);//延时500毫秒
	}
} 

2.2  一行一行 亮

#include <REGX52.H>  
#include "74HC595.h"
#include "Delay.h"
/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{	 	 
	P0=0x00;//先全部置高电平
	while(1)
	{
		_74HC595_WriteByte(0x80);
		Delay_ms(500);//延时500毫秒
		_74HC595_WriteByte(0x40);
		Delay_ms(500);//延时500毫秒
		_74HC595_WriteByte(0x20);
		Delay_ms(500);//延时500毫秒
		_74HC595_WriteByte(0x10);
		Delay_ms(500);//延时500毫秒
		_74HC595_WriteByte(0x08);
		Delay_ms(500);//延时500毫秒
		_74HC595_WriteByte(0x04);
		Delay_ms(500);//延时500毫秒
		_74HC595_WriteByte(0x02);
		Delay_ms(500);//延时500毫秒
		_74HC595_WriteByte(0x01);
		Delay_ms(500);//延时500毫秒		
	}
} 

2.3 笑脸

#include <REGX52.H>  
#include "74HC595.h"
#include "Delay.h"
/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{	 	 
	P0=0x00;//先全部置高电平
	while(1)
	{
		//笑脸
		_74HC595_Show(0,0x3C);
		_74HC595_Show(1,0x42);
		_74HC595_Show(2,0xA9);
		_74HC595_Show(3,0x85);
		_74HC595_Show(4,0x85);
		_74HC595_Show(5,0xA9);
		_74HC595_Show(6,0x42);
		_74HC595_Show(7,0x3C);
	}
} 

2.4 右移箭头

#include <REGX52.H>  
#include "74HC595.h"
#include "Delay.h"
 
/**
 * 函    数:动态展示向右的箭头
 * 参    数:无
 * 返 回 值:无
 */
void Show_RightArrow()
{
  int i=0,j=0,temp;
  unsigned char  rightArrow_colData[8]= {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //箭头列数据
  unsigned char  rightArrow_rowData[10]= {0x10,0x10,0x10,0x10,0x92,0x54,0x38,0x10,0x00,0x00}; //箭头行数据
  while(1)
    {

		//交换行数据
		temp=rightArrow_rowData[9];
		for(j=9; j>0; j--)
		{
			rightArrow_rowData[j]=rightArrow_rowData[j-1];
		}
		rightArrow_rowData[0]=temp;
		for(j=0; j<50; j++)
		{
			rightArrow_rowData[0]=temp;
			for(i=0; i<8; i++) //循环8次扫描8行、列
			{
				P0=rightArrow_colData[i];//传送列选数据
				_74HC595_WriteByte(rightArrow_rowData[i]);//传送行选数据
				Delay_10us(10);//延时一段时间,等待显示稳定
				_74HC595_WriteByte(0x00);//消影
			} 
		}
    }
}
/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{	 
	Show_RightArrow();	
} 

 

三,创建Keil项目

详细参考:51单片机STC89C52RC——创建Keil项目-CSDN博客

四,代码 

main.c

#include <REGX52.H>  
#include "74HC595.h"
#include "Delay.h"
 
/**
 * 函    数:动态展示向右的箭头
 * 参    数:无
 * 返 回 值:无
 */
void Show_RightArrow()
{
  int i=0,j=0,temp;
  unsigned char  rightArrow_colData[8]= {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //箭头列数据
  unsigned char  rightArrow_rowData[10]= {0x10,0x10,0x10,0x10,0x92,0x54,0x38,0x10,0x00,0x00}; //箭头行数据
  while(1)
    {

		//交换行数据
		temp=rightArrow_rowData[9];
		for(j=9; j>0; j--)
		{
			rightArrow_rowData[j]=rightArrow_rowData[j-1];
		}
		rightArrow_rowData[0]=temp;
		for(j=0; j<50; j++)
		{
			rightArrow_rowData[0]=temp;
			for(i=0; i<8; i++) //循环8次扫描8行、列
			{
				P0=rightArrow_colData[i];//传送列选数据
				_74HC595_WriteByte(rightArrow_rowData[i]);//传送行选数据
				Delay_10us(10);//延时一段时间,等待显示稳定
				_74HC595_WriteByte(0x00);//消影
			} 
		}
    }
}
/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{	 
	Show_RightArrow();	
//	P0=0x00;//先全部置高电平
//	while(1)
//	{
//		//笑脸
//		_74HC595_Show(0,0x3C);
//		_74HC595_Show(1,0x42);
//		_74HC595_Show(2,0xA9);
//		_74HC595_Show(3,0x85);
//		_74HC595_Show(4,0x85);
//		_74HC595_Show(5,0xA9);
//		_74HC595_Show(6,0x42);
//		_74HC595_Show(7,0x3C);
		
		//一行行显示
//		_74HC595_WriteByte(0x80);
//		Delay_ms(500);//延时500毫秒
//		_74HC595_WriteByte(0x40);
//		Delay_ms(500);//延时500毫秒
//		_74HC595_WriteByte(0x20);
//		Delay_ms(500);//延时500毫秒
//		_74HC595_WriteByte(0x10);
//		Delay_ms(500);//延时500毫秒
//		_74HC595_WriteByte(0x08);
//		Delay_ms(500);//延时500毫秒
//		_74HC595_WriteByte(0x04);
//		Delay_ms(500);//延时500毫秒
//		_74HC595_WriteByte(0x02);
//		Delay_ms(500);//延时500毫秒
//		_74HC595_WriteByte(0x01);
//		Delay_ms(500);//延时500毫秒
		
		
		//一列列显示
//		_74HC595_Show(0,0xff); //第一列
//		Delay_ms(500);//延时500毫秒
//		_74HC595_Show(1,0xff); //第二列
//		Delay_ms(500);//延时500毫秒
//		_74HC595_Show(2,0xff); //第三列
//		Delay_ms(500);//延时500毫秒
//		_74HC595_Show(3,0xff); //第四列
//		Delay_ms(500);//延时500毫秒
//		_74HC595_Show(4,0xff); //第五列
//		Delay_ms(500);//延时500毫秒
//		_74HC595_Show(5,0xff); //第六列
//		Delay_ms(500);//延时500毫秒
//		_74HC595_Show(6,0xff); //第七列
//		Delay_ms(500);//延时500毫秒
//		_74HC595_Show(7,0xff); //第八列
//		Delay_ms(500);//延时500毫秒
		
//	}
} 

 Delay.c

/**
 * 函    数:延时函数 毫秒
 * 参    数:ms 延时多少毫秒
 * 返 回 值:无
 */
void Delay_ms(int ms)	//@12.000MHz
{
	unsigned char data i, j;
	while(ms--)
	{ 
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
/**
 * 函    数:延时函数 毫秒
 * 参    数:ms 延时多少毫秒
 * 返 回 值:无
 */
void Delay_us(int ms)	//@12.000MHz
{
	unsigned char data i, j;
	while(ms--)
	{ 
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
/**
 * 函    数:延时函数  10微秒
 * 参    数:无
 * 返 回 值:无
 */
void Delay_10us(int _10us)	//@11.0592MHz
{
	unsigned char data i;
	while(_10us--)
	{
		i = 2;
		while (--i);
	}
}

 Delay.h

#ifndef __DELAY_H_
#defind __DELAY_H_ 
void Delay_ms(int ms);
void Delay_10us(int _10us);
#endif

 74HC595.c

#include <REGX52.H>
#include "Delay.h"

//定义74HC595控制管脚
sbit _SRCLK=P3^6;	//移位寄存器时钟输入
sbit _RCLK=P3^5;	//存储寄存器时钟输入 注意:在 REGX52.H 中已经申明了RCLK
sbit _SER=P3^4; 	//串行数据输入 

/**
 * 函    数:74HC595写入一个字节
 * 参    数:Byte 要写入的字节
 * 返 回 值:无
 */
void _74HC595_WriteByte(unsigned int Byte)
{	
	unsigned char i;
	for(i=0;i<8;i++)
	{
		_SER=Byte&(0x80>>i);		//将1000 0000 右移i位后 & Byte
		_SRCLK=0;				//移位寄存器置搞电平
		Delay_10us(1);
		_SRCLK=1;				//移位寄存器置低电平
		/*这里有需要可以延时10微秒*/
		Delay_10us(1);
	}
	_RCLK=1;	//存储寄存器置低电平
	Delay_10us(1);
	_RCLK=0;	//存储寄存器置搞电平 
}
/**
 * 函    数:LED点阵屏显示一列数据
 * 参    数:Column 要选择的列,范围:0~7,0在最左边,
			 Data 选择列显示的数据,高位在上,1为亮,0为灭
 * 返 回 值:无
 */
void _74HC595_Show(unsigned char Column,Byte)
{
	_74HC595_WriteByte(Byte);	//向行写入数据
	P0=~(0x80>>Column);			//向列写入数据
	Delay_10us(1);				//等待显示稳定 
}

 74HC595.h

#ifndef __74HC595_H_
#defind __74HC595_H_
void _74HC595_WriteByte(unsigned int Byte);
void _74HC595_Show(unsigned char Column,Byte);
#endif

五,代码编译、下载到51单片机

代码编译请参考

《51单片机STC89C52RC——代码编译-CSDN博客》

代码下载请参考

《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》

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

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

相关文章

【D3.js in Action 3 精译】第一部分 D3.js 基础知识

第一部分 D3.js 基础知识 欢迎来到 D3.js 的世界&#xff01;可能您已经迫不及待想要构建令人惊叹的数据可视化项目了。我们保证&#xff0c;这一目标很快就能达成&#xff01;但首先&#xff0c;我们必须确保您已经掌握了 D3.js 的基础知识。这一部分提到的概念将会在您后续的…

优化系统小工具

一款利用VB6编写的系统优化小工具&#xff0c;系统优化、桌面优化、清理垃圾、查找文件等功能。 下载:https://download.csdn.net/download/ty5858/89432367

Vue3 国际化i18n

国际化i18n方案 1. 什么是i18n2. i18n安装、配置及使用2.1 安装2.2 配置2.3 挂载到实例2.4 组件中使用2.5 语言切换 1. 什么是i18n i18n 是“国际化”的简称。在资讯领域&#xff0c;国际化(i18n)指让产品&#xff08;出版物&#xff0c;软件&#xff0c;硬件等&#xff09;无…

udp Socket组播 服务器

什么是组播 组播也可以称之为多播这也是 UDP 的特性之一。组播是主机间一对多的通讯模式&#xff0c;是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将一份报文发送到特定的组播地址&#xff0c;组播地址不同于单播地址&#xff0c;它并不属于特定某个主机…

美业门店收银系统Java源码分享私、美业系统中哪种状态订单可以操作退款?

美业门店收银系统是一种专为美容美发、美甲、SPA等美业门店设计的全面性结账解决方案&#xff0c;美业门店收银系统的重要性在于它为门店提供了全面的业务管理解决方案。 美业收银管理系统可以处理销售、预约管理、库存追踪和员工绩效等多项任务&#xff0c;不仅能够简化交易流…

【linux基础awk】如何基于强大的awk打印列、计算

打印列 awk {print $1} test.txt#-F参数去指定分隔的字符 awk -F "," {print $1,$2} file 匹配打印列 awk /a/ {print $4 "\t" $3} test.txt筛选数值 仅打印那些含有多于18个字符的行。awk length($0) > 18 test.txt 统计数目 #统计行数 less num…

2024年电商618观察:这是最好的时代 这是最坏的时代

内容提要 目前阶段增长势头更强劲的是中小商家&#xff0c;而星图的核心数据还是10万多个品牌。 十九世纪&#xff0c;英国最伟大的作家狄更斯在他的小说《双城记》开篇中写道&#xff1a; 这是最好的时代&#xff0c;这是最坏的时代&#xff1b; 这是智慧的年代&#xff0c;…

实用软件下载:ABBYY Finereader 15最新安装包及详细安装教程

数据表明FineReader PDF提供实用、简易的工具&#xff0c;将纸质文档和PDF结合起来&#xff0c;提高了数字工作场所的效率。我们都知道 即时背景识别:使不可搜索的PDF能够在工作中立即使用。值得一提的是文档转换更精准&#xff1a;OCR技术&#xff0c;它提高了PDF转换、布局保…

【linux基础】后台执行命令,防止中断nohup

前台运行与后台运行&#xff1a;前台运行&#xff0c;就是运行过程一直在屏幕输出。 目的&#xff1a;1. 提交至后台 & 2.防止中断 nohup 1.终端上不要有大量的log出现&#xff0c;后台运行 (1) & 程序后台运行 #脚本、修改权限 vi test.sh chmod 777 test.sh#后…

鸿蒙开发系统基础能力:【@ohos.inputMethod (输入法框架)】

输入法框架 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import inputMethod from ohos.inputMethod;inputMethod8 常量值。 系统能力&#xff1a;以下各项对应的系统能力均为Sy…

Java网络编程之UDP通信与TCP通信交互代码实现

​import java.net.InetAddress; import java.io.IOException; class Main {public static void main(String[] args) {try { InetAddress localAddress InetAddress.getLocalHost(); //获得本地主机 InetAddress remoteAddress InetAddress.getByName("www.itcast.cn&qu…

【宠粉赠书】SQLServer2022:从入门到精通

为了回馈粉丝们的厚爱&#xff0c;今天小智给大家送上一套数据库学习的必备书籍——《SQL Server 2022从入门到精通》。下面我会详细给大家介绍这套图书&#xff0c;文末留有领取方式。 图书介绍 《SQL Server 2022从入门到精通》系统全面地介绍SQL Server 2022数据库应用与开…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验3 总线型以太网的特性(广播,竞争总线,冲突)

一、实验目的 1.验证总线型以太网的特性&#xff1b; 2.验证广播特性&#xff1b; 3.验证各主机对总线的竞争使用以及可能产生的碰撞。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容…

LED显示屏中什么是静态驱动?什么是扫描驱动?两者的区别是什么?

随着科技的飞速发展&#xff0c;LED显示屏作为现代信息显示技术的重要组成部分&#xff0c;正以其独特的优势引领着显示行业的革新。近日&#xff0c;LED显示屏市场呈现出蓬勃的发展态势&#xff0c;技术创新不断推动行业向前发展&#xff0c;让LED显示屏无论是在商场的广告牌、…

<Linux> 缓冲区谁维护?

缓冲区是谁提供的&#xff1f; 来看一段代码 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> int main() {const char *str1 "a";printf("%s", str1);const char *str2 "b";writ…

Younger 数据集:人工智能生成神经网络

设计和优化神经网络架构通常需要广泛的专业知识&#xff0c;从手工设计开始&#xff0c;然后进行手动或自动化的精细化改进。这种依赖性成为快速创新的重要障碍。认识到从头开始自动生成神经网络架构的复杂性&#xff0c;本文引入了Younger&#xff0c;这是一个开创性的数据集&…

使用Birdeye访问Sui上加密市场数据

是一个链上加密交易数据聚合器&#xff0c;于2024年4月开始整合Sui数据。 个人DeFi用户可以在Birdeye的首页找到丰富的数据&#xff0c;包括关于主流区块链上的tokens、交易和交易者钱包的详细信息。 Birdeye提供API和WebSockets数据服务&#xff0c;涵盖token价格和其他DeFi…

类和对象(封装、继承、多态、友元)

c面相对象的三大特性为&#xff1a;封装、集成、多态 c 认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 一、类和对象&#xff08;封装&#xff09; &#xff08;一&#xff09;封装的意义 封装是c面相对象的三大特性之一 封装的意义&#xff1a; 将属性和行为…

HarmonyOS NEXT:华为开启全新操作系统时代

在全球科技浪潮的汹涌澎湃中&#xff0c;华为再次以创新者的姿态&#xff0c;引领了一场关于操作系统的革命。HarmonyOS NEXT&#xff0c;这一由华为倾力打造的分布式操作系统&#xff0c;不仅是对现有技术的一次大胆突破&#xff0c;更是对未来智能生活的一次深邃展望。 Harmo…

AU音频重新混合音频,在 Adobe Audition 中无缝延长背景音乐,无缝缩短BGM

导入音频&#xff0c;选中音频&#xff0c;并且点 New Multitrack Session 的图标 设计文件名和存储路径&#xff0c;然后点 OK 点 Essential Sound 面板点 Music &#xff08;如果没有这个面板 点菜单栏 Windows > Essential Sound 调出来&#xff09; 点 Duration 展…