博主福利:100G+电子设计资料合集https://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8

点阵显示屏作为一种常见的显示设备,具有显示内容丰富、灵活性强等特点,广泛应用于信息发布、广告宣传等领域。本设计基于51单片机和Proteus8.10仿真软件,设计了一款基于MAX7219驱动的16x8点阵切换显示系统,能够通过按键切换显示“中国加油”字样,具有结构简单、成本低廉、易于实现等特点。

功能描述

本设计主要实现以下功能:

  1. 点阵显示控制: 利用MAX7219芯片驱动16x8点阵显示屏,实现字符的显示控制。

  2. 按键切换显示: 通过按键切换显示内容,循环显示“中国加油”四个字样。

  3. 显示效果控制: 可通过程序控制显示亮度、显示速度等参数,实现不同的显示效果。

系统设计

  1. 硬件设计:

    • 主控模块: 采用STC89C52单片机作为核心控制器,负责数据处理和显示控制。

    • 点阵驱动模块: 采用MAX7219芯片驱动16x8点阵显示屏,实现字符的显示。

    • 按键模块: 采用独立按键实现显示内容的切换。

    • 电源模块: 采用USB供电,为整个系统提供稳定的工作电压。

  2. 软件设计:

    • 主程序: 负责系统初始化、按键扫描、显示控制等功能。

    • 显示子程序: 负责将字符数据发送给MAX7219芯片,控制点阵显示屏显示相应的字符。

    • 按键处理子程序: 负责检测按键状态,并根据按键状态切换显示内容。

设计特点

  • 显示内容丰富: 可显示“中国加油”四个字样,并可通过修改程序显示其他内容。

  • 操作简单: 通过按键即可切换显示内容,操作方便快捷。

  • 显示效果多样: 可通过程序控制显示亮度、显示速度等参数,实现不同的显示效果。

程序设计

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

#define uint16_t unsigned int
#define uint8_t  unsigned char

//按键管脚端口
sbit Key_1 = P1^0;  //汉字

//定义Max7219端口
sbit Max7219_pinCLK = P2^7;
sbit Max7219_pinCS  = P2^6;
sbit Max7219_pinDIN = P2^5;

#define count 2           //级联个数
#define GPIO_KEY P1

uchar code disp1[50][8]={
{0x08,0x08,0x3E,0x2A,0x2A,0x3E,0x08,0x00},//中
{0x7F,0x5D,0x69,0x49,0x5D,0x49,0x5D,0x7F},//国
{0x01,0xFB,0x4D,0x4D,0x4D,0xFB,0x02,0x00},//加
{0x7D,0x56,0x54,0x7E,0x55,0x56,0x7D,0x10},//油 
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//空格

};

void Write_Max7219_byte(uchar DATA);//写入一字节
void Write_Max7219(uchar address1,uchar dat1,uchar address2,uchar dat2);
void Init_MAX7219(void);
                      // 锁存进相应寄存器
void Delay_ms(uint16_t y);
void KeyDown(void);
void Disp_0( void ) ;

uchar KeyValue = 0;	//按键值
uint8_t Pos_Cout = 0;
uint8_t Cout = 0;

