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

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

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

相关文章

JavaScript的学习之文档的加载

目录 一、onload的运用 浏览器在加载一个页面时&#xff0c;是按照自上而下的顺序加载的&#xff0c;读取到一行就执行一行&#xff0c; 如果script标签写到页面的上方&#xff0c;在代码执行时&#xff0c;页面还没有加载&#xff0c;所以要将JS代码写道页面下面 一、onload的…

Python使用attr库打造数据类,你还在手写构造函数吗?

1、attr库基础介绍 🛠️ 1.1 attr安装与导入 在Python中,attr库是一个简化创建数据类的工具 ,它通过简洁的语法自动添加属性和方法 ,如getter、setter等。要开始使用attr,首先需要通过pip安装这个库。打开终端或命令提示符,运行以下命令进行安装: pip install attrs…

2024软件设计师笔记之考点版(一考就过):11-25

软件设计师之一考就过:成绩版 考点11:防火墙、入侵检测 真题1:(专家系统、模型检测、简单匹配)属于入侵检测;而漏洞扫描不属于。 真题2:防火墙特性包括(控制进出网络的数据包和数据流向、提供流量信息的日志和审计、隐藏内部IP以及网络结构细节),但不包括提供漏洞扫…

「6.25更新日志」JVS·智能BI、逻辑引擎(服务编排)功能更新说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

AttributeError: module ‘numpy‘ has no attribute ‘long‘

我使用的numpy版本是1.26.4。numpy.long在numpy 1.20就不维护了&#xff0c;numpy 1.24就移除掉了&#xff0c;因此解决方案之一就是重新安装numpy 或者&#xff0c;ctrl鼠标左键定位到报错的地方&#xff0c;将numpy.long改为numpy.longlong。 https://numpy.org/devdocs/rele…

NetSuite Account Merge 科目合并功能分析

最近项目中&#xff0c;客户有提到过能否将不用的Account与新建的Account进行合并&#xff0c;即我们所说的Merge功能&#xff5e;可以&#xff0c;但是该功能有使用的限制&#xff0c;比如最直接的一点需要注意&#xff0c;不同类型的Account是不可以使用Merge功能的&#xff…

mysql数据库中使用存储过程带来的好处和示例(存储过程的概念、定义、作用等详解)

目录 一、概述 二、存储过程的作用 1、代码重用 2、简化复杂操作 3、提高性能 4、安全性和数据完整性 三、相对于sql操纵语句&#xff08;select、insert等&#xff09;存储过程的好处 1、代码重用和封装 &#xff08;1&#xff09;概述 &#xff08;2&#xff09;举…

红酒舞动,运动风采,品味力与美

当夜幕降临&#xff0c;城市的灯火渐次亮起&#xff0c;忙碌了一天的人们开始寻找那份属于自己的宁静与愉悦。在这个时刻&#xff0c;红酒与运动&#xff0c;这两个看似截然不同的元素&#xff0c;却能以它们不同的魅力&#xff0c;为我们带来一场视觉与感官的盛宴。 红酒&…

多供应商食品零售商城系统的会员营销设计和实现

在多供应商食品零售商城系统中&#xff0c;会员营销是提升用户粘性和增加销售的重要手段。一个有效的会员营销系统能够帮助平台更好地了解用户需求&#xff0c;提供个性化服务&#xff0c;进而提高用户满意度和忠诚度。本文将详细探讨多供应商食品零售商城系统的会员营销设计与…

四川赤橙宏海商务信息咨询有限公司一站式抖音电商服务

在数字化浪潮汹涌的当下&#xff0c;电商行业正以前所未有的速度发展&#xff0c;而抖音电商作为其中的佼佼者&#xff0c;更是吸引了无数商家和消费者的目光。在这个充满机遇与挑战的市场中&#xff0c;四川赤橙宏海商务信息咨询有限公司凭借其专业的服务和丰富的经验&#xf…

免费资源推荐丨维普OA期刊服务:OA传播 可在线阅读,可下载PDF

