LED点阵显示原理(取字模软件+Keil+Proteus)

前言

写这个的时候我还是有点生气的,因为发现完全按照书上面的步骤来,结果发现不理想,后面还是自己调试才解决了。-_-说多了都是泪,直接进入正文。

软件的操作还是参考我之前的博客。

LED数码管的静态显示与动态显示(Keil+Proteus)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134101256?spm=1001.2014.3001.5501

16*16点阵码

首先是点阵码部分,我相信应该没有人会傻傻的自己去画吧,而且这样还容易出错,这里可以用取字模的软件来实现。

PCtoLCD2002

LED点阵显示原理(取字模软件+Keil+Proteus)_第1张图片

 封(0) 奚(1) 泽(2) 优(3)

DB 02H,02H,12H,23H,12H,22H,12H,22H,FEH,FCH,12H,24H,12H,24H,12H,24H;
DB 00H,00H,09H,00H,08H,C2H,08H,01H,FFH,FEH,08H,00H,08H,00H,00H,00H;"封",0

DB 00H,01H,40H,11H,60H,91H,54H,92H,4DH,92H,55H,94H,66H,98H,56H,F0H;
DB 84H,98H,88H,94H,82H,92H,91H,92H,A0H,D1H,80H,11H,00H,01H,00H,00H;"奚",1

DB 08H,20H,06H,20H,40H,7EH,31H,80H,00H,00H,41H,08H,61H,48H,52H,48H;
DB 4AH,48H,45H,FFH,4AH,48H,52H,48H,61H,48H,01H,08H,01H,00H,00H,00H;"泽",2

DB 00H,80H,01H,00H,06H,00H,1FH,FFH,E0H,00H,08H,01H,08H,06H,08H,38H;
DB FFH,C0H,08H,00H,0FH,FCH,88H,02H,68H,02H,08H,02H,08H,1EH,00H,00H;"优",3

 字模提取 V2.1

LED点阵显示原理(取字模软件+Keil+Proteus)_第2张图片

LED点阵显示原理(取字模软件+Keil+Proteus)_第3张图片

