51单片机学习——7--8*8LED点阵显示

原理

点阵简介

点阵的外部
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

点阵的内部结构在这里插入图片描述
和矩阵按键相似,将每一行或每一列的LED阳极或阳极并联一起。如左图,如果我们想让某个led灯点亮,就让某一行输出高电平,某一列输出低电平。在这里插入图片描述
我们通过74HC595向led点阵输入段选数据,即控制每一列哪些灯亮
通过P0口输入位选数据,即控制哪一列显示

在这里插入图片描述

74HC595

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过控制14,11,12引脚来输入数据。
14:DS(SER)对应网络标号的P3^4
11:SHCP(SRCLK)对应网络标号中的P3^6
12:STCP(RCLK)对应网络标号中的P3^5
上升沿就是数字电路中,数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间(时刻)叫作上升沿。
同理下降沿就是数字电平从高电平(1)变为低电平(0)的这一瞬间。

具体操作原理:

通过移位操作,我们将8位数据从低位到高位依次发送给SER,SER每接收一位数据后,我们手动置1让SRCLK处于上升沿状态,SRCLK寄存器就会将数据移位到原理图中的QA,循环这个过程,直到最高位数据传送到QH,再来让RCLK处于上升沿状态,RCLK就会将存储的数据发送到D0到D7口,也就是控制led灯的列控制口

代码实现

1.我们通过文字取模工具得到想要显示的图形(已经上传,可以免费下载)
在这里插入图片描述
下方生成了段选数据,我们直接复制粘贴即可,将它存储到列数组里面
2.在这里插入图片描述
我用到的是这个点阵,从上往下是从高位到低位,从左往右也是从高位到低位。
位选:我们让哪一列亮起,就让这一列变为低电平,即对应位为0,不想让亮的变为高电平,即对应位为1
段选:相同的道理,我们让哪一行亮起,就让这一行变为高电平,即对应位为1,不想让亮的变为低电平,即对应位为0,数据已经在取模工具中生成。

#include<reg52.h>
#include<intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit SRCLK=P3^6;  //11 SRCLK管脚
sbit RCLK1=P3^5; //12 RCLK管脚
sbit SER=P3^4; //14 SER管脚

u8 duan[]={0x3C,0x24,0xFF,0xBD,0xBD,0xFF,0x24,0x3C};//段选数据
u8 wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选数据  /0111 1111/1011 1111/1101 1111/1111 0111/1111 1011/1111 1101/1111 1110 

void delay(u16 i)//延时函数
{
   while(i--);
}

void Hc595pro(u8 dat) //发送段选数据函数
{
  	 u8 a;
     SRCLK=0;
	 RCLK1=0;
	 for(a=0;a<8;a++)
	 {
	    SER=dat<<7;	  //<<	左移	用来将一个数的各二进制位全部左移7位,高位舍弃,低位补0。
		dat>>=1;  	  //>>	右移	将一个数的各二进制位右移1位,移到右端的低位被舍弃,对于无符号数,高位补0。
		SRCLK=1;	  //上升沿执行功能
		_nop_();	  //这个过程大概十几纳秒因此,延时两个机器周期即可,_nop_()函数是<intrins.h>库里的函数
		_nop_();
		SRCLK=0;	  //手动置0,为下一次执行做准备
	 }
	 RCLK1=1;		 //上升沿将数据发送至D0到D7
	 _nop_();		 //延时两个机器周期
	 _nop_();
	 RCLK1=0;		 //手动置0,为下一次执行做准备
}

void main()
{
	u8 i;
 	while(1)
   	{
    	 for(i=0;i<8;i++)
		  {
	    	 P0=wei[i];//位选
			 Hc595pro(duan[i]);
			 delay(100);//通过延时来达到一种类似静态显示的效果
			 Hc595pro(0x00);//消影
	 	  }
	}
}

要注意的是,如果发现点阵不亮,很可能的原因是没有将点阵模块的OE和GND短接
效果展示:在这里插入图片描述

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值