基于51单片机16*32点阵显示屏的设计与实现

基于51单片机16*32点阵显示屏的设计与实现,第1张

文章目录

设计要求

一、开发软件

1、Keil

2、Proteus

3、PCtol2002 

4、Altium Designer

二、硬件部分

1、51单片机最小系统

2、LED点阵屏

3、74HC595

4、74HC154

三、软件部分

1、74HC595写入数据

2、点阵屏显示数据

 3、点阵屏正向移动

4、点阵屏反向移动

         5、字模建立

四、电路与仿真

总结


设计要求

设计并制作“16×32点阵显示屏”。

构建点阵译码显示单元、电源单元和控制器单元;自主设计电源转换模块,点阵译码显示模块等。

(1)点阵译码显示模块为16行×32列,可显示汉字,并能滚动显示(左右滚动);
(2)显示内容“海南大学”。


一、开发软件 1、Keil 2、Proteus 3、PCtol2002  4、Altium Designer 二、硬件部分 1、51单片机最小系统

电路图如下

2、LED点阵屏

LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。

LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。

LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以“8”字型排列而已
LED点阵屏与数码管一样,有共阴和共阳两种接法,不同的接法对应的电路结构不同
LED点阵屏需要进行逐行或逐列扫描,才能使所有LED同时显示

3、74HC595

74HC595是串行输入并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于IO口扩展。

 数据由SDI输入,当SCLK为上升沿时,数据整体向下移动,当RCLK为上升沿时数据由移位寄存器向右转存入存储寄存器。

当两片芯片级联时,下一级芯片数据由上一级芯片的QH'输入(为图中的SD0引脚)

4、74HC154

74HC138的功能即将4位二进制(A,B,C和D),译码成16输出状态,并且一共有16输出I/O,这16位输出的特点是:互斥(同时只有一位有效)、低有效(低电平表示有效,表示选中)。

简单来说,74HC154实现了用4根线选择16根线(16选1)的功能。

OE1和OE2为芯片的使能端,同时为低电平时芯片有效。

三、软件部分 1、74HC595写入数据
/**
  * @brief  74HC595写入两个字节
  * @param  S X要写入的字节 S为上高8位 X为下低八位
  * @retval 无
  */
void _74HC595_WriteData(unsigned char S,unsigned char X)
{
	unsigned char i;
	RCK=0;
	for(i=0;i<16;i++)
	{
		SCK=0;
		if(i<8)
		{
			SER=X&(0x80>>i);
		}
		else
		{
			SER=S&(0x80>>(i-8));
		}
		SCK=1;
		
	}
	RCK=1;
	
}
2、点阵屏显示数据
/**
  * @brief  LED点阵屏显示一列数据
  * @param  Column 要选择的列,范围:0~31
  * @param  Data 选择列显示的数据,高位在上,1为亮,0为灭
  * @retval 无
  */
void MatrixLED_ShowColumn(unsigned char Column,DataA,DataB)
{
	if(Column < 16)MATRIX_LED_PORT = (Column | 0x20);
	if(Column >= 16)MATRIX_LED_PORT = (Column | 0x10);
	_74HC595_WriteData(DataA,DataB);
	Delay(1);
	MATRIX_LED_PORT&=0x00;
	
}
 3、点阵屏正向移动
while(1)
{
    for(i=0;i<32;i++)
    {			
    	MatrixLED_ShowColumn(i,table1[i+offset],table2[i+offset]);//依次扫描32列
    }
    offset++;                                                     
    if(offset>16*15)offset=0;
}
4、点阵屏反向移动
            for(i=0;i<32;i++)                        //将数组的高一位数据赋值给低一位
			{
				Stable1[i]=Stable1[i+1];
				Xtable2[i]=Xtable2[i+1];
			}
			Stable1[31]=table1[31+16*(offset/16+1)-offset%16]; //最高位数据为下一个字符的最后一列数据
			Xtable2[31]=table2[31+16*(offset/16+1)-offset%16];
			for(i=0;i<32;i++)
			{			
				MatrixLED_ShowColumn(32-i,Stable1[i],Xtable2[i]);	
			}
5、字模建立

1.使用PCtoLCD2002取字模软件,将模式设置为字符模式

2.字模选项如下图所示

因为我们是按列扫描,行显示,所以取模方式为行列式 

 3.输入要显示的字符,点击生成字模

生成字模如下

0x10,0x60,0x02,0x0C,0xC0,0x10,0x08,0xF7,0x14,0x54,0x94,0x14,0xF4,0x04,0x00,0x00
0x04,0x04,0x7C,0x03,0x00,0x01,0x1D,0x13,0x11,0x55,0x99,0x51,0x3F,0x11,0x01,0x00/*"海",0*/

0x04,0xE4,0x24,0x24,0x64,0xA4,0x24,0x3F,0x24,0xA4,0x64,0x24,0x24,0xE4,0x04,0x00
0x00,0xFF,0x00,0x08,0x09,0x09,0x09,0x7F,0x09,0x09,0x09,0x48,0x80,0x7F,0x00,0x00/*"南",1*/

0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00/*"大",2*/

0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00
0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00/*"学",3*/

4.将字模上下部分分开,新建两个数组保存数据

unsigned char code table1[]=
{
0x10,0x60,0x02,0x0C,0xC0,0x10,0x08,0xF7,0x14,0x54,0x94,0x14,0xF4,0x04,0x00,0x00,/*"海",上*/
0x04,0xE4,0x24,0x24,0x64,0xA4,0x24,0x3F,0x24,0xA4,0x64,0x24,0x24,0xE4,0x04,0x00,/*"南",上*/
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*"大",上*/
0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,/*"学",上*/
}

unsigned char code table2[]=
{
0x04,0x04,0x7C,0x03,0x00,0x01,0x1D,0x13,0x11,0x55,0x99,0x51,0x3F,0x11,0x01,0x00,/*"海",下*/
0x00,0xFF,0x00,0x08,0x09,0x09,0x09,0x7F,0x09,0x09,0x09,0x48,0x80,0x7F,0x00,0x00,/*"南",下*/
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/*"大",下*/
0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00,/*"学",下*/
}
四、电路与仿真

正向仿真

反向仿真

电路图如下


总结

经过好几天的努力,现已完成了基本功能,但因为只是做了仿真(因为我懒),实物与理论可能纯在偏差,如有错,望指正。

原理图和仿真我就不给了,大家可以根据我给的图自己画。

程序源码&取自模软件 如下

链接:https://pan.baidu.com/s/1x0F5ruFyxJP5kVsAxUQRBg 
提取码:es6h

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/673297.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存