【【51单片机实现LED点阵屏幕和动画显示】】

这篇具有很好参考价值的文章主要介绍了【【51单片机实现LED点阵屏幕和动画显示】】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LED点阵屏幕和驱动代码

我们先搞清楚74HC595的原理
sfr 特殊功能寄存器声明

sbit 特殊位声明
就举个例子,我们在之前的各种测试中对LED进行控制会直接输入P2=什么什么,那我想问你怎么知道P2口控制的就是LED呢,其实这些就是已经在内部声明完成了,我们可以直接拿来使用 
内部已经声明完成了
sfr P0=0x80;
声明P0口寄存器,物理地址为0x80
sbit P0_1=0x81;
声明P0寄存器的第一位
因为内部已经偷偷将其进行了地址编码了现在我们还与其他的方法实现
可位寻址和不可位寻址
因为位有8位,我们在进行设计的时候不可能完全照顾到每一位的方方面面,所以在设计的时候就已经弱化了位数的概念,在每8个寄存器中,只有一个可位寻址的。
就像我们以前的TCON是可位寻址的
而TMOD是不可位
我们先写一个

void _74HC595_WriteByte(unsigned char Byte)

{
//首先把数值赋给SER 而且有种入栈高位在前
//怎么取出第八位就是用
//因为他不是说的那种地可寻

unsigned char i;
    for(i=0;i<8;i++)
    {
        SER=Byte&(0x80>>i);
        SCK=1;
        SCK=0;
    }
  RCK=1;
    RCK=0;    
}

这个目的就是我们写入的数据都会通过SER进入这几个引脚上
然后我们再写一个

void MatrixLED_Showcolumn(unsigned char column , Data)
{
_74HC595_WriteByte(Data);
    P0=~(0x80>>column);
}

【【51单片机实现LED点阵屏幕和动画显示】】
SER输入的第一个数字是D7 然后依次类推
【【51单片机实现LED点阵屏幕和动画显示】】
我懂了这两个组合才可以生成一系列的数字
第一个相当于是对行进行操作
就是你输入的后入先出 第一个是最大的,依次
下面这个代码的作用是控制列 用来确定列的一些信息
MatrixLED_Showcolumn(0,0xAA);
所以我在输入这句话之后,得出的结论是 先锁定第0行再确定灯是10101010 因为是16进制 ,
我觉得我发现一个问题就是 我并不是特别需要考虑后入先出的问题 因为我的灯是D7 D6-----D0如此排列的 maybe 我们只要按照自己的常规思路去搭建就行了
and 为什么你说是0就是第0列 原因在这里
因为我用的是P0=~(0x80>>column);
而例如我们选择了P7 那相当于把P7置于0 其他位上都是1 就是0111 1111
相对来说岂不是 1000 0000 的翻版
我选择第1列 1011 1111相当于0100 0000 的翻版 很合理
所以是如此选择
我们每次进行亮灯之后 我们都需要即时把灯的信息更新归位?不然会影响下一次的操作
就像之前的那个一样 一闪一闪不方便
我们就像之前做数字灯管,进行 段选 位选 段选 位选 段选 位选 中间有一个小小的隔开的操作 以便快闪的发生
整个流程就是 段选 位选 延时 位清零 , 段选 位选 延时 位清零 , 段选 位选 延时 位清零
//此处添加代码 完成 了上述各项操作
//此处添加代码 完成 了上述各项操作
#include <REGX52.H>
#include"Delay.h"
sbit RCK=P3^5;//是P3的第五位 RCLK
sbit SCK=P3^6; // SRCLK
sbit SER=P3^4; // SER
//编译的时候可能会出错因为我们在系统内部已经有了一个RCLK的存在了
//所以我们稍微修改一下名字

