复习单片机:8*8点阵--->点亮第一个点(内含:1LED 点阵介绍+2 硬件设计+3 软件设计+4.原始代码+5 实验现象)

简介: 复习单片机:8*8点阵--->点亮第一个点(内含:1LED 点阵介绍+2 硬件设计+3 软件设计+4.原始代码+5 实验现象)

在前面章节,我们介绍过静态数码管和动态数码管显示,其中动态数码管是

一种应用非常多的显示设备,除此之外还有很多应用广泛的显示装置,比如 LED

点阵屏、LCD 液晶显示器等。我们开发板上使用了 64 个红色 LED 按照行列排布

组成的 8*8LED 点阵。本章就来介绍 LED 点阵的使用,通过本章的学习,让大家

能够在 8*8LED 点阵屏上显示信息。本章所要实现的功能是:在 8*8LED 点阵屏上

点亮一个点,上述功能实现后再显示数字图形等。学习本章可以参考前面的实验

章节内容。本章分为如下几部分内容:

1 LED 点阵介绍

2 硬件设计

3 软件设计

4 实验现象

1 LED 点阵介绍:

LED 点阵是由发光二极管排列组成的显示器件,在我们日常生活的电器中随

处可见,被广泛应用于汽车报站器,广告屏等。如下所示:


3124bf7b68024d069e83690ed5e6a9e5.png


通常应用较多的是 8*8 点阵,然后使用多个 8*8 点阵可组成不同分辨率的 LED

点阵显示屏,比如 16*16 点阵可以使用 4 个 8*8 点阵构成。因此理解了 8*8LED

点阵的工作原理,其他分辨率的 LED 点阵显示屏都是一样的。这里以 8*8LED 点

阵来做介绍。其内部结构图如下所示:


8602915fe2fa40a6bbadf779ec7dbe0c.png


8*8 点阵共由 64 个发光二极管组成,且每个发光二极管是放置在行线和列线

的交叉点上,当对应的某一行置 1 电平,某一列置 0 电平,则相应的二极管就亮;

如要将第一个点点亮,则 1 脚接高电平 a 脚接低电平,则第一个点就亮了;如果

要将第一行点亮,则第 1 脚要接高电平,而(a、b、c、d、e、f、g、h )这些

引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第 a 脚接低电平,

而(1、2、3、4、5、6、7、8)接高电平,那么第一列就会点亮。由此可见,LED

点阵的使用也是非常简单的。

2 硬件设计:

本实验使用到硬件资源如下:

1)8*8LED 点阵模块

2)74HC595 模块

74HC595 模块、8*8LED 点阵模块电路在前面章节都介绍过,电路如下:


c9651992443d44d8acb41cd670b6ed44.png


从上图中可以看出,74HC595 需要用到的控制管脚 SER、RCLK、SRCLK 直接连

接到 51 单片机的 P3.4-P3.6 IO 口上,输出端则是直接连接到 LED 点阵模块的行

端口上,即为 LED 发光二极管的阳极,LED 点阵的列则为发光二极管的阴极。

要想控制 LED 点阵,可以将单片机管脚按照 74HC595 芯片的通信时序要求来

传输数据,这样即可控制 LED 点阵的行数据。根据 LED 发光二极管导通原理,当

阳极为高电平,阴极为低电平则点亮,否则熄灭。因此通过单片机 P0 口可控制

点阵列,74HC595 可控制点阵行。

3.软件设计:

本章所要实现的功能是:在点阵屏上点亮一个点,上述功能实现后再显示数

字和图形。

代码很简单,与上一章核心代码是一样的,这里主要是理解如何让 LED 点阵

的左上角第一个点点亮,实际上就是将第一个点对应的行为高电平,列为低电平

即可。也就是让 74HC595 输出 0X80(

1000 0000),这样点阵第一行就是高电平,

而 P0 口输出 0X7F(

0111 1111),这样点阵第一列就是低电平,从而让 LED 点 阵第一个点点亮。

4.原始代码:


#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define LEDDZ_COL_PORT P0
sbit SRCLK=P3^6;
sbit rCLK=P3^5;
sbit SER=P3^4;
gsm[8]={0x01,0x02,0x04,0x08,
        0x10,0x20,0x40,0x80};
void delay_10us(u16 ten_us)
{
    while(ten_us--);
}
void hc595_write_data(u16 dat)
{
    u8 i=0;
    for(i=0;i<8;i++)
    {
        SER=dat>>7;
        dat<<=1;
        SRCLK=0;
        delay_10us(1);
        SRCLK=1;
        delay_10us(1);
    }
    rCLK=0;
    delay_10us(1);
    rCLK=1;
}
void main()
{
    u8 i=0;
//将 LED 点阵左边第一列设置为 0,
//即 LED 阴极为低电平,其余列为 1,
//即高电平,即0111 1111
    LEDDZ_COL_PORT=0x7f;
    while(1)
    {
        //将 LED 点阵上边第一行设置为 1,
        //即 LED 阳极为高 电平,其余行为 0,
        //即低电平
        hc595_write_data(0x80);
    }
}

5.实验现象:


使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口),

把编译后产生的.hex 文件烧入到芯片内,实现现象如下:8*8LED 点阵左上角显

示第一个点。


7bc746fc49c847f6aba8e0461faebd4d.png


相关文章
|
5天前
|
传感器
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
|
5天前
|
传感器
51单片机矩阵键盘超详解!(内含LCD1602代码)
51单片机矩阵键盘超详解!(内含LCD1602代码)
12 0
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
|
5天前
|
C++
【51单片机】添加模块代码的常见问题(图示&代码演示)
【51单片机】添加模块代码的常见问题(图示&代码演示)
【51单片机】烧写教程:将代码下载到单片机中(图示&解析)
【51单片机】烧写教程:将代码下载到单片机中(图示&解析)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
|
5天前
|
芯片 数据格式
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
【单片机】简单的自定义延时程序设计(代码演示)
【单片机】简单的自定义延时程序设计(代码演示)