普中51单片机教程-8.LED点阵屏

本文介绍了LED点阵的工作原理,包括74HC595芯片的使用方法,以及如何通过编程实现点阵屏的显示、消影操作和动画效果。作者提供了详细的步骤和代码实例,展示了如何控制LED点阵屏显示各种图形和文本动画。
摘要由CSDN通过智能技术生成

1.LED点阵介绍

2.内部结构图 

 

3.74HC595介绍 

 跳线帽如此插入

       

比如我们SER串行数据为10100000,每当SERCLK来一个上升沿,就是低电平向高电平的跳跃,那么SER的高位移入,以此类推,当八位全部移入时,RCLK来一个上升沿,就会将这八位数据全部送入输出端 

4.原理图

5.LED点阵屏显示图形

步骤:

1)位声明

2)配置74HC595

3)点阵屏函数

如上,0xAA的话,即1010 1010,高电平有效,高位为A1,以此类推,因此理论上应该为第1、3、5、7行被选中

列为0的话,选择第1列

那么效果应该就是第1列的第1、3、5、7行的LED被点亮

事实确实如此

 4)也需要进行消影操作

段选 位选 延时 位清零 段选 位选.....

5)显示多位

在消影的基础上 

效果如下:

 6)显示图案

代码如下:

#include <REGX52.H>
#include "Delay.h"

sbit RCK=P3^5;//位声明,原理图的RCLK,
                            //因为会和REGX头文件中的声明冲突
sbit SCK=P3^6;//原理图的SRCLK
sbit SER=P3^4;//SER

void _74HC595_(unsigned char Byte)
    //char为一个字节,即Byte为8位
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
    SER=Byte&(0x80>>i);//1000 0000,第一次先保留Byte的高位
                                        //然后i=1,1000 0000循环右移,0100 0000
                                        //相当于Byte&0x40,以此类推
    SCK=1;//来个上升沿。依次把Byte的八位移入,从最高位为开始
    SCK=0;//清零,准备下一个移位
    }
    RCK=1;//将移入的八位送入输出端
    RCK=0;
}

void MatrixLED(unsigned char x,y)//行和列
{
    _74HC595_(x);//选择第几行,A1为最高位
    P0=~(0x80>>y);//选择第几列,高位即P07为第一列
                                //y=0,即选择第1列
    //消影
    Delay(1);//延时     
    P0=0xFF;//位清零
}

void main()
{
    SCK=0;
    RCK=0;
    while(1)
    {
        MatrixLED(0x3C,0);
        MatrixLED(0x42,1);
        MatrixLED(0xA9,2);
        MatrixLED(0x85,3);
        MatrixLED(0x85,4);
        MatrixLED(0xA9,5);
        MatrixLED(0x42,6);
        MatrixLED(0x3C,7);
    }
}

6.模块化

1)MatrixLED.c

#include <REGX52.H>
#include "Delay.h"

sbit RCK=P3^5;//位声明,原理图的RCLK,
                            //因为会和REGX头文件中的声明冲突
sbit SCK=P3^6;//原理图的SRCLK
sbit SER=P3^4;//SER

void _74HC595_(unsigned char Byte)
    //char为一个字节,即Byte为8位
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
    SER=Byte&(0x80>>i);//1000 0000,第一次先保留Byte的高位
                                        //然后i=1,1000 0000循环右移,0100 0000
                                        //相当于Byte&0x40,以此类推
    SCK=1;//来个上升沿。依次把Byte的八位移入,从最高位为开始
    SCK=0;//清零,准备下一个移位
    }
    RCK=1;//将移入的八位送入输出端
    RCK=0;
}

void MatrixLED_Init()//点阵屏初始化
{
    SCK=0;
    RCK=0;
}

void MatrixLED(unsigned char x,y)//行和列
{
    _74HC595_(x);//选择第几行,A1为最高位
    P0=~(0x80>>y);//选择第几列,高位即P07为第一列
                                //y=0,即选择第1列
    //消影
    Delay(1);//延时     
    P0=0xFF;//位清零
}

2)MatrixLED.h

#ifndef __MATRIXLED_H__
#define __MATRIXLED_H__

void MatrixLED_Init();
void MatrixLED(unsigned char x,y);


#endif

7.LED点阵屏动画

步骤:

1)打开文字取模软件(评论区获取)

图像大小按照自己想法进行调整

直接点击即可绘制

2)创建数组

3)主函数

代码如下:

主函数如下,其他头文件和.c文件评论区领取

#include <REGX52.H>
#include "Delay.h"
#include "MatrixLED.h"

unsigned char code Animation[]=  
    //code将数据存放在flash中,内存比不加code的RAM要大
  //但是坏处就是在主函数中我们要修改数组中的值是不能更改的
        {
            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//间隔,更好的衔接
            0xFF,0x08,0x08,0x08,0xFF,0x00,0x0E,0x15,
            0x15,0x15,0x08,0x00,0x7E,0x01,0x02,0x00,
            0x7E,0x01,0x02,0x00,0x0E,0x11,0x11,0x0E,
            0x00,0x7D,0x00,0x00,0x00,0x00,0x00,0x00,
            0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00//同理
        };//将取模软件的数据复制

void main()
{
    unsigned char i,Offset=0,count=0;//Offset为偏移量,count为扫描次数
    MatrixLED_Init();
    while(1)
    {
        for(i=0;i<8;i++)
        {
            MatrixLED(Animation[i+Offset],i);//取前八个数据
        }
        count++;
        if(count>10)//扫描10遍,前八个数据进行扫描
        {
            count=0;
            Offset++;//往右偏移一位
            if(Offset>40)//Offset+8要小于48
            {
                Offset=0;
            }
        }
    }
}

效果如下:

LED点阵屏显示Hello!的动画

  

  • 26
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值