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.hqwc.cn/news/468837.html

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

相关文章

寒假作业:2024/2/14

作业1&#xff1a;编程实现二维数组的杨辉三角 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {int n;printf("please enter n:");scanf("%d",&n);int a…

17 ABCD数码管显示与动态扫描原理

1. 驱动八位数码管循环点亮 1.1 数码管结构图 数码管有两种结构&#xff0c;共阴极和共阳极&#xff0c;ACX720板上的是共阳极数码管&#xff0c;低电平点亮。 1.2 三位数码管等效电路图 为了节约I/O接口&#xff0c;各个数码管的各段发光管被连在一起&#xff0c;通过sel端…

使用 Chainlit, Langchain 及 Elasticsearch 轻松实现对 PDF 文件的查询

在我之前的文章 “Elasticsearch&#xff1a;与多个 PDF 聊天 | LangChain Python 应用教程&#xff08;免费 LLMs 和嵌入&#xff09;” 里&#xff0c;我详述如何使用 Streamlit&#xff0c;Langchain, Elasticsearch 及 OpenAI 来针对 PDF 进行聊天。在今天的文章中&#xf…

CVE-2023-41892 漏洞复现

CVE-2023-41892 开题&#xff0c;是一个RCE Thanks for installing Craft CMS! You’re looking at the index.twig template file located in your templates/ folder. Once you’re ready to start building out your site’s front end, you can replace this with someth…

30个AI变现案例(上)

精选整理了30个AI变现案例&#xff0c;每一个都可以作为一个完整的副业去实践&#xff0c;AI时代已经来了&#xff0c;所有不甘于现状的朋友&#xff0c;都应该去下场&#xff0c;先把手弄脏&#xff0c;不要怕&#xff0c;实践起来&#xff01; 1&#xff0e;【副业创业】AI剧…

AIGC | AI提示词构建

文章目录 &#x1f4da;BARD提示词构建法&#x1f407;前言&#x1f407;第一步&#xff1a;阐述背景Background&#x1f407;第二步&#xff1a;定义目标Aim&#x1f407;第三步&#xff1a;设定角色Role&#x1f407;第四步&#xff1a;设置要求Demand &#x1f4da;测试与迭…

【2024年毕设系列】如何使用Anaconda和Pycharm

【2024年毕设系列】如何使用Anaconda和Pycharm 视频教程地址&#xff1a;【2024毕设系列】Anaconda和Pycharm如何使用_哔哩哔哩 Hi&#xff0c;各位好久不见&#xff0c;这里是肆十二&#xff0c;首先在这里给大伙拜年了。 诸位过完年之后估计又要开始为了大作业和毕业设计头疼…

【成长记录】第一次写博客入csdn榜单了 还是第一.....

庆祝一下第一次拿综合榜榜一 Java内容榜第二 总之谢谢大家支持 小苏会继续努力的 可以看看我的新作 嘻嘻&#x1f601;&#x1f924;&#x1f449;&#x1f3fb;&#x1f448;&#x1f3fb; 谢谢大家

仰暮计划|“现在的人谁吃不到白馒头,别说馒头了,肉都是说吃都吃了,哪还有人就能吃黑窝窝,俺那时候饿了有可能连黑窝窝都吃不上”

以爱为载&#xff0c;伴忆往昔 在我上初中之后&#xff0c;我就开始住校&#xff0c;后来随着我的长大&#xff0c;回家的频率越来越低&#xff0c;对奶奶的关心也越来越少了&#xff0c;这次参加这个帮老人整理记忆碎片的活动&#xff0c;我更加意识到对奶奶的了解还远远不够&…

Vue项目创建和nodejs使用

Vue项目创建和nodejs使用 一、环境准备1.1.安装 node.js【下载历史版本node-v14.21.3-x64】1.2.安装1.3.检查是否安装成功&#xff1a;1.4.在Node下新建两个文件夹 node_global和node_cache并设置权限1.5.配置npm在安装全局模块时的路径和缓存cache的路径1.6.配置系统变量&…

Java 基于springboot+vue在线外卖点餐系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

社区店选址地理位置评估:大数据分析的力量

大家好&#xff0c;我是一名有着 5 年开店经验的鲜奶吧创业者。在这 5 年的时间里&#xff0c;我深切地体会到了选址对于一家社区鲜奶吧的重要性。一个好的地理位置可以为你的店铺带来源源不断的客流&#xff0c;而一个糟糕的位置则可能让你的创业之路充满坎坷。 在这里&#…