51单片机 之 8*8 LED点阵(解决程序烧录没反应、显示拖影问题、取字模软件)

本文介绍了使用普中科技A2开发板和74HC595芯片驱动8*8 LED点阵显示的方法。通过详细讲解如何点亮单个LED点及显示复杂数字,阐述了74HC595的工作原理和在消除拖影中的作用。此外,还推荐了一款LED取字模软件以方便制作自定义显示内容。
摘要由CSDN通过智能技术生成

一、前言

我手里用的是普中科技的A2开发板,它的 8*8 的LED单射点阵是采用的是下图左边的构造。
在这里插入图片描述

它采取的动态扫描是列扫描

使用到的芯片有74HC595,74HC595主要用来扩展 io 口,它可以把串行的输入变成并行的输出,它具有三态。

注意74HC595的功能,把串行的输入变成并行的输出,这很重要,这会在代码中体现出来。

在这里插入图片描述
先不要管右边的接线,我们看下74HC595的端口

OE非:使能端,给低电平的时候才工作
在这里插入图片描述
所以如果你烧录了没反应,你需要见检查在上图位置是否给使能端一个低电平让它正常工作。

SRCLK,当上升沿信号时,把输入的串行数据移位并且保存到寄存器里

RCLK, 当上升沿信号时,把寄存器里保存的数据 output

二、先点一个灯看看

//点亮第一行第一列的点
#include<reg51.h>
#include<intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit SRCLK = P3^6; //SRCLK 在上升沿时,串行输入的数据移位并且保存到寄存器中 
sbit RCLK = P3^5;  //RCLK 在上升沿时,寄存器中的数据输出 
sbit SER = P3^4;


void hc595sendbyte(u8 a) 
{
	SRCLK = 0;
	RCLK = 0;
	//(1)
	for (int i = 0; i < 8; i++) {
		SER = a >> 7; //(2)
		a <<= 1;     // (3)
		SRCLK = 1;
		_nop_();
		_nop_();
		SRCLK = 0;
	}
	RCLK = 1; //(4)
	_nop_(); // 延时函数
	_nop_();
	RCLK = 0;
}

void main() {
	hc595sendbyte(0x80); // 1000 0000 D7~D0 第一行到第八行
	P0 = 0x7f ; //列这边接的是阴极,所以 0111 1111  P7~P0 第一列到第八列。
	while (1)  ; //把单片机困在这里,避免它到处跑(乱跑,确信!)
}

注释:

(1)需要循环8次才能把八行都给一个状态。但是 因为列是直接P0的8位给状态,所以只需要一次就给了八列一列一个状态。

(2)输入的a是一个八位二进制数,但是它向右移了7位,即被截取了低七位 ,这个最高位赋给了SER (SER只有一位),所以一次循环寄存器保存一位。

(3)把a的最高位截掉,最低位添加一个零 ,下次循环保存的是次高位。

(4)把寄存器中保存的data给出去。

在这里插入图片描述

三、显示复杂的数字

//显示一个零
#include<reg51.h>
#include<intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit SRCLK = P3^6; 
sbit RCLK = P3^5;  
sbit SER = P3^4;

u16 led_x[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 led_y[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};

void delay(u16 i)
{
	while(i--);
}

void hc595sendbyte(u8 a) 
{	 
	u16 i ;
	SRCLK = 0;
	RCLK = 0;
	for (i = 0; i < 8; i++) {
		SER = a >> 7;  
		a <<= 1;    
		SRCLK = 1;
		_nop_();
		_nop_();
		SRCLK = 0;
	}
	RCLK = 1;  
	_nop_();
	_nop_();
	RCLK = 0;
}

void main() 
{	u16 i;
	while(1){
	for (i = 0; i < 8; i++){
		P0=led_x[i]; //(1)
		hc595sendbyte(led_y[i]); //(2)
		delay(100);  //(3)
		hc595sendbyte(0x00);  // (4)
	}
	}
}

注释:

  1. P0控制阴极,我们从左到右进行扫描,依次给每一列阴极低电平。
  2. 当列阴极是低电平时,我们就响应给以列提供预设号的状态。
  3. 把延时函数加大,你将看到led灯从左边第一列依次向右亮起。
  4. 这就是消除拖影的操作。 很简单,不多说了。
    在这里插入图片描述

四、使用取字模软件

下载链接:led文字取模软件2.1版本.zip

使用取字模你可以自由的选择,发挥你想象力

在这里插入图片描述

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值