《单片机结课论文 .doc》由会员分享,可在线阅读,更多相关《单片机结课论文 .doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 8*8点阵显示屏的设计摘要:本设计是基于P89C51的88点阵LED数码字符显示器的设计,LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成。LED点阵显示屏可以显示数字或符号,通常用来显示时间、速度、系统状态等。本文讲述了基于P89C51单片机88LED数码字符显示器的基本原理、硬件组成与设计,Proteus软件仿真,程序设计等基本环节与相关技术。【关键词】51单片机,Proteus软件,显示屏 LED是发光二极管LIGHTEMINTTINGDIODE的英文缩写,是一种直接能将电能转化为可见光的半导体。LED点阵是由发光二极管排列组成的显示器件,在日常生活中随处
2、可见,其发光类型属于冷光源,效率及发热量是普通发光器件难以比拟的。它采用低电压扫描驱动,具有耗电少、使用寿命长、成本低、亮度高、故障少、视角大、可视距离远、可靠耐用、应用灵活、安全、响应时间短、绿色环保、控制灵活等特点。随着社会经济的不断进步,人们对LED显示器的认识不断加深,其应用领域越来越广。LED电子显示屏具有所显内容信息量大,外形美观大方,操作使用方便灵活。适用于火车,汽车站,码头,金融证券市场,文化中心,信息中心体育设施等公共场所。该项目广泛涉及了计算机及电子技术中的电源技术,单片机技术,数据通讯技术,显示技术,存储技术,系统软件技术,接口及驱动等技术。本产品采用以P89C51单片机
3、为核心芯片的电路来实现,主要由P89C51芯片、晶振电路、三极管驱动电路、按键控制电路、88LED点阵5部分组成,电路框图如图1所示。其中,P89C51是一种带4kB闪烁可编程可擦除只读存储器的低电压、高性能CMOS型8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,工业标准的MCS一51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,能够进行1000次写擦循环,数据保留时间为10年。他是一种高效微控制器,为很多嵌人式控制系统提供了一种灵活性高且价廉的方案。因此,在智能化电子设计与制作过程中经常用到P89C51芯片。时钟电路由P89C51
4、的18,19脚的时钟端(XTAI1及XTAL2)以及12MHz晶振X、电容C2、C3组成,采用片内振荡方式。复位电路采用简易的上电复位电路,主要由电阻R,R2,电容C,开关K组成,分别接至P89C51的RST复位输入端。LED点阵显示屏采用8x8共64个象素的点阵,可通过万用表检测发光二极管的方法测试判断出该点阵的引脚分布。我们把行列总线接在单片机的I/O口,然后把上面分析到的扫描代码送入总线,就可以得到显示的字符了。我们在实际应用中是将LED点阵的8条列线通过驱动电路接在P1口,8条行线通过限流电阻接在P0口。单片机89C51按照设定的程序在P1和P0接口输出与内部字符对应的代码电平送至LE
5、D点阵的行列线(高电平驱动),从而选中相应的象素LED发光,并利用人眼的视觉暂留特性合成整个字符的显示。再改变取表地址实现字符的滚动显示。硬件电路组成框图如图2-1所示。1.系统各单元的电路设计 1.1P89C51单片机最小系统 最小系统包括晶体振荡电路、复位开关和电源部分。图2-2为P89C51单片机的最小系统。1.2按键控制电路单片机开始工作时,P2.0是高电平。当按键按下时,检测到一个低电平信号,改变P0口输出信号,控制88LED点阵显示屏显示不同字符。1.3三极管驱动电路扫描驱动电路的功能主要是有P1口输出高电平使三极管发射结导通,发射结输出足够大的电流使二极管导通。 1.4字符的点阵
6、显示原理及字库代码获取方法我们以UCDOS中文宋体字库为例,每一个字由8行8列的点阵组成显示。我们可以把每一个点理解为一个象素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在64象素范围内的任何图形。如查用8位的P89C51。2.程序流程图 开始 初始化 依次显示0-9 是否按键 YES NO 依次显示0-9 显示字符 是否按键显示字符 显示汉字公是否按键显示汉字公 NO YES 主程序流程图3.程序设计 根据上述所说的程序流程图,设计程序见附录4.调试及性能分析 系统调试首先根据各单元电路模块,利用Proteus软件将总的硬件原理图绘制好,设计好各模块要使用
7、的I/O口,如:88点阵LED显示屏时候插反,先检测下,无硬件错误后,再进行程序编程。利用C语言的编程方式,将系统要求的基本功能,以及创新功能根据程序流程图编写出来,用Keil软件调试无误后,生成Hex文件,如图11图12。双击Proteus中的P89C51芯片,将Keil生成的Hex加载到芯片内,进行仿真,经调试后所编写的程序能够完美实现系统所需的各种功能。硬件调试主要是检测硬件电路是否有短路、断路、虚焊等。具体步骤及测试结果如下:(1)检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导线是否完全连接,对未连接的进行修复。(2)参照原理图,检查各个器件之间的连接是否连接正确,是否存
8、在虚焊,经测试,各连接不存在问题。(3)以上两项检查并修复完后,给该硬件电路上电,电源指示灯点亮。(4)将烧录好程序的最小单片机系统接入各模块后,各模块能过正常工作,如:数码管正常发光。5. 设计分析将烧录好程序的最小单片机系统与各模块连接好后,88点阵LED显示屏显示初始值。按键一次之后,显示屏显示滚动字符,再按键一次,显示屏显示汉字“公”。经软件调试和硬件调试后,所设计的系统完美实现了所需的控制要求和创新要求。6.总结 本次课程设计到现在有两个星期,回顾这些天我感到学到了很多东西,在写这个心得的时候,我想就这些天的收获,说一说自己内心的想法。本设计是一个8x8的点阵LED数码显示器,能够在
9、目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。总结本文的研究工作,主要做了下面几点工作:一、 通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标。并且通过对单片机资料的查阅和应用,更进一步增加了对单片机知识的理解和运用能力。并证实了自己的思路:“查资料思考总结运用找出差错,再查资料和向别人询问再次运用”的正确性。二、 本文设计的LE
10、D显示屏能够实现在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。三、 本文列出了系统具体的硬件设计方案,硬件结构电路图,软件流程图和具体汇编语言程序设计与调试等方面。四、在这次课程设计的过程中学会了PROTEUS的基本使用,感到PROTEUS对电子专业的同学来说是一个很有用的软件。在运用PROTEUS时可以运用一些快捷的标号,总线的方法画图,这样既能使电路图清晰,简单,更能大大提高画图速度。五、通过这次课程设计,重新复习并进一步增强了动手的能力,学以致用,把只是运用到实际生活中才是根本目的。六、存在问题:没有考虑仿真软件是一个理想的仿真环境,而实
11、际连接的电路板会由于譬如连接不当,相邻器件间的干扰等等的问题导致在仿真软件中能良好运行的程序,出现显示问题,经过排查和合理的器件摆放焊接,问题解决。总体来说这次的科研实践很成功,达到了预想的目的:学到了知识,提高了能力,完成了任务。有点缺憾是时间有限,不能进一步深入和扩散学习和研究。希望有时间可以对程序和电路图作更进一步的改进,譬如实现点阵的上下移动,对角线移动,多色显示等。 通过课程考核,多少学习到了一些专业知识,改正了很多不曾发现的问题,为即将的毕业设计打下了基础,很有意义。#include#defineucharunsignedchar#defineuintunsignedintucha
12、ri,j,k,sca n, num,count;sbitkey=P20;ucharcodetable1=0x7f,0xbf,0xc1,0xdf,0xdf,0xdf,0xc1,0xdf;/ucharcodetable2=0xf7,0xdb,0xad,0xb7,0xbe,0xdd,0xbb,0xf7;/公ucharcodetable8= 0xff,0xff,0xc3,0xbd,0xbd,0xc3,0xff,0xff,/00xff,0xbf,0xbb,0x81,0x80,0xbf,0xbf,0xff,/10xff,0xff,0xbb,0x9d,0xad,0xb3,0xff,0xff,/20xff,0
13、xff,0xdd,0xbe,0xb6,0xc9,0xff,0xff, /30xff,0xef,0xe7,0xeb,0x81,0xef,0xef,0xff,/40xff,0xff,0xd1,0xb5,0xb5,0xcd,0xff,0xff,/50xff,0xff,0xc1,0xb6,0xb6,0xcd,0xff,0xff,/60xff,0xff,0xfd,0xfd,0x8d,0xf5,0xf9,0xff,/70xff,0xff,0xc9,0xb6,0xb6,0xc9,0xff,0xff,/80xff,0xff,0xd9,0xb6,0xb6,0xc1,0xff,0xff;/9voiddelay(u
14、intz)uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidmain()key=1;num=0;while(1)if(num=0)for(j=0;j10;j+)if(key=0 delay(10);if(key=0)num=1;while(!key);if(num!=0)break;for(k=0;k30;k+)scan=0x01;for(i=0;i8;i+)P0=tableji;P1=scan;delay(2);scan=1; if(num=1)for(j=0;j8;j+)/8组数据if(key=0)delay(10);if(key=0) num=2;while(!key); if(num!=1)break;for(k=0;k0;i-)/扫描周期if(ij)P0=table18+(j-i);elseP0=table1j-i;P1=scan;delay(2);scan=1; if(num=2) if(key=0) delay(10); if(key=0) num=0;while(!key); scan=0x01for(i=0;i8;i+)P0=table2count+; if(count=8)count=0;P1=scan;delay(2);scan=1;