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

news2024/11/28 11:54:38

点阵屏介绍

 

类似于数码管,要用到肉眼视觉效应。扫描,才能把每一个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.coloradmin.cn/o/1450502.html

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

相关文章

js示例1(图片轮播)

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>图片轮播</title><style>#box{ /*给图片盒子创建样式*/ width : 400px;height : 400px; margin: 0 auto; position: rela…

为自监督学习重构去噪扩散模型

在这项研究中&#xff0c;作者检验了最初用于图像生成的去噪扩散模型&#xff08;DDM&#xff09;的表示学习能力。其理念是解构DDM&#xff0c;逐渐将其转化为经典的去噪自动编码器&#xff08;DAE&#xff09;。这一解构过程让大家能够探索现代DDM的各个组成部分如何影响自监…

react 【七】各种hooks的使用/SPA的缺点

文章目录 1、Hook1.1 为什么会出现hook1.2 useState1.3 useEffect1.4 useContext1.5 useReducer1.6 useCallback1.7 useMemo1.8 useRef1.8.1 ref绑定dom1.8.2 ref解决闭包缺陷 1.9 useImperativeHandle1.10 useLayoutEffect1.11 自定义Hook1.11.1 什么是自定义Hook1.11.2 Conte…

问题:从完整的问题解决过程来看,( )是首要环节。A.理解问题 B.提出假设C.发现问题 D.检验假设 #学习方法#学习方法

问题&#xff1a;从完整的问题解决过程来看&#xff0c;&#xff08; &#xff09;是首要环节。A&#xff0e;理解问题 B&#xff0e;提出假设C&#xff0e;发现问题 D&#xff0e;检验假设 A.理解问题 B.提出假设 C&#xff0e;发现问题 参考答案如图所示

LabVIEW高效电磁阀性能测试

LabVIEW高效电磁阀性能测试 在核电站的安全运营中&#xff0c;电磁阀作为关键组件&#xff0c;其性能的可靠性至关重要。设计一套基于LabVIEW的电磁阀测试平台&#xff0c;既能精准测试电磁阀的多项性能指标&#xff0c;又能提高检修效率与准确性&#xff0c;进而保障核电站的…

Word docx文件重命名为zip文件,解压后直接查看和编辑

一个不知道算不算冷的知识[doge]&#xff1a; docx格式的文件本质上是一个ZIP文件 当把一个.docx文件重命名为.zip文件并解压后&#xff0c;你会发现里面包含了一些XML文件和媒体文件&#xff0c;它们共同构成了Word文档的内容和格式。 例如&#xff0c;word/document.xml文件…

平时积累的FPGA知识点(8)

平时在FPGA群聊等积累的FPGA知识点&#xff0c;第八期&#xff1a; 21 FFT IP核 有遇到过FFT IP核测量频率不准确的问题吗&#xff1f;大部分情况下都是准的&#xff0c;偶尔偏差比较大&#xff0c;IP核输入的数据用matlab计算出的频率是对的。 解释&#xff1a;可能是采样点…

扶贫|精准扶贫管理系统|基于Springboot的精准扶贫管理系统设计与实现(源码+数据库+文档)

精准扶贫管理系统目录 目录 基于Springboot的精准扶贫管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 &#xff08;1&#xff09;用户信息管理 &#xff08;2&#xff09;贫困户信息管理 &#xff08;3&#xff09;新闻类型管理 &a…

php基础学习之可变函数(web渗透测试关键字绕过rce于回调函数)

可变函数 看可变函数的知识点之前&#xff0c;蒟蒻博主建议你先去看看php的可变变量&#xff0c;会更加方便理解&#xff0c;在本篇博客中的第五块知识点->php基础学习之变量-CSDN博客 描述 当一个变量所保存的值刚好是一个函数的名字&#xff08;由函数命名规则可知该值必…

2024年【T电梯修理】报名考试及T电梯修理考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【T电梯修理】报名考试及T电梯修理考试报名&#xff0c;包含T电梯修理报名考试答案和解析及T电梯修理考试报名练习。安全生产模拟考试一点通结合国家T电梯修理考试最新大纲及T电梯修理考试真题汇总&#xff0c;…