void _74HC595_WriteByte(unsigned char Byte)
{
    //首先把数值赋给SER 而且有种入栈高位在前 
    //怎么取出第八位就是用
    //因为他不是说的那种地可寻
unsigned char i;
    for(i=0;i<8;i++)
    {
        SER=Byte&(0x80>>i);
        SCK=1;
        SCK=0;
    }
  RCK=1;
    RCK=0;    
}
void MatrixLED_Showcolumn(unsigned char column , Data)
{
_74HC595_WriteByte(Data);
    P0=~(0x80>>column);
    Delay(1);
    P0=0xFF;//段选 位选 位清零 
}
void main()
{
    //为了方便串口的实现将串口名字进行统一的修改
    SCK=0;
    RCK=0;
    
//操纵点阵屏需要用到数码管类似的代码
      while(1)
    {
      MatrixLED_Showcolumn(0,0x80);
        MatrixLED_Showcolumn(1,0x40);
        MatrixLED_Showcolumn(2,0x20);
        MatrixLED_Showcolumn(3,0x10);
        
    }    
    
}
//显示效果是点阵对角线
maybe 我们可以用excel先划定大概的范围确定 图形的样子 例如我们可以画出一整个爱心什么的
  MatrixLED_Showcolumn(0,0x3c);
        MatrixLED_Showcolumn(1,0x42);
        MatrixLED_Showcolumn(2,0xA9);
        MatrixLED_Showcolumn(3,0x85);
            MatrixLED_Showcolumn(4,0x85);
            MatrixLED_Showcolumn(5,0xA9);
            MatrixLED_Showcolumn(6,0x42);
            MatrixLED_Showcolumn(7,0x3C);

/爱心代码
对于整个数字的偏移的话,我们可以就是画完整个图然后一帧一帧的偏移移动
取字是不是太麻烦了 ,我们选择用文字取模软件 嘻嘻
【【51单片机实现LED点阵屏幕和动画显示】】
0xFF,0x08,0x08,0x08,0x08,0x08,0xFF,0x00,0x0E,0x15,0x15,0x15,0x09,0x00,0xFF,0x00,
0xFF,0x00,0x00,0x0F,0x09,0x09,0x0F,0x00,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x00,
存东西要存的很大我们可以放在flash 里面
unsigned char code Animation[]
但是存在flash里面 只能读取不能修改
//以下是流动显示HELLO ! 的代码
main.c

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


unsigned char Animation[]={     
	0xFF,0x08,0x08,0x08,0x08,0x08,0xFF,0x00,0x0E,0x15,0x15,0x15,0x09,0x00,0xFF,0x00,
0xFF,0x00,0x00,0x0F,0x09,0x09,0x0F,0x00,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x00};



void main()
{
	unsigned char i , offset=1,count=3;
	//为了方便串口的实现将串口名字进行统一的修改
	MatrixLED_Init();
	

	//操纵点阵屏需要用到数码管类似的代码
	
	
	while(1)
	{
		for(i=0;i<8;i++)
		{
	  MatrixLED_Showcolumn(i,Animation[i+offset]);
	}	
		count++;
	if(count>10)
	{
		count=0;
		offset++;
		if(offset>24)
		{
			offset=0;
		}
	}
	
}
	}

Delay.c

void Delay(unsigned int xms)
	//
//
//
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

Delay.h

#ifndef __DELAY_H__
#define __DELAY_H__

void Delay(unsigned int xms);

#endif

MartixLED.c

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





sbit RCK=P3^5;//是P3的第五位 RCLK
sbit SCK=P3^6;            // SRCLK
sbit SER=P3^4;            // SER 
//编译的时候可能会出错因为我们在系统内部已经有了一个RCLK的存在了
//所以我们稍微修改一下名字

#define MATRIX_LED_PORT P0
//74HC595 写入一个字节
//要写入的字节
//第一个是控制整行
//然后下一个是确定单列的数据
//
//
//

void _74HC595_WriteByte(unsigned char Byte)
{
	//首先把数值赋给SER 而且有种入栈高位在前 
	//怎么取出第八位就是用
	//因为他不是说的那种地可寻
unsigned char i;
	for(i=0;i<8;i++)
	{
		SER=Byte&(0x80>>i);
		SCK=1;
		SCK=0;
	}
  RCK=1;
	RCK=0;	
}


void MatrixLED_Init()
{
	
	
	SCK=0;
	RCK=0;
}

matrixLED.h文章来源地址https://www.toymoban.com/news/detail-510222.html

#ifndef __MATRIX_LED_H_
#define __MATRIX_LED_H_

void MatrixLED_Init();
void MatrixLED_Showcolumn(unsigned char column , Data);

#endif

