当前位置: 首页 > news >正文

10天学会嵌入式技术之51单片机-day-6

 第十五章 点阵LED

15.1 点阵 LED 概述

15.1.1 实物图

15.1.1 原理图

15.2 点阵 LED 静态显示

15.2.1 需求描述

使用点阵 LED 显示一排由左上到右下的斜线,具体效果如下图所示。

15.2.2 硬件设计

15.2.2.1 硬件原理图

根据内部原理可知,点阵 LED 的显示需要逐行或者逐列扫描,此处选择逐行扫描。由
于每次扫描只需点亮一行,所以很容易想到,行的扫描可以通过 74HC238(类似于
74HC138,与 138 输出相反)芯片完成,以达到节省 MCU 引脚的目的。
每行要显示的内容由点阵 LED 阴极的 8 个引脚控制,将 8 个引脚接入 MCU 的 8 个
GPIO 引脚即可。具体的硬件原理图如下。

15.2.2.2 74HC595 使用说明

上述原理图显示,点阵 LED 的行扫描并未使用 74HC238 芯片,而是使用了 74HC595。
该芯片的用法如下。

74HC595 芯片的相关资料如下。

15.2.3 软件设计


15.2.3.1 实现思路

15.2.3.2 具体代码

1)Int_MatrixLED.h

在 Int 中新建 Int_MatrixLED.h,写入以下内容

#ifndef __INT_MATRIXLED_H__
#define __INT_MATRIXLED_H__
#include <STC89C5xRC.H>
#include "Util.h"
/**
* @brief 点阵 LED 初始化函数
*
*/
void Int_MatrixLED_Init();
/**
* @brief 设置点阵现实图像的函数
*
* @param pic 要显示的图像,数组长度必须为 8
*/
void Int_MatrixLED_SetPic(u8 *pic);
/**
* @brief 需要不断调用下面的函数刷新点阵 LED
*
*/
void Int_MatrixLED_Refresh();
#endif // __LED_MATRIX_H__

2)Int_MatrixLED.c

在 Int 中新建 Int_MatrixLED.c,写入以下内容:

#include "Int_MatrixLED.h"
#define SER P10
#define SCK P12
#define RCK P11
#define MATRIX_LED_EN P35
// 设置缓存,每个字节代表点阵的一行,单行中每个 bit,1 为亮,0 为灭
static u8 s_led_buff[8];
void Int_MatrixLED_Init()
{u8 i;
// 打开点阵 LEDMATRIX_LED_EN = 0;
// 初始化后,全部点阵关闭for (i = 0; i < 8; i++){s_led_buff[i] = 0;}
}void Int_MatrixLED_SetPic(u8 *pic)
{u8 i;for (i = 0; i < 8; i++){s_led_buff[i] = pic[i];}
}void Int_MatrixLED_Refresh()
{u8 i;SER = 1;SCK = 0;SCK = 1;SER = 0;for (i = 0; i < 8; i++){
// 展示下一行之前,关闭P0 = 0xFF;RCK = 0;RCK = 1;
// 当前行展示想展示的数据P0 = ~s_led_buff[i];SCK = 0;SCK = 1;Delay1ms(1);}
}

3)Main.c

在主文件夹新建 Main.c,写入以下内容

#include <STC89C5xRC.H>
#include "Int_MatrixLED.h"
void main()
{u8 pic[8] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};
Int_MatrixLED_Init();
Int_MatrixLED_SetPic(pic);while (1) {Int_MatrixLED_Refresh();}
}

15.3 点阵 LED 滚动显示

15.3.1 需求描述

LED 点阵屏滚动显示“尚硅谷”三个字。

15.3.2 软件设计

15.3.2.1 实现思路

15.3.2.2 完整代码

1)Int_MatrixLED.h

#ifndef __INT_LEDMATRIX_H__
#define __INT_LEDMATRIX_H__
#include "Com_Util.h"
void Int_LEDMatrix_Init();void Int_LEDMatrix_SetPic(u8 pic[]);void Int_LEDMatrix_Refresh();void Int_LEDMatrix_Shift(u8 pic);#endif /* __INT_LEDMATRIX_H__ */

2)Int_MatrixLED.c

