新型单片机实践课程设计心形霹雳灯课程报告.doc
课 程 新型单片机实践 题 目 心形霹雳灯二级学院 延陵学院 姓 名 学 号 指导教师 设计时间 2011.11.152011.12.14 目录绪论2第一章 总体方案设计3第二章 系统硬件电路的设计4 2.1 晶振电路4 2.2 复位电路4 2.3各种应用软件及芯片的简介5 2.3.1 LED灯的介绍62.3.2 keil软件72.3.3 proteus仿真简介8第三章 系统软件电路的设计93.1 软件设计思想93.2 主程序设计103.3 子程序设计11第四章 调试及性能分析124.1 软件调试134.2 性能分析14总结15参考文献15附录16A 元件清单16B 总原理图17C 程序清单18D 实物图18绪论当今世界,电子技术迅猛发展,点阵式显示器件作为现代信息显示的重要媒体,在金融证券、体育、机场、交通、商业、广告宣传、邮电电信、指挥调度、国防军事等许多领域中得到了广泛应用。因此点阵式显示器件的研制、生产也的到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。目前,点阵式显示器件具体包括LED显示模块和LCD显示模块等。现在发展的LCD比较先进,LCD的优点较为明显,他体积小,容易控制,功能强,价格适宜,能够适应显示器的发展方向,因而在通信、家电、大屏幕投影等领域得到了越来越广泛的应用;随着社会经济的迅猛发展,工业生产逐渐实现了自动化,其中,设备的工作状态和生产过程状态的显示与监控起到了非常重要的作用,对于那些需要显示的信息量不是很大,分辨率不是很高,又需要制造成本相对比较低的场合,使用大、小屏幕LED点阵显示器是比较经济适用的,他可以显示字符、数字、汉字和简单图形,可以根据需要使用不同字号、字型,显示亮度较高,并且对环境条件要求比较低。LED显示又可以分为单色显示和双色显示,可以按照需要的大小、形状和颜色进行组合,并用单片机控制实现各种文字或图形的变化,达到宣传和提示的目的。据不完全统计,1991年,全国LED显示屏的产值还不到亿元人民币,而在1993年,仅蓝通公司一家企业的显示屏产值即达1亿多人民币。由于LED电子显示屏具有所显内容信息量大,外形美观大方,操作使用方便灵活.适用于火车,汽车站,码头,金融证券市场,文化中心,信息中心体育设施等公共场所.该项目广泛涉及了计算机及电子技术中的电源技术,单片机技术,数据通讯技术,显示技术,存储技术,系统软件技术,接口及驱动等技术.我国经济发展迅猛,对信息传播有越来越高的要求.可以相信,LED电子显示屏以其色彩鲜亮夺目,大的显示信息量,寿命长,耗电量小,重量轻,空间尺寸小,稳定性高,易于操作,安装和维护等特点,将在社会经济发展中扮演越来越重要的角色。第一章 总体方案设计总体设计要求本系统采用单片机STC89C52为LED显示屏的控制核心,制造一种简单的霹雳灯,霹雳灯由上到下,再由下到上亮灭,然后闪烁四次,依次循环。本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。根据设计要求,初步确定设计方案如下:1. 选择STC89C52单片机(晶振频率为f=12MHZ)作为整个系统的核心器件,对整个系统进行总体控制,发送并时时处理系统信息。2通过编程心形灯先由上到下,再由下到上亮灭,然后闪烁四次。4.显示信号连接到单片机的P3口。AT89C51复位电路晶振电 路LED显示电路 图1-1总框图第二章 系统硬件电路的设计本系统的硬件电路是由单片机最小系统、动态显示驱动电路两部分组成。其中,单片机最小系统包括电源电路、复位电路和晶振电路构成;显示部分使用共阴型高台扫描、高态显示信号驱动电路,完成亮灭,闪烁效果。总原理图见附录B。2.1晶振电路晶振是为电路提供频率基准的元器件,通常分成有源晶振和无源晶振两个大类,无源晶振需要芯片内部有振荡器,并且晶振的信号电压根据起振电路而定,允许不同的电压,但无源晶振通常信号质量和精度较差,需要精确匹配外围电路(电感、电容、电阻等),如需更换晶振时要同时更换外围的电路。有源晶振不需要芯片的内部振荡器,可以提供高精度的频率基准,信号质量也较无源晶振要好。如图2-1为晶振电路。 2-1 晶振电路图2.2复位电路为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V±5%,即4.755.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。如图2-2为复位电路图。 2-2 复位电路图2.3各种应用软件及芯片的简介单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。2.3.1 LED灯的介绍该灯使用5V电源供电,220V交流电经C1降压电容降压后经全桥整流再通过C2滤波后经限流电阻R3给串联的38颗LED提供恒流电源.LED的额定电流为20mA,但是我们在制作节能灯的时候要考虑很多方面的因素对LED的影响,包括光衰和发热的问题,我们在做这种灯的时候因为LED的安装密度比较高,热量不容易散出,LED的温度对光衰和寿命影响很大,如果散热不好很容易产生光衰,因为LED的特性是温度升高电流就会增大,所以一般在做大功率照明时散热的问题是最重要的,将影响到LED的稳定性,小功率一般都采取自散热方式,所以在电路设计时电流不宜过大.所以一定要有个保护电阻,电容C1还得有一个卸放电阻,限流电阻防止电压升高和温度升高LED的电流增大,C2是滤波电容,实际在LED电路中可以不用滤波电路,C2是用来防止开灯时的冲击电流对LED的损害,开灯的瞬间因为C1的存在会有一个很大的充电电流,该电流流过LED将会对LED产生损伤,有了C2的介入,开灯的充电电流完全被C2吸收起到了开灯防冲击保护.该电路是小功率灯杯最实用的电路,占用体积小可以方便的装在空间较小的灯杯里,现在被灯杯产品广泛的采用.优点:恒流源,电源功耗小,体积小,经济实用.2.3.2 keil软件Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。 使用独立的Keil仿真器时,注意事项 * 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。 * 仿真器上的复位按钮只复位仿真芯片,不复位目标系统。 * 仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。 2.3.3 proteus仿真简介Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。 PROTEUS 是单片机课堂教学的先进助手。 PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实际运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。 它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。 课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台 随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。 使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus 有较高的推广利用价值。 第三章 系统软件电路的设计3.1 软件设计思想主程序中,霹雳灯由上到下,再由下到上亮灭,然后闪烁四次,依次循环。进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用子程序进行延时,判断是否退出相应的方式显示子程序。如图2所示为软件系统框图。主程序延时子程序显示子程序 图3.1程序框图3.2 主程序设计在程序设计上,采用技术循环的方式,首先左移7次,再右移7次,然后从左到右依次点亮,最后闪烁四次,如此循环不停。左移可采用“LED<<1;”指令,右移可采用“LED>>1;”指令。对于计数循环方式可采用for语句达到目的。图3为主程序流程图。 开始输出,延迟左移设置初始值7次?输出延迟右移7次?noYesnoyes图 3.2 主程序流程图主程序如下:/* ch03-3-3.c - 霹雳灯实验程序 */=声明区=#include<reg51.h> / 定义8051暂存器之标头档,P2-1719 #defineLEDP3/ 定义LED接至Port 1void delay(int);/ 声明延迟函数 /=主程序=main()/ 主程序开始 unsigned char i,j; / 声明无号数字元变数i(占1Bytes) LED=0xfe;/ 初值=1111 1110,只有最右1灯亮while(1)/ 无穷循环,程序一直跑 for(i=0;i<7;i+)/ 左移7次 delay(100);/ 延迟100 5m=0.5s LED=(LED<<1)|0x01;/ 左移1位,并设定最低位元为1 / 左移结束,只有最左1灯亮 for(i=0;i<7;i+)/ 右移7次 delay(100);/ 延迟100 5m=0.5s LED=(LED>>1)|0x80;/ 右移1位,并设定最高位元为1/ 结束右移,只有最右1灯亮 LED=0xff;delay(100);LED=0xfe;delay(100);LED=0xfc;delay(100);LED=0xf8;delay(100);LED=0xf0;delay(100);LED=0xe0;delay(100);LED=0xc0;delay(100);LED=0x80;delay(100);LED=0x00;delay(100);for(j=0;j<4;j+) LED=0xff; delay(100); LED=0x00; delay(100);/ while循环结束 / 主程序结束3.3 子程序设计子程序中主要有延时程序,下面来详细介绍。开始P3.0输出1,点亮延时100P3.0输出0,点亮延时100图3-3子程序框图/=子程序= =/* 延迟函数,延迟约x 5ms */void delay(int x)/ 延迟函数开始 int i,j;/ 声明整数变数i,j for (i=0;i<x;i+)/ 计数x次,延迟x 5ms for (j=0;j<600;j+);/ 计数600次,延迟5ms / 延迟函数结束第四章 调试及性能分析4.1 软件调试软件调试主要是利用计算机仿真针对程序中可能存在的错误进行检测,直到得到正确的显示结果。按照程序流程图在KEIL C51软件中编写好程序,在此软件中检测编写好的程序是否有误语法错误。此次软件调试参考前面的子程序,选择动态显示程序和延时程序进行调试,并观察其结果,如图8、9所示。图4-1 动态显示程序调试结果图4-2 延时程序调试结果4.2 性能分析此次系统设计结果较好,LED显示能达到预期的效果。这个方案设计的心形霹雳灯,电路简单,成本较低,并且美观富有创意。总结我们进行了为期两周的课程设计。通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。而安排课程设计的基本目的,是在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟和领悟力。尤其是观察、分析和解决问题的实际工作能力。作为整个学习体系的有机组成部分,课程设计虽然安排在两周进行,但并不具有绝对独立的意义。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。对我们通信专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。课程设计促进了我系人才培养计划的完善和课程设置的调整。参考文献1张靖武,周灵彬单片机系统的PROTEUS设计与仿真电子工业出版社.2夏继强. 单片机实验与实践教程. 北京:北京航空航天大学出版社, 2001. 3何立民从Cygnal 80C51F看8位单片机发展之路单片机与嵌入式系统应用,2002年,第5期:P58. 4何立民. 单片机高级教程.第1版北京:北京航空航天大学出版社,2001.5 AT89C51 DATA SHEEP Philips Semiconductors 1999.dec.6Yang. Y., Yi. J., Woo, Y.Y., and Kim. B.:Optimum design for linearityand efficiency of microwave Doherty amplifier using a new loadmatching technique, Microw. J., 2001, 44, (12), pp. 2036.7 吴金戌,沈庆阳,郭庭吉8051单片机实践与应用清华大学出版社.8 李群芳,肖看单片机原理、接口及应用北京:清华大学出版社.附录A 元件清单元器件名称型号数目1、STC89C52单片机1块2、晶振12MHZ1块3、按钮开关1只4、极性电容0.1uf1只5、瓷片电容30pf2只6、电阻10 k1只7、电阻22014只8、电源插座1个B 总原理图C 程序清单/* ch03-3-3.c - 霹雳灯实验程序 */=声明区=#include<reg51.h> / 定义8051暂存器之标头档,P2-1719 #defineLEDP3/ 定义LED接至Port 1void delay(int);/ 声明延迟函数 /=主程序=main()/ 主程序开始 unsigned char i,j; / 声明无号数字元变数i(占1Bytes) LED=0xfe;/ 初值=1111 1110,只有最右1灯亮while(1)/ 无穷循环,程序一直跑 for(i=0;i<7;i+)/ 左移7次 delay(100);/ 延迟100 5m=0.5s LED=(LED<<1)|0x01;/ 左移1位,并设定最低位元为1 / 左移结束,只有最左1灯亮 for(i=0;i<7;i+)/ 右移7次 delay(100);/ 延迟100 5m=0.5s LED=(LED>>1)|0x80;/ 右移1位,并设定最高位元为1/ 结束右移,只有最右1灯亮 LED=0xff;delay(100);LED=0xfe;delay(100);LED=0xfc;delay(100);LED=0xf8;delay(100);LED=0xf0;delay(100);LED=0xe0;delay(100);LED=0xc0;delay(100);LED=0x80;delay(100);LED=0x00;delay(100);for(j=0;j<4;j+) LED=0xff; delay(100); LED=0x00; delay(100);/ while循环结束 / 主程序结束 /=子程序=/* 延迟函数,延迟约x 5ms */void delay(int x)/ 延迟函数开始 int i,j;/ 声明整数变数i,j for (i=0;i<x;i+)/ 计数x次,延迟x 5ms for (j=0;j<600;j+);/ 计数600次,延迟5ms / 延迟函数结束D 实物图