/*--  文字:  封  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x7E,0x10,0x10,0xFF,0x10,0x00,0x12,
0x10,0x14,0x10,0x14,0xFE,0x10,0x10,0x10,0x10,0x10,0xF0,0x10,0x0F,0x14,0x02,0x08,

/*--  文字:  奚  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x3F,0xFE,0x00,0x44,0x10,0xA8,0x08,0x10,0x02,0xF8,0x01,0xC0,0x04,0x30,0x08,
0xFC,0x1F,0x80,0x10,0x80,0x00,0xFE,0x3F,0x40,0x01,0x20,0x02,0x18,0x0C,0x07,0x70,

/*--  文字:  泽  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xE4,0x1F,0x48,0x10,0x88,0x08,0x01,0x05,0x02,0x02,0x82,0x0D,0x68,0x72,
0x08,0x02,0xC4,0x1F,0x07,0x02,0x04,0x02,0xE4,0x3F,0x04,0x02,0x04,0x02,0x00,0x02,

/*--  文字:  优  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x09,0x10,0x11,0x10,0x11,0x08,0x01,0xE8,0x7F,0x0C,0x05,0x0C,0x05,0x0A,0x05,
0x09,0x05,0x08,0x05,0x88,0x04,0x88,0x44,0x88,0x44,0x48,0x44,0x48,0x78,0x28,0x00,

Keil

程序就是和书上基本上一致,就是注释那两行代码即可。他的原理就是逐行的进行打印,然后通过十六进制数打印没一行,因为他的速度快,所以就和一起打印一样。

#include 
#define uchar unsigned char
#define uint unsigned int 
#define out0 P0
#define out1 P1
#define out2 P2


void delay(uint y) //延时函数
{
	uchar x=250;
	for(;y>0;y--)
	{
		while(--x);
		x=100;
	}
}

uchar code string[]=
{
/*--  文字:  封  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x7E,0x10,0x10,0xFF,0x10,0x00,0x12,
0x10,0x14,0x10,0x14,0xFE,0x10,0x10,0x10,0x10,0x10,0xF0,0x10,0x0F,0x14,0x02,0x08,

/*--  文字:  奚  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x3F,0xFE,0x00,0x44,0x10,0xA8,0x08,0x10,0x02,0xF8,0x01,0xC0,0x04,0x30,0x08,
0xFC,0x1F,0x80,0x10,0x80,0x00,0xFE,0x3F,0x40,0x01,0x20,0x02,0x18,0x0C,0x07,0x70,

/*--  文字:  泽  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xE4,0x1F,0x48,0x10,0x88,0x08,0x01,0x05,0x02,0x02,0x82,0x0D,0x68,0x72,
0x08,0x02,0xC4,0x1F,0x07,0x02,0x04,0x02,0xE4,0x3F,0x04,0x02,0x04,0x02,0x00,0x02,

/*--  文字:  优  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x09,0x10,0x11,0x10,0x11,0x08,0x01,0xE8,0x7F,0x0C,0x05,0x0C,0x05,0x0A,0x05,
0x09,0x05,0x08,0x05,0x88,0x04,0x88,0x44,0x88,0x44,0x48,0x44,0x48,0x78,0x28,0x00,
}  ;
void main()
{	uchar i,j,n;
	while(1)
	{
		for(j=0;j<4;j++)	//共显示4个汉字
		{
			for(n=0;n<40;n++)//每个汉字整屏扫描40次
			{
				for(i=0;i<15;i++)//逐行扫描16行
				{
					out1=i%15;//输出行码
			    out0=string[i*2+j*32];//输出列码C0~C7
					out2=string[i*2+1+j*32];//输出列码C8~C15
					delay(4);//每一行之间的延时
					//out0=0xff;
					//out2=0xff;
				}
			}
		}
	}
}

Proteus

对书上面的程序进行了修改,图中16*16的LED点阵是通过4个8*8的点阵来实现的(这样的点阵是需要自己绘制的,不然引脚的位置不对)。

这个我反犯的两个错误一个就是74HC154的接地符弄错了,导致他每次的打印都是一列一列的。

第二个就是反相器,我就是按照书上的弄,但是不知道他要干嘛,打印出来的结果感觉是一个字,但是又不对,想着是不是弄反了,就将反相器去掉了。

先展示如果只用自带的器件来实现。

所需元器件

元件名称 Proteus关键字
51单片机 AT89C51
4-16译码器 74HC154
蓝色的8*8LED点阵 MATRIX-8X8-BLUE
绿色的8*8LED点阵 MATRIX-8X8-GREEN
橘色的8*8LED点阵 MATRIX-8X8-ORANGE
红色的8*8LED点阵 MATRIX-8X8-RED
排阻 PESPACK-8
电源 POWER
接地 GROUND

这个主要需要注意的就是引脚的连接。(别问怎么知道的,问就是试出来的,按照书上面的连接肯定四块大的方向不会错,就是可能会有行列连反的现象出现,把一个字拆成四块,然后再看四个部分哪里有问题,有问题就把行列反过来连接即可)

颜色可以统一一个颜色,我是看刚好有四种颜色就分别表示四个模块。

LED点阵显示原理(取字模软件+Keil+Proteus)_第4张图片

效果图

LED点阵显示原理(取字模软件+Keil+Proteus)_第5张图片

LED点阵显示原理(取字模软件+Keil+Proteus)_第6张图片

LED点阵显示原理(取字模软件+Keil+Proteus)_第7张图片

LED点阵显示原理(取字模软件+Keil+Proteus)_第8张图片

LED点阵显示原理(取字模软件+Keil+Proteus)_第9张图片

拓展

下面是用老师给的元件库来实现的。

LED点阵显示原理(取字模软件+Keil+Proteus)_第10张图片

 有反相器的效果图。LED点阵显示原理(取字模软件+Keil+Proteus)_第11张图片

无反相器的效果图

LED点阵显示原理(取字模软件+Keil+Proteus)_第12张图片

LED点阵显示原理(取字模软件+Keil+Proteus)_第13张图片 LED点阵显示原理(取字模软件+Keil+Proteus)_第14张图片LED点阵显示原理(取字模软件+Keil+Proteus)_第15张图片如果你可以自己绘制一个16*16的效果图就更加好。

LED点阵显示原理(取字模软件+Keil+Proteus)_第16张图片

参考链接

 Proteus仿真实验----8*8点阵(点扫描实验)_matrix-8x8_DH小雷家的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_46510976/article/details/127950291【Proteus】16乘16点阵滚动播放 - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/138580722【精选】Proteus8.6中16x16LED点阵制作教程_16*16点阵_TiAmoLH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/yz20200414/article/details/116958385proteus仿真51单片机驱动16x16点阵显示自己名字和符号_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV18G4y1b79A/?spm_id_from=333.337.search-card.all.click&vd_source=7c3bfbf39d037fe80c97234396acc524

总结

看了几天努力还是没有白费,就一直按照书上面对,结果也没有发现什么问题,改了代码改原理图,结果一模一样的反而是有问题的,所以以后大家还是需要自己思考去完成。

你可能感兴趣的:(proteus,Keil,学习,笔记,C)