51单片机点阵屏

文章介绍了74HC595芯片的使用原理,包括其主要引脚功能和级联方式。通过C语言代码展示了如何利用74HC595驱动LED点阵屏,包括静态图像和流动图像的显示方法。此外,还提到了sfr和sbit关键字在单片机编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前置知识学习

 74HC595

举例说明使用原理

sfr和sbit关键字

实际代码演示


前置知识学习

 像素都是8的倍数,为了不浪费字节数(8的倍数)

 

 

 74HC595

寄存器上面加横线一般是说低电平有效/下降源有效

RCLK:寄存器时钟

SRCLR:串行清零端

SRCLK:串行时钟

SER:串行数据

QH‘:多片级联

举例说明使用原理

填入SER = 0。。。。。。

上升沿八位全满后,

RCLk设为高电平,锁到右侧我

一次性输出

若继续给SER输入数据,则数据顺着QH‘(QH‘接着下一片的SER)输出去

是不是和数码管驱动方式有点像

列直接对P0赋值

行用74HC595控制那三个引脚,输入数据

这个元器件也是“弱上拉,强下拉”的模式

高电平承载电流小

低电平承载电流大

sfr和sbit关键字

实际代码演示

代码一:LED点阵屏显示静态图像

本来是要演示74HC595功能的,但是我的单片机没有74HC95对应的流水灯,所以演示不了,但是既然我能够使用这个元器件实现功能,就说明有该元器件

#include <REGX52.H>
#include "Delay.H"

sbit SER = P3^4;	//SER
sbit RCK = P3^5;	//RCLK
sbit SCK = P3^6;	//SRCLK


/* *
   * @brief 74HC595写入一个字节
   * @param 要写入的字节
   * @retval 
   */
void _74HC595_WriteByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0; i<8; i++)
	{
		SER = Byte & (0x80>>i);
		SCK = 1;
		SCK = 0;
	}
	RCK = 1;
	RCK = 0;
}

#define MATRIX_LED_PORT P0

/* *
   * @brief LED点阵屏显示一列数据
   * @param column:要选择的列,范围:0~7,0在最左边
* @param Date 选择列所要显示的数据,高位在上,1为亮,0为灭
   * @retval 
   */
void MatrixLED_ShowColumn(unsigned char column, Date)
{
	_74HC595_WriteByte(Date);
	MATRIX_LED_PORT =~ (0x80>>column);
	Delay(1);
	MATRIX_LED_PORT = 0xFF;
}


void main()
{
	SCK = 0;
	RCK = 0;

	while(1)
	{
		MatrixLED_ShowColumn(0, 0xA0);
		MatrixLED_ShowColumn(1, 0xA1);
		MatrixLED_ShowColumn(2, 0xA2);
		MatrixLED_ShowColumn(3, 0xA3);
		MatrixLED_ShowColumn(4, 0xA4);
		MatrixLED_ShowColumn(5, 0xA5);
		MatrixLED_ShowColumn(6, 0xA6);
		MatrixLED_ShowColumn(7, 0xA7);
	}
}
		

代码二:点阵屏显示流动图像

本质就是对上面的函数做了模块化,通过循环(列右移)实现了流动图像或者变化图像的效果

ps:流动图像的位数从取字/(图像)模软件上面来

#include <REGX52.H>
#include "MatrixLED.H"
#include "Delay.H"



//存在RAM中(内存小),放在FLASH中内存更大(code)(flash不可更改)
unsigned char code Animation[] = {
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0xFE,0x12,0x12,0x12,0x12,0x12,0x12,
	0x12,0x12,0x12,0x12,0x12,0x12,0xFE,0x00,
	0x00,0xFE,0x12,0x12,0x12,0x12,0x12,0x12,
	0x12,0x12,0x12,0x12,0x12,0x12,0xFE,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};


unsigned char i,offset,count;
void main()
{
	MatrixLED_init();
	
	while(1)
	{
		
		for(i=0; i<8; i++)
		{		
			MatrixLED_ShowColumn(i, Animation[i+offset]);
		}
		count++;
		if(count>10)
		{
			count++;
			offset++;
			if(offset>40)	//48 - 8
			{
				offset = 0;
			}
		}
	}
}
//MatrixLED.c
#include <REGX52.H>
#include "Delay.H"

sbit SER = P3^4;	//SER
sbit RCK = P3^5;	//RCLK
sbit SCK = P3^6;	//SRCLK

/* *
   * @brief 点阵屏初始化
   * @param 
   * @retval 
   */
void MatrixLED_init()
{
	SCK = 0;
	RCK = 0;
}


/* *
   * @brief 74HC595写入一个字节
   * @param 要写入的字节
   * @retval 
   */
void _74HC595_WriteByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0; i<8; i++)
	{
		SER = Byte & (0x80>>i);
		SCK = 1;
		SCK = 0;
	}
	RCK = 1;
	RCK = 0;
}

#define MATRIX_LED_PORT P0

/* *
   * @brief LED点阵屏显示一列数据
   * @param column:要选择的列,范围:0~7,0在最左边
* @param Date 选择列所要显示的数据,高位在上,1为亮,0为灭
   * @retval 
   */
void MatrixLED_ShowColumn(unsigned char column, Date)
{
	_74HC595_WriteByte(Date);
	MATRIX_LED_PORT =~ (0x80>>column);
	Delay(1);
	MATRIX_LED_PORT = 0xFF;
}
#ifndef __MatrixLEd_H__
#define __MatrixLEd_H__


void Matrix_Init();
void MatrixLED_ShowColumn(unsigned char column, Date);

#endif

LED点阵显示屏(完整源程序版) 目 录 引言 ……………………………………………………………………1 1 系统的设计与分析 ………………………………………………2 1.1 LED点阵控制原理………………………………………………………………3 1.1.1 LED简介 ……………………………………………………………………3 1.1.2 LED点阵 ……………………………………………………………………4 1.1.3 显示原理 ……………………………………………………………………5 1.1.4显示屏的原理图及结构 ……………………………………………………6 1.2 单片机小系统 …………………………………………………………………8 1.2.1 51系列单片机的概述 ………………………………………………………8 1.2.2单片机的组成 ………………………………………………………………8 2 程序设计 ………………………………………………………10 2.1 系统程序的框架………………………………………………………………10 2.1.1 串口通讯协议………………………………………………………………10 2.1.2 显示处理效果函数…………………………………………………………10 2.1.3 显示函数……………………………………………………………………10 2.2 程序流程图……………………………………………………………………9 3 总结 ………………………………………………………………11 谢辞 …………………………………………………………………13 参考文献 ……………………………………………………………14 附录(所有的源程序)………………………………………………15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值