到了这里,关于【【51单片机实现LED点阵屏幕和动画显示】】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【51单片机】LED点阵屏

    🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Waiting For Love】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔74HC595图片 🍔74HC595原理 🍔”上升沿“是什么意思 🎆LED点阵屏显示图形  🎈现象  🎈代码(三部分) main.c  Del

    2024年02月02日
    浏览(43)
  • 51单片机LED点阵屏

    LED点阵屏是一种由许多小型LED灯组成的矩阵式显示屏。这些LED灯可以是单色、双色或全彩的,它们排列成行和列的网格,可以根据需要点亮来显示图像、文字或动画等内容。LED点阵屏广泛应用于户外广告牌、室内显示、交通信号灯、电子价格标签和其他需要显示信息的场合。

    2024年01月23日
    浏览(50)
  • 51单片机 8*8LED点阵(入门教学)

    LED 点阵介绍 LED 点阵是由发光二极管排列组成的显示器件,在我们日常生活的电器中随 处可见,被广泛应用于汽车报站器,广告屏等。 通常应用较多的是 8*8 点阵,然后使用多个 8*8 点阵可组成不同分辨率的 LED 点阵显示屏,比如16*16 点阵可以使用 4 个 8*8 点阵构成。因此理解

    2024年02月02日
    浏览(46)
  • 51单片机——LED点阵屏(显示滚动画面)

    目录   一、关于数码管、LED点阵屏显示的注意点 二、功能介绍 三、主要模块的介绍 3.1 74HC595模块和点阵屏显示函数 3.1.1 74HC595介绍 3.1.2 点阵屏显示函数MatrixLED() 3.2定时器中断模块 四、程序实现 五、效果展示   一定要消影,不然显示的画面有重影。不管是数码管还是LED点阵

    2023年04月17日
    浏览(41)
  • 51单片机——LED 点阵点亮一个点,小白详解

    LED点阵介绍:        LED点阵是由发光二极管排列组成的显示器件,在我们生活中的电器中随处可见,被广泛用于汽车报站器,广告屏等。         通常用用较多的是8*8点阵,然后使用多个8*8点阵组成不同分辨率的LED点阵显示屏,比如16*16点阵可以使用4个8*8点阵构成。因

    2024年02月09日
    浏览(45)
  • 三、51单片机用74HC595控制LED点阵

    (1)外观 (2)作用 LED点阵通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片等,LED点阵显示被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。 以8*8LED点阵为例。 (1)单片机端口直接驱动。驱动8*8的点阵需要2个IO端口(16个IO口)。 (2)使用串转并移位锁存器驱

    2024年02月03日
    浏览(72)
  • 51单片机开发:通过74HC595控制LED点阵

    (1)LED点阵就是多个LED发光二极管的集合,在单个LED的发光原理上没有任何区别; (2)上面是16x16的LED点阵,总共有16x16=256个LED灯,由32个引脚来控制,其中16个引脚是正极(posn,n=1、2······、16),16个引脚是负极(NEGn,n=1、2······、16); (3)LED点阵可以用坐标系的思想来理解,

    2024年02月12日
    浏览(52)
  • 51单片机 | LED点阵实验 | 点亮一个点 | 显示数字 | 显示图像

      开发板上使用了 64 个红色 LED 按照行列排布组成的 8*8 LED 点阵。下面介绍 LED 点阵的使用。    LED 点阵 是由发光二极管排列组成的显示器件,在我们日常生活的电器中随处可见,被广泛应用于汽车报站器,广告屏等。如下所示:   通常应用较多的是 8*8 点阵,然后使

    2023年04月08日
    浏览(43)
  • 毕业设计 基于51单片机控制LED点阵显示器的设计

    序 🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的

    2024年02月02日
    浏览(72)
  • 基于AT89C51单片机的LED点阵显示屏设计

    点击链接获取Keil源码与Project Backups仿真图: [[https://download.csdn.net/download/qq_64505944/88637464?spm=1001.2014.3001.5503]] **[源码获取] B 源码+仿真图+课程设计+50 工程实训(三)课题设计 LED点阵显示屏设计 LED点阵显示屏通过编程控制可以显示中英文字符、图形及视频动态图形,广泛用于指

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包