51单片机_LED点阵图动态显示

LED点阵图与数码管一样,有两种接法,共阴极和共阳极,不同的接法有不同的电路结构。本次使用的是共阴极连接。(将P0=0x80,利用74HC595寄存器可以单独控制P07列哪一盏灯亮)

通过74HC595控制LED点阵图

 点亮矩阵电路中那颗/几颗灯,就是段选跟位选的过程

74HC595寄存器配置

Led.c 

#include "Led.h"
#include <REGX52.H>
#include "Delay.h"
sbit RLK=P3^5;//RCLK P3=0XB0 0XB0^5=0XB5 =P3_5 存储寄存器时钟
sbit SCK=P3^6;//SERCLK 移位寄存器
sbit SER=P3^4;//SER 串行数据

void Led_Init()//初始化
{
	SCK=0;
	RLK=0;
}
void _74HC595_WriteByte(unsigned char Byte)//写入一个字节
{
	unsigned char i;
	for(i=0;i<8;i++) //函数循环8次 (8位寄存器)
	{
		SER=Byte&(0X80>>i);//非0即1 每运行1次,数据整体右移1位
		SCK=1;//SCK移位寄存器上升沿时 SER数据写入移位寄存器
		SCK=0;
	}
	RLK=1;//RLK存储寄存器上升沿时,数据从移位寄存器转存储存寄存器
	RLK=0;//置0
}
void LED_Show(unsigned char Column,Data)// 列(位选) 行(段选
{
	_74HC595_WriteByte(Data);//段选 通过74hC595串行数据口SER控制
	P0=~(0X80>>Column);//位选,通过向右移位的方式控制点阵屏的8列
	Delay(1);
	P0=0XFF;//消影
}

Led.h

#ifndef __LED_H__
#define __LED_H__

void LED_Show(unsigned char Column,Data);
void Led_Init();

#endif

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Led.h"
//显示图像数组地址
unsigned char	code TuRam[]=
{
	0x00,0x00,0x20,0x11,0x12,0x7C,0x7F,0x18,//1帧
	0x00,0x00,0x08,0x11,0x12,0x7C,0x7F,0x30,
	0x00,0x20,0x11,0x12,0x7E,0x7F,0x18,0x00,
	0x00,0x08,0x11,0x12,0x7E,0x7F,0x10,0x30,
};


void main()
{
	unsigned char i,offset,count;
	Led_Init();//led点阵屏初始化
	while(1)
	{
		for(i=0;i<8;i++)
		{
			LED_Show(i,TuRam[i+offset]);//i+偏移量  offset 1个1个刷新
		}
		count++;
		// 扫描8次,当count>8 offset++偏移1位。
		//相当于定时器作用,也可以在timer中 配置时间让offset++代替
		if(count>8)
		{
			count=0;
			offset+=8;//offset可以偏移多少位由实际显示内容设置 所显示为8*8 一帧图片一帧传
			if(offset>24)
			{
				offset=0;
			}
		}
			
	}
}
	

 C51的sfr、sbit 定义使用

 

将数据放在flash里面,用来避免内存被消耗过多,但这种数据是不能更改的,方法如下:

将:unsigned char TuRam[]

改为:unsigned char code TuRam[]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷狗一只

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值