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

功能描述
本设计主要实现以下功能:
-
点阵显示控制: 利用MAX7219芯片驱动16x8点阵显示屏,实现字符的显示控制。
-
按键切换显示: 通过按键切换显示内容,循环显示“中国加油”四个字样。
-
显示效果控制: 可通过程序控制显示亮度、显示速度等参数,实现不同的显示效果。
系统设计
-
硬件设计:
-
主控模块: 采用STC89C52单片机作为核心控制器,负责数据处理和显示控制。
-
点阵驱动模块: 采用MAX7219芯片驱动16x8点阵显示屏,实现字符的显示。
-
按键模块: 采用独立按键实现显示内容的切换。
-
电源模块: 采用USB供电,为整个系统提供稳定的工作电压。
-
-
软件设计:
-
主程序: 负责系统初始化、按键扫描、显示控制等功能。
-
显示子程序: 负责将字符数据发送给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点阵切换显示系统,实现了点阵显示控制、按键切换显示等功能。该设计具有结构简单、成本低廉、易于实现等特点,具有一定的应用价值。
更多系统设计资料,关注获取 ⬇⬇⬇
更多推荐


所有评论(0)