51单片机系列--led点阵屏显示汉字

LED 点阵是由发光二极管排列组成的显示器件。
通常应用较多的是 8* 8 点阵,通过进行对不同位置的点亮与熄灭,构成一个图案,这一点也被应用到了电视机的显示屏上。下面是点阵屏的原理图
在这里插入图片描述
它的DPa到DPh引脚分别对应了侧排的引脚(引脚为高电平,控制P0号引脚低电平即可点亮二极管),采用74HC595串转并芯片,需要在使用过程中对595的3个输入端进行控制。
在这里插入图片描述
跳线帽OE:OE, 输出使能控制脚,它是低电才使能输出,所以接GND,OE端会被GND下拉为0。
P34-SER:代表串行输入,我们串行输入就是把数据放到这。
P35-SCK :上升沿移位,即RCK从0-1电位变化会让数据往下移一位
P36-RCK:上升沿锁存,搬运工,即SCK从0-1电位变化会把数据搬运到芯片输出端
其中:SER负责将数据输入,SCK上升沿触发后数据插入队列,RCK则会锁存复制到输出端队列当中。
在这里插入图片描述
可以用取字模软件进行取模,下载链接在文末,下面是操作例图:
在这里插入图片描述

程序:

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

typedef unsigned char u8; 		// 重命名类型u8简化代码编写
typedef unsigned int u16;
#define MATRIX_PORT	P0		// 点阵LED负极端口

sbit SCK = P3^6; 			// SCK上升沿移位
sbit RCK = P3^5;			// RCK上升沿串行输出寄存器锁存
sbit SER = P3^4; 			// SER引脚送字节数据进去
// 点阵列选值,数组每个元素的值选中其中一列
u8 gLineCode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选控制哪个亮、段选控制输入内容
u8 gZhong[] = {0x00,0x3C,0x52,0x52,0x7E,0x12,0x10,0x00};/*"中",0*/

void delay(u16 i);
void Hc595SendByte(u8 dat);
void MatrixDisplay(u8 *zimo);
void delay(u16 i)
{
	while(i--);	
}

/*********************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 参数列表       : 无
* 函数输出    	 : 无
*********************************************************************/
void main(void)
{
	 MatrixDisplay(gZhong);
}
/*********************************************************************
* 函 数 名       : MatrixDisplay
* 函数功能		 : 循环刷新显示字模到点阵上
* 参数列表       : zimo - 待显示的字模数组
* 函数输出    	 : 无
*********************************************************************/
void MatrixDisplay(u8 *zimo)
{
	u8 i = 0;
	while (1)
	{
		for(i=0;i<8;i++)
		{
			MATRIX_PORT = gLineCode[i];		  		// 位选
			Hc595SendByte(zimo[i]);		// 发送段选数据
			delay(100);
			Hc595SendByte(0x00);  		// 消隐
		}
		break;	
	}
}
/*********************************************************************
* 函 数 名       : Hc595SendByte
* 函数功能		 : 通过74HC595串行移位发送一个字节出去
* 参数列表       : dat - 待发送的字节数据
* 函数输出    	 : 无
*********************************************************************/
void Hc595SendByte(u8 dat)	 //从低位往高位移动数据
{
	u8 i = 0, j = 0;
	SCK = 0;				// 将SCK置为初始状态
	RCK = 0;				// 将RCK置为初始状态
	for (i=0; i<8; i++)
	{
		SER = dat & (0x01);
		dat >>= 1;
		SCK = 1;
		j++;			  	// 延时代码,等同于nop指令_nop_();
		j++;				// 延时代码,等同于nop指令
		SCK = 0;	
	}
	RCK = 1;
	j++;					// 延时代码,等同于nop指令
	j++;					// 延时代码,等同于nop指令
}

效果图:
在这里插入图片描述
取字模软件下载

  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值