51单片机编程基础(C语言):LED点阵屏

点阵屏介绍

 

类似于数码管,要用到肉眼视觉效应。扫描,才能把每一个LED都能选中,从而显示我们想要的图形,否则, 只能一次点亮一个LED,

LED使用

51单片机点阵屏电路图:

实际连接顺序如下图:D0~D7控制行。P07~P00控制列

 D0~D7连接到74HC595上。

 

OE:OutputEnable,代表输出使能

 在介绍 74HC595模块时,首先介绍一下J24模块,要是想使用74HC595模块,就必须要将OE端接到GND端,如图所示,因为OE是低电平有效,所以OE需要接到GND端才能控制点阵屏。

接高电平是控制LED模块,

SRCLR:低电平有效,清空数据,把存入的数据清空,硬件一直把它置1,不需要清空。

SERCLK:上电默认为高电平,初始化时设为低电平。每来一个上升沿移一次位,所以我们移完一次要置0,再置1.这样就可以给一次上升沿。

RCLK:同理,上电默认为高电平,初始化时设为低电平。每来一次上升沿,把数据并行输出

可以多片级联,把QH'连到下一个74HC595SER上,就实现的输出16位。

Byte&0x80 即取出Byte的最高位。SER是一位,Byte&0x80是8位数据。所以单片机有这样的操作

如果SER是一位,给的值不是0,就是1,即非0即1.给2566,也是1.

爱心的代码:

#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  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;
}
 
void main()
{
	SCK=0;
	RCK=0;
	while(1)
	{
		MatrixLED_ShowColumn(0,0x30);
		MatrixLED_ShowColumn(1,0x78);
		MatrixLED_ShowColumn(2,0x7C);
		MatrixLED_ShowColumn(3,0x3E);
		MatrixLED_ShowColumn(4,0x7C);
		MatrixLED_ShowColumn(5,0x78);
		MatrixLED_ShowColumn(6,0x30);
		MatrixLED_ShowColumn(7,0x00);
	}
}

数码管消隐的目的是为了避免动态显示时出现数字不清晰或出现亮阴影的问题。动态显示利用了人眼的暂留效应,通过快速切换数码管的显示状态来实现多位数字的显示。在动态显示过程中,单片机通过IO口控制数码管的段码,先进行位选,然后发送段码,接着进行延时(通常在1到3毫秒之间),最后关闭位选。这个延时的过程就是消隐作用,它确保了当前位选关闭后,下一位选的段码发送时,当前位的段码不会继续显示,从而避免了显示混乱的情况。如果没有进行消隐,下一位的段码在发送时,当前位的段码仍然会显示,导致视觉上的干扰和不清晰。

实现动态:

#include <REGX52.H>
#include "Delay.h"
#include "MatrixLED.h"
// 通过数组来实现动态效果
unsigned char Animation[] = {
0x30,0x78,
0x7C,0x3E,
0x7C,0x78,
0x30,0x00,
0x30,0x78,
0x7C,0x3E,
0x7C,0x78,
0x30,0x00,	
};
 
void main(){
	
	unsigned char i,Offset = 0, Count = 0;
	
	MatrixLED_Tnit();    // 初始化
	
	while(1){
		for(i = 0; i < 8; i++){
		MatrixLED_ShowColumn(i, Animation[i + Offset]);    // 带偏移量的显示数据,实现动态效果
		}
		Count++;
		if(Count > 10){    // 防止越界出现乱码
			Count = 0;
			Offset++;
			if(Offset > 8){
				Offset = 0;
			}
		}
	}
}

 MatrixLED.c

//MatrixLED.c的代码,.h 的代码应该能够轻易写出
#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  要写入的字节
  * @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  LED点阵屏显示一列数据
  * @param  Column 要显示的列 , 范围:0~7,0在最左边
			Data选择列要显示的数据,高位在上,1为亮,0为灭
  * @retval 无
  */
