51单片机——LED点阵屏(显示滚动画面)

本文详细介绍了使用74HC595芯片扩展I/O口控制LED点阵屏显示的过程,强调了消影的重要性以及如何通过定时器中断实现滚动显示。程序中包括74HC595的初始化和数据写入函数,以及点阵屏显示函数,同时提到了按键判断以避免不稳定显示的问题。
摘要由CSDN通过智能技术生成

目录

 

一、关于数码管、LED点阵屏显示的注意点

二、功能介绍

三、主要模块的介绍

3.1 74HC595模块和点阵屏显示函数

3.1.1 74HC595介绍

3.1.2 点阵屏显示函数MatrixLED()

3.2定时器中断模块

四、程序实现

五、效果展示


 

一、关于数码管、LED点阵屏显示的注意点

  • 一定要消影,不然显示的画面有重影。不管是数码管还是LED点阵屏,都是"段选--位选--段选--位选"或者"位选--段选--位选--段选"循环来显示的,在每一个"段选--位选"或者"位选--段选"单元后面都要加一个延时函数,延时1ms等待显示稳定后,再进行"位选"或者"段选"的清零,即"段选—位选—延时1ms—清零位选—段选—位选"或者"位选—段选—延时1us—清零段选—位选—段选"。注意是清零段选还是清零位选。
  • 判断按键按下操作。有时按下按键,数码管就显示一下,又灭了,这可能就是没有对按键按下进行判断。在使用按键时,只有当我们按下按键时才会把键值返回,在没按的期间,返回的值是初始化的值。也就是说,返回的键值没有保存下来,只会在你按下的时候显示一次键值,没按的时候显示的是初始的值。

二、功能介绍

        用LED点阵屏显示滚动的画面。

三、主要模块的介绍

3.1 74HC595模块和点阵屏显示函数

3.1.1 74HC595介绍

        74HC595是串行输入,并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据。这里主要用来拓展I/O口。

9ca2b39aa3cb4f2580799aaed5af7598.png

       74HC595的8个输出端DPh~DPa分别接点阵屏列的输入端D7~D0。从而控制列的显示。

8dcb314814914ffba92e714fff140da1.jpg

      通过SER口输入串行的数据,当SRCLK有上升沿信号时,数据就往下移一位,当数据满了8位时,给RCLK上升沿信号时,8位数据就锁存到QA~QH,QH'连接到下一片74HC595,继续拓展16位、32位....,这里只是3线拓展到8线,QH'就不用接了。这样单片机通过3个I/O口连接74HC595,输出8位数据。

79f0219bb45a46099a8f15d3ba6315c4.jpg

3.1.2 74HC595初始化函数和输入函数

sbit SER=P3^4;
sbit SCL=P3^6;
sbit RCL=P3^5;
/*
	*函数名:  _74HC595Write(unsigned char byte)
	*函数功能:向74HC595串行输入一个字节的数据
	*输入:    byte	:一个字节数据
	*输出:    无
*/
void _74HC595Write(unsigned char byte)
{
	int i=0;
	for(i=0;i<8;i++)
	{
		SER=byte&(0x80>>i);
		SCL=1;
		SCL=0;
	}
	RCL=1;
	RCL=0;	 
}
/*
	*函数名:  _74HC595_Init()
	*函数功能:初始化74HC595的SCL、RCL
	*输入:	   无
	*输出:	   无
*/
void _74HC595_Init()
{
	SCL=0;
	RCL=0;	
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.1.3 点阵屏显示函数MatrixLED()

        这里需要注意的就是要消影。

/*
	*函数名:   MatrixLED(unsigned char COL,unsigned char byte)
	*函数功能: 控制点阵屏某一列的显示
	*输入:		COL:列  范围0~7; byte:要显示数据的二进制形式(8位)
	*输出:     无
*/
void MatrixLED(unsigned char COL,unsigned char byte)
{
   _74HC595Write(byte);
   P0=~(0x80>>COL);
   Delay(1);
   P0=0xff;//消影
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.2定时器中断模块

        这里用定时器控制画面的移动速度,每100ms移动一下。

void Timer0_Init()//定时器0,工作方式1
{
	TMOD=0x01;
	TH0=0xfc;//1ms
	TL0=0x18;
	EA=1;
	ET0=1;
	TR0=1;
}
//定时100ms中断
void Timer0_ISR() interrupt 1
{	
	static int count=0;
	count++;
	TH0=0xfc;
	TL0=0x18;
	if(count==100)//每100ms,offset加一,画面移动左一下
	{
		count=0;
		offset++;
		if(offset>34)
		{
			offset=0;
		}	
	} 
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

四、程序实现

#include <REGX52.H>
#include<INTRINS.H>
int offset=0;
sbit SER=P3^4;
sbit SCL=P3^6;
sbit RCL=P3^5;
unsigned char Animation[]={
						   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,	
						   0x7E,0x81,0x81,0x81,0x81,0x82,0x00,0x03,
						   0x03,0x03,0x03,0x03,0x00,0xFE,0x01,0x01,
						   0x01,0x01,0x01,0xFE,0x00,0xFF,0x90,0x90,
						   0x90,0xE0,
						   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
						  };//C_UP
void Delay(unsigned int Xms)	   //11.0592Mhz 1ms	
{
	unsigned char i, j;
	while(Xms--)
	{
	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
	}
}
void Timer0_Init()//定时器0,工作方式1
{
	TMOD=0x01;
	TH0=0xfc;//1ms
	TL0=0x18;
	EA=1;
	ET0=1;
	TR0=1;
}
void _74HC595Write(unsigned char byte)
{
	int i=0;
	for(i=0;i<8;i++)
	{
		SER=byte&(0x80>>i);
		SCL=1;
		SCL=0;
	}
	RCL=1;
	RCL=0;	 
}

void _74HC595_Init()
{
	SCL=0;
	RCL=0;	
}

void MatrixLED(unsigned char COL,unsigned char byte)
{
   _74HC595Write(byte);
   P0=~(0x80>>COL);
   Delay(1);
   P0=0xff;//消影
}
//定时100ms中断
void Timer0_ISR() interrupt 1
{	
	static int count=0;
	count++;
	TH0=0xfc;
	TL0=0x18;
	if(count==100)//每100ms,offset加一,画面移动左一下
	{
		count=0;
		offset++;
		if(offset>34)//42-8
		{
			offset=0;
		}	
	} 
}
int main()
{
	int i=0;
	_74HC595_Init();
	Timer0_Init();//T0初始化
	while(1)
	{
		for(i=0;i<8;i++)
		{
			 MatrixLED(i,Animation[i+offset]);
		}	 
	}
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

五、效果演示

LED点阵屏滚动显示

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 

 

 

 

 

 

  • 22
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值