实验背景:
LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。
实验说明:
8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮。
实验步骤:
1.首先将开发板与电脑用USB线连接(连接串口可用),并用排线将芯片管教与点阵行孔和列控相连。
2.打开Keil软件进行控制程序编写,建立工程。
-
3.用一个8X8点阵显示字形“我❤你生生世世”为例,需要LED点阵显示相应字形,采用点阵列扫描(如下程序),可将上图连线点电平设为1,再翻转90°,把每一行显示的二进制化为16进制,直接写在程序中即可,具体如下图示代码:
4.继续添加头文件、点阵显示程序、74HC595驱动程序、扫描延时程序等,写完完整程序后并生成hex文件。
头文件
//该板子上的点阵为8*8,只能显示简单的一些汉子,如果要显示真正的汉字
//通过取模软件取的可以选择16*16点阵的板子
#include
#include
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
//--定义要使用的IO口--//
#define COMMONPORTS P0
//--列选通控制--//
unsigned char code TAB[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- 点阵显示程序
本次实验使用的是7X8二维数组,所以如下代码要改成[7][8],在扫描延时程序中,j的值也要相应的改为7。
//--点阵字码--//
unsigned char code CHARCODE[7][8]=
{
0x10,0x55,0xBF,0x14,0x10,0xFE,0x99,0x52, //我
0x38,0x64,0x22,0x11,0x11,0x22,0x64,0x38, //心形
0x20,0x7F,0x84,0x6A,0xC1,0x5F,0x68,0x44, //你
0x11,0x21,0xE9,0x29,0xFF,0x29,0x29,0x21, //生
0x11,0x21,0xE9,0x29,0xFF,0x29,0x29,0x21, //生
0x20,0xFF,0x21,0xFD,0x25,0xFD,0x21,0x20, //世
0x20,0xFF,0x21,0xFD,0x25,0xFD,0x21,0x20, //世
};
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i
- 74HC595驱动程序
/*******************************************************************************
* 函数名 : Hc595SendByte(unsigned char dat)
* 函数功能 : 想74H595发送一个字节的数据
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void Hc595SendByte(unsigned char dat)
{
unsigned char a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
- 扫描延时程序
j的值相应的改为7。
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void main()
{
unsigned char tab, j;
unsigned int i;
while(1)
{
for(i= 0; i<50; i++ ) //两个字之间的扫描间隔时间
{
for(tab=0;tab<8;tab++)
{
Hc595SendByte(0x00); //消隐
COMMONPORTS = TAB[tab]; //输出字码
Hc595SendByte(CHARCODE[j][tab]);
delay(2);
}
}
j++;
if(j == 7)
{
j = 0;
}
}
}
5.利用烧录软件进行烧录同时重启开发板。
-
6.可以看到LED点阵屏显示字形“我❤你生生世世”。
实验总结:
- 1.使用字模提取软件zimo221.exe (密码:s0gi)可以直接得到所需字形的代码,无须计算,当字形太多时,挨个计算就有点繁杂,懂得计算方法即可。详细说一下这个软件:
①用的时候要改成8X8的,因为默认是16X16,输入文字之后,记得要摁“crtl+enter”结束文字输入。我在用的时候,发现输入文字的时候,有的他自动跳成16X16的了,所以我是直接在生成的白板上画的(在“模拟动画”栏里有个“放大格点”,画的时候就不会眼疼了),然后取模方式改成“C51模式”,直接复制生成的十六进制数就好了。我感觉8X8有点小,字太复杂的话,弄出来可能会乱。我是一开始弄了个比较复杂的字,代码也是对的,但是在单片机上显示的时候就看不清了。
②记得在选项中改成“纵向取模”。
③但是也要懂得计算的方法。要注意两个问题,一是采用的是点阵列扫描,由左至右共八列,从上到下为高位到低位;二是二进制转十六进制的计算过程要正确。
- 2.每一个字由8行8列的点阵组成显示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在64象素范围内的任何图形。
- 3.本次实验使用的是7X8的二维数组,所以在计算点阵显示代码的同时,还要注意将代码中4X8二维数组改成7X8二维数组,以及j的改动,注意前后对应,切勿只随意添加点阵显示代码,忽略了前后的照应。
-
4.刚开始电脑识别不到单片机,老是在设备管理器里显示USB2.0,然后就右击更新驱动,选择自动搜索更新,还不行。之后就找到网盘里的文件,下载“应用驱动”里的CH341SER.EXE,然后发现安装失败。然后就发现网盘里还有一个word文件“关于驱动手动安装失败”,然后就按步骤一步步的来,我的是属于“数据无效”的情况,做完word里的的步骤,然后重新安装了一下那个驱动文件(CH341SER.EXE),就能安装上了。然后再到设备管理器里去右击USB2.0更新驱动,然后就能在烧录软件那里找到端口号了。
- 5.通过本次实验,我了解了LED点阵显示的基本原理和实现方法,掌握了常用LED和单片机元件的识别和测试、8×8点阵的显示代码的计算;了解了电路的连接方法以及如何提高电路的性能,并在独立思考、动手操作的能力上有了提高。