void Init_MAX7219(void)
{ 
/*   Write_Max7219(0x09, 0x00,0x09, 0x00);       //译码方式:BCD码
  Write_Max7219(0x0a, 0x03,0x0a, 0x03);       //亮度 
  Write_Max7219(0x0b, 0x07,0x0b, 0x07);       //扫描界限;8个数码管显示
  Write_Max7219(0x0c, 0x01,0x0c, 0x01);       //掉电模式:0,普通模式:1
  Write_Max7219(0x0f, 0x00,0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0
  */
uchar  i;
  Max7219_pinCS=0;
  for(i=0;i<count;i++)
  {
    Write_Max7219_byte(0x09); //译码方式:BCD码       
    Write_Max7219_byte(0x00);    
  }
  Max7219_pinCS=1;
  _nop_();
  Max7219_pinCS=0;
  for(i=0;i<count;i++)
  {
    Write_Max7219_byte(0x0a); //亮度    
    Write_Max7219_byte(0x03);    
  }
  Max7219_pinCS=1;
 _nop_();
   Max7219_pinCS=0;
  for(i=0;i<count;i++)
  {
    Write_Max7219_byte(0x0b); // //扫描界限;8个数码管显示  
    Write_Max7219_byte(0x07);    
  }
  Max7219_pinCS=1;
  _nop_();
  Max7219_pinCS=0;
  for(i=0;i<count;i++)
  {
    Write_Max7219_byte(0x0c); //   //掉电模式:0,普通模式:1
    Write_Max7219_byte(0x01);    
  }
  Max7219_pinCS=1;
  Max7219_pinCS=0;
  for(i=0;i<count;i++)
  {
    Write_Max7219_byte(0x0f); //显示测试:1;测试结束,正常显示:0
    Write_Max7219_byte(0x00);    
  }
  Max7219_pinCS=1;
  _nop_();
}

//--------------------------------------------
//功能:向MAX7219(U3)写入字节
//入口参数:DATA 
//出口参数:无
//说明:
void Write_Max7219_byte(uchar DATA)         
{
    	uchar i;    
	    for(i=8;i>=1;i--)
          {		  
            Max7219_pinCLK=0;
            Max7219_pinDIN=DATA&0x80;
            DATA=DATA<<1;
            Max7219_pinCLK=1;
           }                                 
}

/*******************************************************************************
延时10us
*******************************************************************************/
void delay(uint16_t i)
{
	while(i--);	
}

/*******************************************************************************
延时1ms
*******************************************************************************/
void delayms(uint c)   //误差 0us
{
    uchar a,b;
	for (; c>0; c--)
	{
		 for (b=199;b>0;b--)
		 {
		  	for(a=1;a>0;a--);
		 }      
	}	
}

void Keys_Scan()
{
	if( Key_1 == 0 )  //汉字
	{
		 delayms(1);
		 if( Key_1 == 0 )
		 {
					KeyValue = 1;
			    if( Cout == 0 )
					{
						  Cout = 2;
					}
					else
					{
						  Cout =0;
					}
		 }
		 while( Key_1 == 0 );
	}
}

void main()
{
	uchar temp = 0xfe;

	Init_MAX7219( );
	Cout = 0;
	Disp_0( );
	while(1)
	{		
		Keys_Scan( );
	
		Disp_0( );
				
	}
}

void Disp_0( void ) //显示
{
	uint8_t i = 0,j = 0;
	uint8_t temp = 0;
	
	
	   for(i=1;i<9;i++)
   {
   
 //  Write_Max7219(i,disp1[1][i-1],i,disp1[0][i-1]);

    Max7219_pinCS=0;
    for(j=0;j<count;j++)
    {
        Write_Max7219_byte(i);           //写入地址,即数码管编号
        Write_Max7219_byte(disp1[j+Cout][i-1]);              //写入数据,即数码管显示数字 
  	      _nop_();
     }
     Max7219_pinCS=1;    
 
   }
}

应用前景

本设计可广泛应用于信息发布、广告宣传、体育赛事等领域,例如可用于商场促销信息发布、车站班次信息显示、体育赛事比分显示等场景。

总结

本设计基于51单片机和Proteus8.10仿真软件,设计了一款基于MAX7219驱动的16x8点阵切换显示系统,实现了点阵显示控制、按键切换显示等功能。该设计具有结构简单、成本低廉、易于实现等特点,具有一定的应用价值。

更多系统设计资料,关注获取 ⬇⬇⬇

Logo

纵情码海钱塘涌,杭州开发者创新动! 属于杭州的开发者社区!致力于为杭州地区的开发者提供学习、合作和成长的机会;同时也为企业交流招聘提供舞台!

更多推荐