(51单片机)点阵屏LED显示图片(点阵屏LED教程)(74Hc595教程)

发布于:2025-04-13 ⋅ 阅读:(20) ⋅ 点赞:(0)

 源代码

如上图将3个文放在Keli5 中即可,然后烧录在单片机中就行了

烧录软件用的是STC-ISP,不知道怎么安装的可以去看江科大的视频:

【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】https://www.bilibili.com/video/BV1Mb411e7re?p=2&vd_source=ada7b122ae16cc583b4add52ad89fd5e

源代码:

头文件要记得宏定义和重定义,避免重复调用:

#ifndef _Timer0_h_//名字根据文件名定义即可
#define _Timer0_h_

//声明函数……

#endif

 main.c

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

sbit RCK=P3^5;//RCLK上升沿锁存,保存数据
sbit SCK=P3^6;//SCLK上升沿移位,往下推送数据
sbit SER=P3^4;//SER数据

void _74Hc595_WriteByte(unsigned char Byte){
	unsigned char i;//定义循环次数和移位
	for(i=0;i<8;i++){
		SER=Byte&(0x80>>i);//右移:1000 0000->0100 0000以此类推
		SCK=1;//高电平,高低变化通电,下移数据
		SCK=0;//再次低电平
	}
	RCK=1;//高电平,高低变化通电,保存数据
	RCK=0;//再次低电平
}

void MatrixLED_ShowColumn(unsigned char Column,Data){
	_74Hc595_WriteByte(Data);//SER数据,控制LED点阵屏(竖着看),0亮1不亮
	P0=~(0x80>>Column);//表示第几列
	Delay(1);//间隔,防止行列串起来
	P0=0xFF;//列清,防止行列串起来
}

void main(){
	SCK=0;//低电平
	RCK=0;//低电平
	while(1){
		MatrixLED_ShowColumn(0,0x38);
		MatrixLED_ShowColumn(1,0x7C);
		MatrixLED_ShowColumn(2,0x7E);
		MatrixLED_ShowColumn(3,0x3F);
		MatrixLED_ShowColumn(4,0x3F);
		MatrixLED_ShowColumn(5,0x7E);
		MatrixLED_ShowColumn(6,0x7C);
		MatrixLED_ShowColumn(7,0x38 );
	}
}

Delay.c 

//Delay.c

#include <STC89C5xRC.H>
#include <INTRINS.H>