书生浦语大模型实战营-课程笔记(3)

本节课主要是跟着教程做的&#xff0c;操作的东西放到作业里记录了。 这里主要记录一些视频里讲的非操作性的东西。 RAG外挂知识库&#xff1f;优点是成本低&#xff0c;不用重新训练 RAG的一个整体流程。 涉及了文本相似度匹配&#xff0c;是不是和传统的问答系统&#xff0…

SpringCloud之Nacos用法笔记

SpringCloud之Nacos注册中心 Nacos注册中心nacos启动服务注册到Nacosnacos服务分级模型NacosRule负载均衡策略根据集群负载均衡加权负载均衡Nacos环境隔离-namespace Nacos与eureka的对比临时实例与非临时实例设置 Nacos配置管理统一配置管理微服务配置拉取配置自动刷新远端配置…

【白话前端】扫盲贴:Svg动画和Canvas动画区别

SVG动画和Canvas动画是两种不同的Web动画技术&#xff0c;它们的实现方式、适用场景和优缺点有所不同。 SVG动画是基于矢量图形的动画技术&#xff0c;使用XML描述图形&#xff0c;并在浏览器中渲染出来。SVG动画可以通过JavaScript或CSS来控制SVG元素的属性值变化&#xff0c;…

Activation of network connection failed(ubuntu连不上网)

ubuntu连不上网&#xff0c;看了好几个方法找到个有用的记录一下 1. 还原默认设置 2. 更改适配器&#xff1a;加上vmware bridge protocol

积分(二)——复化Simpson(C++)

前言 前言 simpson积分 simpson积分公式 ∫ a b f ( x ) d x ≈ b − a 6 [ f ( a ) f ( b ) 4 f ( a b 2 ) ] \int_{a}^{b}f(x)dx \approx \frac{b-a}{6}[f(a)f(b)4f(\frac{ab}{2})] ∫ab​f(x)dx≈6b−a​[f(a)f(b)4f(2ab​)] 与梯形积分类似&#xff0c;当区间[a,b]较…

文件上传漏洞:upload-labs靶场通关

目录 什么是文件上传漏洞&#xff1f; 第1关&#xff08;客户端验证-前端&#xff09; 第2关&#xff08;文件类型校验-MIME校验 &#xff09; 第3关&#xff08;文件名校验-黑名单绕过&#xff09; 第4关&#xff08;文件后缀校验-.htacess绕过&#xff09; 第5关&#…

GPIO八种工作模式

目录 一、推挽输出 二、开漏输出 三、复用推挽输出 四、复用开漏输出 五、浮空输入 六、上拉输入 七、下拉输入 八、模拟输入 GPIO八种配置模式&#xff0c;原理和使用场景&#xff0c;硬件原理如下图&#xff1a; 一、推挽输出 1、 原理 当控制栅极为低电平时&#x…

随机过程及应用学习笔记(四) 马尔可夫过程

马尔可夫过程是理论上和实际应用中都十分重要的一类随机过程。 目录 前言 一、马尔可夫过程的概念 二、离散参数马氏链 1 定义 2 齐次马尔可夫链 3 齐次马尔可夫链的性质 三、齐次马尔可夫链状态的分类 四、有限马尔可夫链 五、状态的周期性 六、极限定理 七、生灭过…

找不到目标和方向,怎么办?

现代社会里&#xff0c;许多人常见的症状&#xff0c;就是「空心病」。 什么是空心病呢&#xff1f;类似这样&#xff1a; 我知道要有目标&#xff0c;但我就是不知道想做什么&#xff0c;感觉对一切事物都提不起兴趣&#xff0c;没有动力&#xff0c;怎么办&#xff1f; 这个…

Mysql第一关之常规用法

简介 介绍Mysql常规概念&#xff0c;用法。包括DDL、DCL、DML、DQL&#xff0c;关键字、分组、连表、函数、排序、分页等。 一、 SQL DCMQ&#xff0c;分别代表DDL、DCL、DML、DQL。 模糊简记为DCMQ&#xff0c;看起来像一个消息队列。 D&#xff1a;Definition 定义语句 M…