#include "Int_LEDMatrix.h"
#include "Dri_Timer0.h"
#include <STC89C5xRC.H>
#define LED_MATRIX_EN P35
#define LED_EN        P34#define SER           P10
#define SCK           P12
#define RCK           P11static u8 s_buffer[8];
void Int_LEDMatrix_RefreshByTimer0();
void Int_LEDMatrix_Init()
{LED_MATRIX_EN = 0;LED_EN        = 0;Dri_Timer0_RegisterCallback(Int_LEDMatrix_RefreshByTimer0);
}void Int_LEDMatrix_SetPic(u8 pic[])
{u8 i;for (i = 0; i < 8; i++) {s_buffer[i] = pic[i];}
}void Int_LEDMatrix_Refresh()
{u8 i;for (i = 0; i < 8; i++) {P0 = 0xFF;// 1.设置显示哪行if (i == 0) {SER = 1;} else {SER = 0;}SCK = 0;SCK = 1;RCK = 0;RCK = 1;// 2.设置当前行的显示内容P0 = ~s_buffer[i];Com_Util_Delay1ms(1);}
}void Int_LEDMatrix_Shift(u8 pic)
{u8 i=7;for ( i = 0; i >=1 ; i--){s_buffer[i]=s_buffer[i-1];s_buffer[0]= pic ;}}void Int_LEDMatrix_RefreshByTimer0()
{static u8 i = 0;P0          = 0xFF;// 1.设置显示哪行if (i == 0) {SER = 1;} else {SER = 0;}SCK = 0;SCK = 1;RCK = 0;RCK = 1;// 2.设置当前行的显示内容P0 = ~s_buffer[i];i++;if (i == 8) {i = 0;}
}

3)Main.c

#include"Dri_Timer0.h"
#include"Int_LEDMatrix.h"
void main()
{u8 i;u8 picture[26] = {0xF8, 0x0A, 0xEC, 0xAF, 0xEC, 0x8A, 0xF8, 0x00,0x10, 0xF9, 0x97, 0xF1, 0x88, 0xAA, 0xFF, 0xAA,0x88, 0x00, 0x14, 0x0A, 0xF5, 0x92, 0x92, 0xF5,0x0A, 0x14};Dri_Timer0_Init();Int_LEDMatrix_Init();while(1){for ( i = 0; i < 26; i++){Int_LEDMatrix_Shift(picture[26]);Com_Util_Delay1ms(200);}}
}

相关文章:

  • 动态渲染页面智能嗅探:机器学习判定AJAX加载触发条件
  • Spring Boot默认缓存管理
  • tzdata 安装失败的一种处理
  • Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中进行数据验
  • Kotlin学习基础知识大全(上)
  • 大模型面经 | 春招、秋招算法面试常考八股文附答案(六)
  • Milvus(6):Collection 管理分区、管理别名
  • 运维打铁:Centos 7 使用yum安装 mysql5.7
  • Rust 学习笔记:编程语言的相关概念
  • HTML、XHTML 和 XML区别
  • 关于Safari浏览器在ios<16.3版本不支持正则表达式零宽断言的解决办法
  • HTML给图片居中
  • 【OSG学习笔记】Day 7: 材质与光照——让模型“活”起来
  • 数据库-数据类型、约束 和 DQL语言
  • 内网数据库怎么通过外网访问?本地SQL无公网IP如何让公网连接实现通用方法
  • 【ES实战】Elasticsearch中模糊匹配类的查询
  • 【mysql】windows mysql命令
  • Redis 基础和高级用法入门
  • 【TensorFlow深度学习框架】从数学原理到工业级应用
  • 国产紫光同创FPGA视频采集转SDI编码输出,基于HSSTHP高速接口,提供2套工程源码和技术支持
  • 美国清洗政治:一幅残酷新世界的蓝图正在展开
  • 农业农村部:把住能繁母猪存栏量“总开关”,引导养殖场户优化母猪存栏结构、合理控制产能
  • 西班牙葡萄牙遭遇史上最严重停电:交通瘫了,通信崩了,民众疯抢物资
  • 酒店就“保洁员调包住客港币”致歉,称希望尽早达成解决方案
  • 上海市委常委会传达学习总书记重要讲话精神,研究张江科学城建设等事项
  • 涨价应对关税变化是短期之策,跨境电商塑造新品牌开辟“新蓝海”