void MatrixLED_ShowColumn(unsigned char Column, unsigned char Data)
{
	_74HC595_WriteByte(Data);
	MATRIX_LED_PORT = ~(0x80>>Column);
	Delay(2);
	MATRIX_LED_PORT = 0xFF;
}
/**
  * @brief  点阵屏初始化
  * @param  无
  * @retval 无
  */
void MatrixLED_Tnit()
{
	SCK = 0;
	RCK = 0;
}

  MatrixLED.h

#ifndef __MatrixLED_H__
#define __MatrixLED_H__
 
void _74HC595_WriteByte(unsigned char Byte);
void MatrixLED_ShowColumn(unsigned char Column, unsigned char Data);
void MatrixLED_Tnit();
 
#endif

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

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

相关文章

(06)Hive——正则表达式

Hive版本&#xff1a;hive-3.1.2 一、Hive的正则表达式概述 正则表达式是一种用于匹配和操作文本的强大工具&#xff0c;它是由一系列字符和特殊字符组成的模式&#xff0c;用于描述要匹配的文本模式。 Hive的正则表达式灵活使用解决HQL开发过程中的很多问题&#xff0c;本篇文…

Python dict函数

Python中的字典&#xff08;dict&#xff09;是一种非常重要且灵活的数据结构&#xff0c;它提供了键值对的存储和访问机制。字典函数&#xff08;dict()&#xff09;作为创建字典的工具之一&#xff0c;可以从多种数据结构中创建字典对象。在本文中&#xff0c;将深入探讨dict…

统一数据返回格式 及 可能遇到的问题;统一异常处理

统一数据返回格式 统一数据返回格式就像我们寄快递一样&#xff0c;不管你需要寄的东西具体是什么都需要将它打包到统一的快递箱中。 此时我们需要一个“快递箱”用来将返回的数据“装”在里面。这个类是根据业务情况来自行定义的。 Data public class Resp<T> {//200…

蓝桥杯嵌入式学习记录——PWM输出

目录 一、PWM原理介绍 二、学习目的 三、cubeMX的配置 四、PWM输出代码 一、PWM原理介绍 PWM&#xff08;Pulse Width Modulation&#xff0c;脉宽调制&#xff09;是一种通过改变信号的脉冲宽度来控制电平的技术。它通过调整脉冲信号的占空比&#xff08;高电平时间与周期…

TMGM官网平台开户运作流程如下:

TMGM官网平台开户运作流程如下&#xff1a; 首先&#xff0c;投资者需要注册并登录TMGM官网平台。在平台上&#xff0c;投资者可以选择适合自己的交易账户类型&#xff0c;包括标准账户、高级账户等。 然后&#xff0c;投资者需要进行身份验证和资金入账操作。TMGM会要求投资…

系统架构27 - 软件架构设计(6)

基于架构的软件开发方法 基于架构的软件开发方法&#xff08;ABSD&#xff09;概述概念与术语开发模型体系结构需求体系结构设计体系结构文档化体系结构复审体系结构实现体系结构的演化 基于架构的软件开发方法&#xff08;ABSD&#xff09; 基于体系结构的软件设计 (Architec…

2月3日作业

1.编程实现单向循环链表的头插&#xff0c;头删、尾插、尾删 尾插/头插&#xff0c;头删&#xff0c;尾删&#xff1a; 头文件&#xff1a; #ifndef __HEAD_H_ #define __HEAD_H_#include<stdio.h> #include<string.h> #include<stdlib.h>enum {FALSE-1,SU…