《OA传播(Communication based on Open Access,CBOA)》数据库 产品介绍 OA传播(Communication based on Open Access,CBOA)由重庆非晓数据科技有限公司(重庆维普资讯有限公司子公司)出品&#xff0c;是以服务全球科学研究与技术创新为宗旨的OA学术文献一站式免费检索、下载、传…

背包模型——AcWing 423. 采药

背包模型 定义 背包模型是一种常见的算法问题模型&#xff0c;它主要涉及将一些物品放入一个容量有限的背包中&#xff0c;以达到某种最优目标&#xff0c;如最大化价值或最小化重量等。 运用情况 常用于资源分配、项目选择、货物装载等实际问题中。例如&#xff0c;在选择…

深圳比创达EMC|EMC与EMI滤波器:在电子设备中的平衡之道

随着科技的快速发展&#xff0c;电子设备已经深入到我们生活的方方面面&#xff0c;从家用电器到工业设备&#xff0c;从通信设备到医疗仪器&#xff0c;都离不开电子技术的支持。然而&#xff0c;电子设备在带来便利的同时&#xff0c;也面临着电磁兼容&#xff08;EMC&#x…

照片变漫画怎么弄?这5个照片变漫画方法超简单

在艺术和社交融合的现在&#xff0c;将照片转换为漫画风格已经成为一种流行趋势。 无论是为了创造个性化的头像&#xff0c;还是制作有趣的社交媒体帖子&#xff0c;拥有一款能够将照片转换为漫画的软件将极大地丰富你的创意表达。 下面&#xff0c;本文将介绍几款能够实现这…

【浦语开源】深入探索:大模型全链路开源组件 InternLM Lagent,打造灵笔Demo实战指南

一、准备工作&#xff1a; 1、环境配置&#xff1a; pip、conda换源&#xff1a; pip临时换源&#xff1a; pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple some-package# 这里的“https://mirrors.cernet.edu.cn/pypi/web/simple”是所换的源&#xff0c;…

TDengine 推出新连接器,与 Wonderware Historian 无缝连接

在最新发布的TDengine 3.2.3.0 版本中&#xff0c;我们进一步更新了 TDengine 的数据接入功能&#xff0c;推出了一款新的连接器&#xff0c;旨在实现 Wonderware Historian&#xff08;现称为 AVEVA Historian&#xff09;与 TDengine 的集成。这一更新提供了更加便捷和高效的…

什么是钢直尺“光学影像式”仪器校准方法?

计量和我们生活密不可分&#xff0c;但是对于计量的了解大多数人并不深入&#xff0c;因此也会存在一些认知上的误差。比如一个体温计买来才几十块&#xff0c;但是做一次校准费用就是一两百。又或者是一把钢直尺才十几块成本&#xff0c;校准的费用却是成本的三到四倍。 不了…

选择诊所管理系统的原则是什么?

如今&#xff0c;诊所管理系统已成为医疗机构提升管理效率、优化患者服务的重要工具。然而&#xff0c;市场上的诊所管理系统琳琅满目&#xff0c;功能各异&#xff0c;因此&#xff0c;如何选择一款适合自己诊所的管理系统&#xff0c;是许多诊所管理者需要思考的问题。下面&a…

SpringBoot-在配置文件中使用Profile

Profile&#xff0c;译为“配置文件” 在这里的Spring Boot也是一样&#xff0c;我们可以配置很多个Profile&#xff0c;每个Profile都对应一整个完整的全局配置&#xff0c;激活哪个&#xff0c;那个对应的全局配置就生效&#xff0c;具体的配置&#xff1a; 1、properties格…

[leetcode]number-of-longest-increasing-subsequence

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int findNumberOfLIS(vector<int> &nums) {int n nums.size(), maxLen 0, ans 0;vector<int> dp(n), cnt(n);for (int i 0; i < n; i) {dp[i] 1;cnt[i] 1;for (int j 0; j < i…