1 点阵LED
1.1 需求描述
本案例介绍如何使用点阵LED显示一排由左上到右下的斜线。
1.2 硬件设计
1.2.1 硬件原理图
点阵内部的原理图:
点阵LED的原理也非常简单,就是LED点灯。例如,我们想要让13列(阳极端)9行(阴极端)的LED点亮,需要13为高电平,9为低电平。注意对于我们的硬件原理图,阳极端通过74HC595芯片驱动,阴极端接P00-P07。
如果想让点阵LED显示我们想要的图案,要采用“逐行扫描”的思路:通过74HC595芯片,依次激活每一行的阳极,再通过P0端口选择该行想点亮的LED即可。
1.2.2 点阵LED工作流程
1.2.3 74HC595工作原理
74HC595我们总共接入了以下3个引脚:
引脚 | 作用 |
---|---|
SER(网络名称P36) | 数据输入端(IO线) |
RCK(网络名称P35) | 输出存储器锁存时钟端(数据寄存器时钟) |
SCK(网络名称P34) | 数据输入时钟端(位移寄存器时钟) |
1.3 软件设计
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 P36
#define SCK P34
#define RCK P35
// 设置缓存,每个字节代表点阵的一行,单行中每个bit,1为亮,0为灭
static u8 s_led_buff[8];
void Int_MatrixLED_Init()
{
u8 i;
for (i = 0; i < 8