【教程】MySQL数据库学习笔记(一)——认识与环境搭建(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 文章目录 【MySQL数据库学习】系列文章一、认…

matplotlib雷达图制作具体步骤

此次我们制作的是关于护肤品下的畅销品类雷达图&#xff0c;数据如下&#xff1a; 数据预览&#xff1a; 一、代码展示 import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei] adress"D:/pandas练习文件/雷达…

关于Windows Media Player的一些知识,看这篇文章就差不多了

你知道如何在电脑上打开Windows Media Player吗?如果它不是你电脑上默认的媒体播放器,你知道如何将其设为默认吗?此外,如果你找不到它,你知道怎么把它找回来吗?这篇文章将向你展示你想要了解的所有信息。 在这篇文章中,我们将向你展示以下信息: 如何打开Windows Medi…

【MySQL/Redis】如何实现缓存一致

目录 不实用的方案 1. 先写 MySQL , 再写 Redis 2. 先写 Redis &#xff0c; 再写MySQL 3. 先删 Redis&#xff0c;再写 MySQL 实用的方案 1. 先删 Redis&#xff0c;再写 MySQL, 再删 Redis 2. 先写 MySQL , 再删 Redis 3. 先写MySQL&#xff0c;通过BinLog&#xff0…

Pytest测试技巧之Fixture:模块化管理测试数据

在 Pytest 测试中&#xff0c;有效管理测试数据是提高测试质量和可维护性的关键。本文将深入探讨 Pytest 中的 Fixture&#xff0c;特别是如何利用 Fixture 实现测试数据的模块化管理&#xff0c;以提高测试用例的清晰度和可复用性。 什么是Fixture&#xff1f; 在 Pytest 中&a…

ClickHouse--10--临时表、视图

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.临时表1.1 特征1.2 创建一个临时表 2.视图2.1 普通视图2.2 物化视图 1.临时表 1.1 特征 ClickHouse 支持临时表&#xff0c;临时表具备以下特征&#xff1a; 当…

[GYCTF2020]Blacklist

感觉是[强网杯 2019]随便注 的加强版&#xff0c;之前做的是最后可以通过prepare和execute实现对select的绕过&#xff0c;但是这题把这两个关键字也过滤了。 前面堆叠注入没啥问题&#xff0c;卡在了最后读取flag 查看其他师傅的wp&#xff0c;发现这个handler的可以当作丐版s…

html的超链接标签 a

超链接标签: a a标签有2个重要的属性&#xff0c;href和target属性。 href:必须具备&#xff0c;表示点击后会跳转到哪个页面 target:打开方式.默认是 _self.如果是 _blank则用新的标签页打开. 超链接href属性的使用展示 1.通过图片展示 示例代码 运行效果&#xff1a; 点…

Android---Jetpack Compose学习005

动画 1. 简单值动画 示例&#xff1a;背景颜色在紫色和绿色之间&#xff0c;以动画形式切换。使用 animateColorAsState() val backgroundColor by animateColorAsState(if (tabPage TabPage.Home) Purple100 else Green300) 该句代码中&#xff0c;有一个 backgroundColo…

D. Divisible Pairs

思路&#xff1a;我们预处理出每个数分别摸上xy的值&#xff0c;用map存一下&#xff0c;然后遍历每个数&#xff0c;如果a b是x的倍数的话&#xff0c;那么他们模x的值相加为x&#xff0c;如果a - b是y的倍数的话&#xff0c;那么他们的模y的值相等。 代码&#xff1a; voi…

浅析Linux内核线程监测机制:Hung Task

文章目录 概述Hung Task配置Hung Task机制初始化Hung Task监测线程 相关参考 概述 Hung Task机制周期性地监测系统中处于TASK_UNINTERRUPTIBLE状态&#xff08;即D状态&#xff09;的进程&#xff0c;如果超过120s&#xff08;时间可配&#xff09;&#xff0c;进程状态还没有…

解决:RuntimeError: shape ‘[1, 3, 32, 32]‘ is invalid for input of size 4096

报错&#xff1a; 原因&#xff1a; 因为我下载的图片是4通道的&#xff1a;通过下面打印出来的结果可知是RGBA四通道的。 解决方法&#xff1a; 但是网络的输入需要RGB三通道&#xff0c;因此需要使用下列方法进行转换&#xff1a; image_path "../imgs/dog.png"…

红色系可视化界面,偶尔用用可以,长时间太刺眼。

继昨日发了白色的可视化界面&#xff0c;表明了不适合做大屏展示用&#xff0c;友友们从很多角度阐述了&#xff0c;为什么不能用白色&#xff0c;大家的结论基本一致。 今天发一些红色&#xff0c;这些在某个节日用个一小会还行&#xff0c;长时间用肯定不适合。