欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

51单片机教程:8*8 点阵显示字符、数字、简单汉字

程序员文章站 2024-03-15 13:58:17
...

o

点阵显示实验

一、什么是点阵?
我们用之前的方法一个IO口只能控制一个led,如果需要用更少的IO口控制更多的led怎么办呢,于是就有了点阵。
8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则1脚接高电平a脚接低电平,则第一个点就亮了;

二、点阵原理图
可以看到点阵是由led按照一定的排列组成
51单片机教程:8*8 点阵显示字符、数字、简单汉字
实物图:
51单片机教程:8*8 点阵显示字符、数字、简单汉字
我们可以打开protues,用led模仿一下点阵结构,了解一下原理
51单片机教程:8*8 点阵显示字符、数字、简单汉字
三、测试点阵
1、 proteus里点阵是MATRIX,选择8*8就行了
发现没有引脚标识,只能自己测试一下了、
先接一个电源试一下
51单片机教程:8*8 点阵显示字符、数字、简单汉字
它不亮,说明下面的一排是正极,反接一下,可以看到第一个led已经亮了。
51单片机教程:8*8 点阵显示字符、数字、简单汉字
正极多接几个线试试,发现上面的是控制列,下面是控制行
51单片机教程:8*8 点阵显示字符、数字、简单汉字
画原理图,标记一下点阵的极性。方便写下代码
51单片机教程:8*8 点阵显示字符、数字、简单汉字
首先我们要知道点阵的显示原理,这个很重要
1、点阵是扫描显示,也就是同一时刻只有一列或者一行有led显示
2、视觉暂留效果,当扫描足够快的时候,人眼是看不到闪烁的
3、点阵可以横向扫描,也可以纵向扫描

图形显示:
比如要显示 : ‘F’ ,以横向扫描为例,从上到下显示

51单片机教程:8*8 点阵显示字符、数字、简单汉字
1、显示第一行

51单片机教程:8*8 点阵显示字符、数字、简单汉字
2、显示第二行

51单片机教程:8*8 点阵显示字符、数字、简单汉字
3、显示第三行

51单片机教程:8*8 点阵显示字符、数字、简单汉字
4、显示第4行

51单片机教程:8*8 点阵显示字符、数字、简单汉字
5、显示第五行
51单片机教程:8*8 点阵显示字符、数字、简单汉字
这样把8行显示完就可以显示整个图形。

四、取模软件
上面的 ‘F’,利用取模软件生成数组,对于复杂的图形显示就方便的多,这里我使用的lcd图形生成,百度就能下载到,如果不会下载可以留下邮箱
51单片机教程:8*8 点阵显示字符、数字、简单汉字
五、编写程序
1、显示字符

#include <regx51.h>

unsigned int wei[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; 		//扫描8位
unsigned int duan[8] = {
/*--  调入了一幅图像宽度x高度=8x8:F --*/
0x3E,0x02,0x02,0x3E,0x02,0x02,0x02,0x02,
};

void delayms(unsigned int m)   // 延时子程序
{
 	int i,j;
	for(i=0; i<m; i++)
		for(j=0; j<120; j++);
}
  
void main(void)
{	
	int i;																		
	while(1)
	{
		for(i=0; i<8; i++)	   //扫描8行数据
		{
			P2 = wei[i];		 //先发送位码
			P3 = duan[i];	  //再发送断码
			delayms(2);
		}
	}
}

代码效果
51单片机教程:8*8 点阵显示字符、数字、简单汉字
2、显示数字

51单片机教程:8*8 点阵显示字符、数字、简单汉字

#include <regx51.h>

unsigned int wei[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; 		//扫描8位
unsigned int duan[8] = {
/*--  调入了一幅图像宽度x高度=8x8  : 1 --*/
0x00,0x08,0x0C,0x08,0x08,0x08,0x08,0x1C,
};

void delayms(unsigned int m)   // 延时子程序
{
 	int i,j;
	for(i=0; i<m; i++)
		for(j=0; j<120; j++);
}
  
void main(void)
{	
	int i;																		
	while(1)
	{
		for(i=0; i<8; i++)	    //扫描8行数据
		{
			P2 = wei[i];		 //先发送位码
			P3 = duan[i];	  //再发送断码
			delayms(2);
		}
	}
}

代码效果:
51单片机教程:8*8 点阵显示字符、数字、简单汉字
3、显示简单汉字(标准汉字需要16*16点阵)
51单片机教程:8*8 点阵显示字符、数字、简单汉字

#include <regx51.h>

unsigned int wei[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; 		//扫描8位
unsigned int duan[8] = {
/*--  调入了一幅图像宽度x高度=8x8  : 大 --*/
0x00,0x08,0x7F,0x08,0x14,0x22,0x41,0x00,
};

void delayms(unsigned int m)   // 延时子程序
{
 	int i,j;
	for(i=0; i<m; i++)
		for(j=0; j<120; j++);
}
  
void main(void)
{	
	int i;																		
	while(1)
	{
		for(i=0; i<8; i++)	   //扫描8行数据
		{
			P2 = wei[i];		 //先发送位码
			P3 = duan[i];	  //再发送断码
			delayms(2);
		}
	}
}

代码效果:
51单片机教程:8*8 点阵显示字符、数字、简单汉字

相关标签: 教程 单片机