资料包:
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
1 绪论 1.1 前言 LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。目前大多数的LED点阵显示系统自带字库。其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只能按照预先的设计进行。而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示等。这时一般的显示系统就很难达到要求。另外,由于受到存储器本身的局限,其特殊字符往往难以显示,同时显示内容也不能随意更改。 因此就提出了一种利用PC机和单片机控制的LED显示系统通信方法。该方法可以对显示内容进行实时控制,从而实现诸如动态显示效果。同时用户也可以在PC机上进行显示效果的预览,显示内容亦可以即时修改。同时它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。LED 显示屏发展较快,本文讲述了基于89C51单片机8×8 LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术。 1.2 选题背景 LED电子显示屏是随着计算机及相关的微电子﹑光电子技术的迅猛发展而形成的一种新型信息显示媒体。它利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本低等特点,在短短的十来年中,迅速成长为平板显示的主流产品,在信息显示领域得到了广泛的应用。LED 点阵电子显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成 为众多显示媒体以及户外作业显示的理想选择。同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。 1.3设计要求 利用一块点阵数码板,按编程者要求实现任意符号的显示。 1.4 国内外的研究概况 目前大多数的LED点阵显示系统自带字库。其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只能按照预先的设计进行。而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示等。这时一般的显示系统就很难达到要求。另外,由于受到存储器本身的局限,其特殊字符或图案也往往难以显示,同时显示内容也不能随意更改。本文提出一种利用PC机和单片机控制的LED显示系统通讯方法。该方法可以对显示内容(包括汉字和特殊图符)进行实时控制,从而实现诸如闪动、滚动、打字等多种动态显示效果。该方法同时还可以调节动态显示的速度,同时用户也可以在PC机上进行显示效果的预览,显示内容亦可以即时修改。在我国改革开放之后,特别是进入90年代国民经济高速增长,对公众场合发布信息的需求日益强烈,LED显示屏的出现正好适应了这一市场形势,因而在LED显示屏的设计制造技术与应用水平上都得到了迅速的提高,生产也得到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。 1.5此次设计研究的主要内容应解决的问题此次设计研究的主要内容是设计一个符号显示牌:通过程序控制符号显示牌,使符号显示牌,在无按键按下时,显示数字“0-9”,当第一次按下按键时,显示字母“μ”,当第二次按下按键时显示汉字“公”。 应解决的问题:单片机P1口的输出电流不足以驱动二极管,需要加驱动,本次研究中以S8050作为驱动,同时在S8050NPN晶体管基极加4.7K的电阻。实验前要弄清晶体管三个引脚代表的极性,以免符号显示牌不亮导致而设计失败。
2 总体设计方案 2.1 硬件电路组成 本产品采用以89C51单片机为核心芯片的电路来实现,主要由89C51芯片、晶振电路、三极管驱动电路、按键控制电路、8×8 LED点阵5部分组成,电路框图如图1所示。其中,89C51是一种带4kB闪烁可编程可擦除只读存储器(Falsh Programmable and Erasable Read OnlyMemory,FPEROM)的低电压、高性能CMOS型8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,工业标准的MCS一51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,能够进行1 000次写/擦循环,数据保留时间为10年。他是一种高效微控制器,为很多嵌人式控制系统提供了一种灵活性高且价廉的方案。因此,在智能化电子设计与制作过程中经常用到89C51芯片。时钟电路由89C51的18,19脚的时钟端(XTAI 1及XTAL2)以及12 MHz晶振X 、电容C2、C3组成,采用片内振荡方式。复位电路采用简易的上电复位电路,主要由电阻R ,R2,电容C ,开关K 组成,分别接至89C51的RST复位输人端。LED点阵显示屏采用8x8共64个象素的点阵,可通过万用表检测发光二极管的方法测试判断出该点阵的引脚分布。 我们把行列总线接在单片机的I/O口,然后把上面分析到的扫描代码送入总线,就可以得到显示的字符了。我们在实际应用中是将LED点阵的8条列线通过驱动电路接在P1口,8条行线通过限流电阻接在P0口。单片机89C51按照设定的程序在P1和P0接口输出与内部字符对应的代码电平送至LED点阵的行列线(高电平驱动),从而选中相应的象素LED发光,并利用人眼的视觉暂留特性合成整个字符的显示。再改变取表地址实现字符的滚动显示。硬件电路组成框图如图5所示。 图2-1 硬件电路组成框图 2.2 系统各单元电路设计 2.2.1 89C51单片机最小系统 最小系统包括晶体振荡电路、复位开关和电源部分。图2-2为89C51单片机的最小系统。 图2-2 单片机最小系统 2.2.2 按键控制电路 单片机开始工作时,P2.0是高电平。当按键按下时,检测到一个低电平信号,改变P0口输出信号,控制8×8 LED点阵显示屏显示不同字符。
图2-3 按键控制电路 2.2.3 三极管驱动电路 扫描驱动电路的功能主要是有P1口输出高电平使三极管发射结导通,发射结输出足够大的电流使二极管导通。 图2-4 三极管驱动电路 2.2.4 8×8 LED点阵介绍 图(4)为8×8点阵LED外观及引脚图,,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则电子模块中的0口为1,A口为0即可。应用时限流电阻可以放在横轴或列轴。 图2-5 8×8点阵LED外观及引脚 (1)把“单片机系统”区域中的P0端口用8芯排芯连接到“点阵模块”区域中的“A~H”端口上; (2)把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“0~7”端口上; 为了方便于单片机连接,我们在焊接的过程中特意将0~7接口排列出来作为列,将A~H接口作为行,这样我们就可以直接将P89C51单片机的P0口与0~7接口一次连接,将P89C51单片机的P1口与A~H接口一次连接。要使LED发亮即使给予数字端高电平,字母端给予低电平,就能使二极管发亮。 2.3 字符的点阵显示原理及字库代码获取方法 我们以UCDOS中文宋体字库为例,每一个字由8行8列的点阵组成显示。我们可以把每一个点理解为一个象素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在64象素范围内的任何图形。如查用8位的P89C51单片机控制,如图所示 图2-6 8×8点阵等效电路 为了弄清楚汉字的点阵组成规律,首先通过列扫描方法获取汉字的代码。首先将8行分成4位的上、下两部分,把发光的象素位编为0不发光的象素位为1的十六进制代码。这样就把要显示的“公”字编为如下代码: 0x7f,0xbf,0xc1,0xdf,0xdf,0xdf,0xc1,0xdf 由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出他的扫描代码从而显示在屏幕上。上述方法虽然能够让我们弄清楚字符点阵代码的获取过程。字符点阵显示一般有点扫描、行扫描和列扫描3种。为了符合视觉暂留要求,点扫描方法的扫描频率必须大于16×64—1024 Hz,周期小于1 ms即可。行扫描和列扫描方法的扫描频率必须大于16×8—128 Hz,周期小于7.8 ms即可。
3 程序设计
3.1程序流程图 图3-1 主程序流程图 3.2程序设计 根据上述所说的程序流程图,设计程序如附录3。
4 调试及性能分析
4.1系统调试 4.1.1软件调试 首先根据各单元电路模块,利用Proteus软件将总的硬件原理图绘制好,设计好各模块要使用的I/O口,如:8×8点阵LED显示屏时候插反,先检测下,无硬件错误后,再进行程序编程。 利用C语言的编程方式,将系统要求的基本功能,以及创新功能根据程序流程图编写出来,用Keil软件调试无误后,生成Hex文件。 双击Proteus中的P89C51芯片,将Keil生成的Hex加载到芯片内,进行仿真,经调试后所编写的程序能够完美实现系统所需的各种功能。 4.1.2硬件调试 硬件调试主要是检测硬件电路是否有短路、断路、虚焊等。具体步骤及测试结果如下: (1) 检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导线是否完全连接,对未连接的进行修复。 (2) 参照原理图,检查各个器件之间的连接是否连接正确,是否存在虚焊,经测试,各连接不存在问题。 (3) 以上两项检查并修复完后,给该硬件电路上电,电源指示灯点亮。 (4) 将烧录好程序的最小单片机系统接入各模块后,各模块能过正常工作,如:数码管正常发光。 4.2设计分析 将烧录好程序的最小单片机系统与各模块连接好后,8×8点阵LED显示屏显示初始值。按键一次之后,显示屏显示滚动字符μ,再按键一次,显示屏显示汉字“公”。 经软件调试和硬件调试后,所设计的系统完美实现了所需的控制要求和创新要求。
总结
本文设计一个8×8点阵LED图文显示屏。经过测试,LED各点亮度均匀,可显示图形和文字,且稳定清晰无串扰。本系统具有硬件少、结构简单、容易实现,性能稳定可靠等特点。通过查阅资料,了解了LED发光原理和LED显示技术的原理和现状。在 LED点阵显示屏的设计过程中,学到了很多东西,复习了Protel、Proteus、Keil等软件的基础应用。基本了解了整个嵌入式开发的流程。例如,在进行整个设计之前,应该先根据需求分析,对单片机进行选型,然后对各个硬件模块进行搭试。在画PCB电路板的时候,要注意基本的布板原则。在焊接电路板的时候,应该从最基本的最小系统开始,分模块,逐个进行焊接测试。在对各个硬件模块进行测试时,要保证软件正确的情况下去测试硬件,要不然发生错误时,不知道到底是哪一方出错了。总之,这次设计开发,本人受益非浅,在以后的开发过程中一定总结经验,吸取教训,为以后的学习工作打好基础。 附录1 原件清单
附录2硬件原理图 附录3系统PCB图 附录4点阵的放置与接线方法:
附录5程序清单
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar i,j,k,scan,num,count;
- sbit key=P2^0;
- uchar code table1[]=
- {0x7f,0xbf,0xc1,0xdf,0xdf,0xdf,0xc1,0xdf}; //μ
- uchar code table2[]=
- {0xf7,0xdb,0xad,0xb7,0xbe,0xdd,0xbb,0xf7}; //公
- uchar code table[][8]=
- {{0xff,0xff,0xc3,0xbd,0xbd,0xc3,0xff,0xff}, //0
- {0xff,0xbf,0xbb,0x81,0x80,0xbf,0xbf,0xff}, //1
- {0xff,0xff,0xbb,0x9d,0xad,0xb3,0xff,0xff}, //2
- {0xff,0xff,0xdd,0xbe,0xb6,0xc9,0xff,0xff}, //3
- {0xff,0xef,0xe7,0xeb,0x81,0xef,0xef,0xff}, //4
- {0xff,0xff,0xd1,0xb5,0xb5,0xcd,0xff,0xff}, //5
- {0xff,0xff,0xc1,0xb6,0xb6,0xcd,0xff,0xff}, //6
- {0xff,0xff,0xfd,0xfd,0x8d,0xf5,0xf9,0xff}, //7
- {0xff,0xff,0xc9,0xb6,0xb6,0xc9,0xff,0xff}, //8
- {0xff,0xff,0xd9,0xb6,0xb6,0xc1,0xff,0xff}, //9
- {0xff,0x83,0xed,0xee,0xed,0x83,0xff,0xff}, //A
- {0xff,0xff,0x80,0xb6,0xb6,0xc9,0xff,0xff}, //B
- {0xff,0xc3,0xbd,0xbd,0xbd,0xdb,0xff,0xff}, //C
- {0xff,0xff,0x81,0xbd,0xbd,0xc3,0xff,0xff}, //D
- {0xff,0xff,0x80,0xb6,0xb6,0xb6,0xff,0xff}, //E
- {0xff,0xff,0x80,0xf6,0xf6,0xf6,0xff,0xff} //F
- };
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void main()
- {
- key=1;
- num=0;
- while(1)
- {
- if(num==0)
- {
- for(j=0;j<16;j++)
- {
- if(key==0)
- {
- delay(10);
- if(key==0)
- {
- num=1;
- while(!key);
- }
- }
- if(num!=0)
- break;
- for(k=0;k<30;k++)
- {
- scan=0x01;
- for(i=0;i<8;i++)
- {
- P0=table[j][i];
- P1=scan;
- delay(2);
- scan<<=1;
- }
- }
- }
- }
- if(num==1)
- {
- for(j=0;j<8;j++) //8组数据
- {
- if(key==0)
- {
- delay(10);
- if(key==0)
- {
- num=2;
- while(!key);
- }
- }
- if(num!=1)
- break;
- for(k=0;k<10;k++)
- {
- scan=0x01; //初始扫描信号
- for(i=8;i>0;i--) //扫描周期
- {
- if(i>j)P0=table1[8+(j-i)];
- else P0=table1[j-i];
- P1=scan;
- delay(2);
- scan<<=1;
- }
- }
- }
- }
- if(num==2)
- {
- if(key==0)
- {
- delay(10);
- if(key==0)
- {
- num=0;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
全部资料51hei下载地址(含word格式的设计报告):
14.点阵8x8.rar
(889.47 KB, 下载次数: 285)
|