学习日志-C51-点阵LED显示动画

学习日志-C51-点阵LED显示动画
现象:点阵LED区流动显示字符/逐帧显示
1.开发板原理图
在这里插入图片描述
在这里插入图片描述

74HC595:
输入端:OE:13号引脚,低电平可使能。所以使用时需要将OE与GND连接使用。
SER:14号引脚,数据输入端。
SRCLK:11号引脚,上升沿时数据寄存器的数据移位,QA>>QH。
RCLK:12号引脚,上升沿时移位寄存器的数据进入数据存储寄存器。
因而先将SER赋值,SRCLK每经过一个上升沿,数据寄存器存入一位,先输入的为高位,经过8次后,经过一个RCLK的上升沿,将寄存器的数据输出到QH~QA,使得点阵LED的行数据可以选中,然后进行列扫描即可。
2.编程实现
(1)点阵LED配置

#include <REGX52.H>
#include "delay.h"
sbit SCK=P3^6;//SRCLK为方便自己设计电路,进行重新定义,后续若使用其他板子可以直接更改此处即可
sbit RCK=P3^5;//RCLK
sbit SER=P3^4;//SER
#define MATRIX_LED_PORT		P0//便于自己设计电路,更改P0即可
/*初始化函数,将其置0,方便后续产生上升沿*/
void Matrixled_Init()
{
	SCK=0;
	RCK=0;
}

void _74HC595_WriteByte(unsigned char Byte)//74HC595写入数据并输出
{
	unsigned char j;
	for(j=0;j<8;j++)//j<8时,循环加1,输出8位数据
	{
		SER=Byte&(0x80>>j);
		/*Byte为8位数据,0x80为1000 0000,Byte与0x80相与,结果赋值给SER,若Byte首位为1,则相与后的结果不为0,不为0即SER被赋值为1,将Byte的首位输入给SER。若Byte首位为0,则相与后的结果为0,为0即SER被赋值为0,将Byte的首位输入给SER。*/
	  SCK=1;//上升沿将数据读入寄存器
	  SCK=0;//复位
	}//完成8位数据写入
	RCK=1;//上升沿,将8位数据输出
	RCK=0;//复位
}
void Matrixled_Show(unsigned char Column,Data)
{
	_74HC595_WriteByte(Data);//得到行数据
	MATRIX_LED_PORT=~(0x80>>Column);//选取列
	Delay(1);//延时清影
	MATRIX_LED_PORT=0xff;
}

(2)流动显示字符主函数

#include <REGX52.H>
#include "matrixled.h"
unsigned char code Animation[]={
0x00,0x04,0x5D,0xF6,0x5C,0xF6,0x5D,0x04,0x00,
0x00,0x04,0x5D,0xF6,0x5C,0xF6,0x5D,0x04,0x00,
};//由字模提取软件自动获得
void main()
{
	unsigned char i,shift,count;
	Matrixled_Init();//初始化
	while(1)
	{
		for(i=0;i<8;i++)
		{
			Matrixled_Show(i,Animation[i+shift]);//显示8列数据
		}
		count++;
		if(count>10)//扫描10个周期后向左移动
		{
			count=0;
			shift++;
			if(shift>9)
			{shift=0;}
		}
	}

}

(3)逐帧显示动画主程序

#include <REGX52.H>
#include "matrixled.h"
unsigned char code Animation[]={
0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C,
0x3C,0x42,0xA9,0x8D,0x8D,0xA9,0x42,0x3C,
0x3C,0x42,0xA5,0x89,0x89,0xA5,0x42,0x3C,
};//每8个为1帧
void main()
{
	unsigned char i,shift,count;
	Matrixled_Init();
	while(1)
	{
		for(i=0;i<8;i++)
		{
			Matrixled_Show(i,Animation[i+shift]);
		}
		count++;
		if(count>30)
		{
			count=0;
			shift+=8;//更改此处即可,改为加8,即可到下一帧
			if(shift>16)
			{shift=0;}
		}
	}

}

(4)取字模软件使用
在这里插入图片描述

在这里插入图片描述
在改变图像大小处设置高度为8,宽度根据想显示的字符长短自行设定。
在这里插入图片描述
在其他选项处按如图所示配置。
然后就可以绘制自己想要的图形,绘制结束之后在取模方式处选择C51即可,则在下方点阵生成区得到对应数据,填到Animation处即可。

  • 20
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值