//延时函数
void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms){
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

 Delay.h

//Delay.h

#ifndef __Delay_H__
#define __Delay_H__

//延时函数头文件
void Delay(unsigned int xms);
#endif

 代码解析与教程:

main.c
  • 注释解释很清楚,看起来有点繁琐,是因为没有模块化,后续可以进行模块化

下面来进行分析

  • 第一部分是进行74Hc595初始化定义;
  • 第二部分是74Hc595写入数据的函数;
  • 第三部分是点阵屏LED的展示函数;
 Dealy模块
  • 包含源代码与头文件,不需要知道怎么实现的会用即可,后续使用,直接将头文件和源代码拿过来用即可;

xms是定义的毫秒,1000毫秒就是1秒;模版生成的是1毫秒的,因此xms等于1000

 74Hc959、LED点阵屏教程

 由于单片机系列版本不一样,单片机核心控制可能会有不同,例如:有些单片机的LED的L1是P21,有些就是P2_1,需要看单片机核心,或者头文件:

 同理:LED点阵屏的按键就是P0;

 可以看到我的STC89C52RC是P0;

74Hc595教程
  • 先看原理图:
     
  • 运行之前需要将51单片机上的J24连接2,3;也就是OE,GND,不然点阵屏LED无法显示,想要显示点阵屏LED,必须先配置好74Hc959;
  • 由图可知,P35对应的是RCLK,同理可得SRCLK,SER的地址,作用如下:
    sbit RCK=P3^5;//RCLK上升沿锁存,保存数据
    sbit SCK=P3^6;//SCLK上升沿移位,往下推送数据
    sbit SER=P3^4;//SER数据
    • 下面来看一张图
    • 图中可以知道,SER是写入数据的,然后通过SERCLK(SRCLK)来进行向下移位,再然后通过RCLK来锁定数据,以此类推;在填满8个数据后,整体向右移位赋值,这些Q开头的值,就是LED点阵屏对应的行值;需要注意的是,先填的数在最下面!!!!
    • 听不懂没关系,看图:
    • 由图可知,Q开头的值就是对应D开头的行值,;例如QH=D0;
  • 了解上述知识点之后,下面开始初始化:
    #include <STC89C5xRC.H>
    #include "Delay.h"
    
    sbit RCK=P3^5;//RCLK上升沿锁存,保存数据
    sbit SCK=P3^6;//SCLK上升沿移位,往下推送数据
    sbit SER=P3^4;//SER数据
    
    void _74Hc595_WriteByte(unsigned char Byte){
    	unsigned char i;//定义循环次数和移位
    	for(i=0;i<8;i++){
    		SER=Byte&(0x80>>i);//右移:1000 0000->0100 0000以此类推
    		SCK=1;//高电平,高低变化通电,下移数据
    		SCK=0;//再次低电平
    	}
    	RCK=1;//高电平,高低变化通电,保存数据
    	RCK=0;//再次低电平
    }
    
    void MatrixLED_ShowColumn(unsigned char Column,Data){
    	_74Hc595_WriteByte(Data);//SER数据,控制LED点阵屏(竖着看),0亮1不亮
    	P0=~(0x80>>Column);//表示第几列
    	Delay(1);//间隔,防止行列串起来
    	P0=0xFF;//列清,防止行列串起来
    }
    
    void main(){
    	SCK=0;//低电平
    	RCK=0;//低电平
    	while(1){
    		MatrixLED_ShowColumn(0,0x38);
    		MatrixLED_ShowColumn(1,0x7C);
    		MatrixLED_ShowColumn(2,0x7E);
    		MatrixLED_ShowColumn(3,0x3F);
    		MatrixLED_ShowColumn(4,0x3F);
    		MatrixLED_ShowColumn(5,0x7E);
    		MatrixLED_ShowColumn(6,0x7C);
    		MatrixLED_ShowColumn(7,0x38 );
    	}
    }

    先定义SER,SRLCK,RLCK的地址,因为头文件中有了,所以这里用其他名字表示;根据上述图片看,SER是P35,同理得到其他的。

  • 然后先在main函数中将SRCLK和RCLK初始化成低电平的0,这样在将他们定义成1后,就会产生电位差,从而通电,之后重新定义成0(低电平),为下次的填写数据进行准备,一共填写8次,8次填满后,就会右移,然后作为Byte(就是数据)使用,也就是LED点阵屏的Data(行)。

  • 现在有了行了,要定义列;列的话就是P0,P0=0111 1111,就是P07=0,以此类推。P06就是1011 1111。代码中,P0=~(0x80>>Column);就是通过右移来改变P0的值;例如:Column=1时,P0=0111 1111>>1011 1111,以此类推,就可以通过Column来定义列了。

 LED点阵屏教程
  • 在此之前,必须要了解74Hc959的相关知识,然后知道行列后,再看下面的
  • 先看原理图: LED点阵屏是高电位,设定为0就是通电
  • P0就是16进制的LED点阵屏灯总控制,听不懂没关系,看图:
  • 满足上面的两个条件,才能亮,比如图中的D6=1,P06等于0,这个灯就会亮了
 软件介绍:

因为每次想要点亮灯,都要计算,非常难算;因此介绍一个软件:

通过上面标识的来操作,就可以自动生成代码,软件使用的教程在江科大的视频里有:

【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】https://www.bilibili.com/video/BV1Mb411e7re?p=21&vd_source=ada7b122ae16cc583b4add52ad89fd5e

软件在:

软件安装包、开发板资料、课件及程序源码下载链接:https://jiangxiekeji.com/download.html

效果视频: 

LED点阵屏图片展示

 注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!!