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

目的/效果

在《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博客》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

查看linux服务磁盘类型

查看linux服务磁盘类型 查看当前服务器磁盘挂载类型 df -h2. 查看/dev/mapper/centos-root挂载卷类型 # 查询 lsblk# 查询磁盘类型 lsblk -d -o name,rota | grep sda # 说明 sda 0 代表固态硬盘ssd sda 1 代表机械硬盘hdd

haproxy实现代理和负载均衡

HaProxy介绍&#xff1a; haproxy是法国开发者威利塔罗在2000年使用C语言开发的一个开源软件&#xff0c;是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&#xff0c;自动故障切换&#xff0c;支持正则表达式及web状态统计&…

算法基础-----【递归回溯】

1、递归 递归是一种算法结构&#xff0c;递归会出现在子程序中自己调用自己或间接地自己调用自己。递归就是分为递去和归来。 递去&#xff1a;递归的问题必须可以分解为若干规模较小&#xff0c;与原问题相同的子问题&#xff0c;这些子问题可以用相同的解题思路解决。 归来…

[Go 微服务] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施&#xff0c;不限定于某种注册中心&#xff0c;或数据库ORM等&#xff0c;所以您可以十分轻松地将任意库集成进项目里&#xff0c;与Kratos共同运作。 API -&…

【工具推荐】ONLYOFFICE 桌面编辑器 8.1:引入全新功能,提升文档处理体验

ONLYOFFICE 桌面编辑器 8.1 现已发布&#xff1a;功能完善的 PDF 编辑器、幻灯片版式、改进从右至左显示、新的本地化选项等 【工具推荐】ONLYOFFICE 桌面编辑器 8.1&#xff1a;引入全新功能&#xff0c;提升文档处理体验 一、什么是ONLYOFFICE&#xff1f; ONLYOFFICE 是…

Java新手启航:Windows下JDK安装,开启编程之旅

你是不是对编程充满好奇&#xff0c;想要迈入Java的世界&#xff0c;却不知道从何开始&#xff1f;别担心&#xff0c;每一个Java大师都是从安装JDK开始的&#xff0c;而今天&#xff0c;我将手把手教你如何轻松完成JDK的安装&#xff0c;让你迈出编程之旅的第一步! 接下来&am…

深入解析内容趋势:使用YouTube API获取视频数据信息

一、引言 YouTube&#xff0c;作为全球最大的视频分享平台之一&#xff0c;汇聚了无数优质的内容创作者和观众。从个人分享到专业制作&#xff0c;从教育科普到娱乐休闲&#xff0c;YouTube上的视频内容丰富多彩&#xff0c;满足了不同用户的需求。对于内容创作者、品牌以及希…

第三十六篇——最大熵原理:确定的答案找到之前,我们该做什么?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 又双叒叕一个伟大的原理&#xff0c;又双叒叕觉得太伟大了&#xff0c;知…

解释什么是lambda函数?它有什么好处?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

数据分析-常用模型-漏斗模型

一、什么是漏斗模型 漏斗模型&#xff0c;其实应该叫做“流程式业务分析模型”。它是基于业务流程数据&#xff0c;对业务进行分析诊断的工具。因为销售端的业务&#xff0c;常常会出现“流程越长&#xff0c;用户流失越多的情况”。 比如网上购物&#xff0c;看到一个喜欢的…

综合评价 | 基于组合博弈赋权的物流系统综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于组合博弈赋权的物流系统综合评价&#xff08;Matlab&#xff09; 组合博弈赋权&#xff08;Weighted Sum&#xff09;是一种常见的多目标决策方法&#xff0c;用于将多个目标指标进行综合评估和权衡…

【服务器部署】Jenkins配置前端工程自动化部署

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

【eMTC】eMTC 的SIB1-BR是如何发送

1 概述 eMTC的系统消息发送和接收与LTE的有很大不同&#xff0c;主要原因是在某一个时刻终端只接收1.4M的带宽&#xff0c;无法接收LTE的大带宽&#xff0c;比如20M带宽的LTE小区&#xff0c;eMTC终端&#xff0c;在某一个子帧&#xff0c;只能够接收其中的1.4M 带宽。PBCH本身…

解锁亚马逊、Temu、速卖通成功密码:重视评论,做好测评自养号

在亚马逊平台上&#xff0c;产品评论至关重要&#xff0c;因其能帮助其他买家做出购买决策。然而&#xff0c;亚马逊上的买家留评率却很低。有趣的是&#xff0c;存在一些买家&#xff0c;他们并未实际购买产品&#xff0c;却能发表评论。这究竟是怎么回事呢&#xff1f;接下来…

最新!最全!元启发优化算法215个测试函数综述!【免费获取论文】

目录 1.摘要2.主要内容3.参考文献4.文章获取 1.摘要 这篇综述论文旨在利用对不同基准测试函数的研究&#xff0c;评估元启发优化算法(Metaheuristic optimization algorithms, MH)的性能。MH的性能是通过不同的数学基准测试函数和各种实际工程设计问题来评估&#xff0c;这些基…

【项目实战】Android Studio简单实现图书馆借阅管理系统

希望文章能给到你启发和灵感&#xff5e; 点赞收藏关注 支持一下吧&#xff5e; 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、整体设计2.1 数据库逻辑处理&#xff1a;2.2 登录/注册模块2.3 功能界面初始化&#xff1a;2.4 图书管理模块2.5 图书租借服务2.6 读…

第一节:如何开发第一个spring boot3.x项目(自学Spring boot 3.x的第一天)

大家好&#xff0c;我是网创有方&#xff0c;从今天开始&#xff0c;我会记录每篇我自学spring boot3.x的经验。只要我不偷懒&#xff0c;学完应该很快&#xff0c;哈哈&#xff0c;更新速度尽可能快&#xff0c;想和大佬们一块讨论&#xff0c;如果需要讨论的欢迎一起评论区留…

MATLAB | 怎样绘制这样的环形柱状图

Hey, 各位又是好久不见&#xff0c;最近忙到后台消息都有些来不及看&#xff0c;非常抱歉&#xff0c;今天带来一个环形柱状图绘制的简易小代码,绘制效果如下&#xff1a; 下面直接给出完整代码&#xff0c;替换一下数据即可&#xff0c;代码都有注释的&#xff1a; 完整代码 …

OLMo:真正完全开源的大模型

最近&#xff0c;又有一家机构AI2&#xff08;Allen Institute for AI&#xff09;开源了一个LLM&#xff1a;OLMo&#xff0c;它的英文全称就叫Open Language Model。相比之前开源的大模型&#xff0c;OLMo的独特之处是完全开源&#xff0c;除了训练的模型&#xff0c;OLMo还开…

数据结构速成--查找

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 …