【51单片机】MAX7219 LED点阵GUI设计


一、主要功能

LED点阵显示初始信息,可通过K3键切换显示模式,可实现RTC时钟显示、滚动字符显示 、滚动汉字显示,项目中以实现常用绘图API函数,如画点、线、圆、框、填充、显示字符、汉字等。代码中可简单修改MAX7219点阵级联个数实现不同尺寸的兼容。


二、硬件资源

1.硬件准备

项目所需要的硬件资源如下:
①51单片机开发板1个
②MAX7219 点阵模块1个(可根据自身财力购买点阵大小)
③USB线1条(用于供电和程序下载)
④杜邦线若干

2.硬件连接

	  独立按键模块-->单片机IO
	  K3-->P32

	  MAX7219 LED点阵模块-->单片机IO
	  CLK-->P22
	  CS-->P21
	  DIN-->P20
	  VCC-->5V
	  GND-->GND

三、软件设计

1.软件结构

在这里插入图片描述

2.主要代码

#include "app_demo.h"
#include "time.h"
#include "max7219.h"
#include "exti.h"
#include "key.h"
#include "string.h"
#include "stdio.h"


//定义全局结构体变量
_leddz_struct leddz_struct;


//定时器0中断函数
void time0() interrupt 1
{
	static u8 i=0;

	TH0=0XDC;	//给定时器赋初值,定时10ms
	TL0=0X00;

	i++;
	if(i==100)//1S
	{
		leddz_struct.sec++;
		if(leddz_struct.sec>=60)
		{
			leddz_struct.sec=0;
			leddz_struct.min++;
			if(leddz_struct.min>=60)
			{
				leddz_struct.min=0;
				leddz_struct.hour++;
				if(leddz_struct.hour==24)leddz_struct.hour=0;
			}
		}
	}
}

void exti0(void) interrupt 0 //外部中断0中断函数
{
	delay_10us(1000);//消斗
	if(KEY3==0)//再次判断K3键是否按下
	{
		leddz_struct.mode++;
		if(leddz_struct.mode==4)leddz_struct.mode=0;
		leddz_clear();
		leddz_show_reflash();	
	}
}

void sys_parm_init(void)
{
	leddz_struct.mode=0;
	leddz_struct.hour=12;
	leddz_struct.min=59;
	leddz_struct.sec=23;	
}

//静态显示汉字
void static_show_hz(void)
{
	u8 i=0;
	while(leddz_struct.mode==0)
	{
		for(i=0;i<4;i++)
		{
			leddz_show_fonthz(i*16,0,i,16,1);//显示“欢迎观看”	
		}
		leddz_show_reflash();	
	}	
}

//显示RTC
void rtc_show(void)
{
	u8 i=0;
	xdata u8 buf[8];

	while(leddz_struct.mode==1)	
	{
		i++;
		if(i%1==0)
		{
			buf[0]=leddz_struct.hour/10+0x30;
			buf[1]=leddz_struct.hour%10+0x30;
			buf[2]=':';
			buf[3]=leddz_struct.min/10+0x30;
			buf[4]=leddz_struct.min%10+0x30;
			buf[5]=':';
			buf[6]=leddz_struct.sec/10+0x30;
			buf[7]=leddz_struct.sec%10+0x30;

			leddz_clear();
			leddz_show_string(0,0,buf,16);
			leddz_show_reflash();		
		}
		delay_ms(1);		
	}
}

//字符滚动显示
void roll_char_show(void)
{
	u8 i=0;
	char sx=LEDDZ_WIDTH;
	xdata u8 buf[]="Hai.XiaoYi,QQ:3443792007,Thanks!";
	while(leddz_struct.mode==2)
	{
		i++;
		if(i%10==0)
		{
			leddz_clear();
			leddz_show_string(sx,0,buf,12);
			leddz_show_reflash();
			sx--;
			if(sx<=-strlen(buf)*6)sx=LEDDZ_WIDTH;	
		}
		delay_ms(1);	
	}			
}

//汉字滚动显示
void roll_show_hz(void)
{
	u8 i=0;
	char sx=LEDDZ_WIDTH;
	xdata u8 buf[]="深圳加油!嗨小易";
	while(leddz_struct.mode==3)
	{
		i++;
		if(i%10==0)
		{
			leddz_clear();
			leddz_show_fonthz_ex(sx,0,buf);
			leddz_show_reflash();
			sx--;
			if(sx<=-strlen(buf)*8)sx=LEDDZ_WIDTH;	
		}
		delay_ms(1);	
	}		
}

//LED点阵花样显示系统
void leddz_control_sys(void)
{	
	time0_init();//初始化定时器0
	time0_start();//开启定时器0
	exti0_init();
	sys_parm_init();
	max7219_init();
	//清屏
	leddz_clear();
	leddz_show_reflash();

	while(1)
	{
		static_show_hz();//静态显示汉字
		rtc_show();//RTC时钟显示
		roll_char_show();//字符滚动显示
		roll_show_hz();//汉字滚动显示										
	}	
}

四、实验现象

B站演示视频:https://space.bilibili.com/444388619
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

作者B站链接:https://space.bilibili.com/444388619
可提供手把手教学服务,资料获取请联系作者QQ:3443792007
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值