1、目 录引言- 1 -第一章 总体设计方案- 3 -1.1设计思路- 3 -1.2原件清单- 4 -第二章 电路设计与分析- 5 -2.1 AT89C51- 5 -2.1.1主要特性- 5 -2.1.2 管脚说明- 5 -2.1.3 AT89C51单片机的P口特点- 7 -2.2 设计原理图- 9 -第三章 软件设计与分析- 11 -3.1位控法- 11 -3.2 proteus仿真- 14 -第四章 总结与致谢- 15 -4.1总结- 15 -4.2致谢- 18 -参考文献- 19 -附录1- 21 -附录2- 23 -引言当今社会,这种由单片机芯片控制各种硬件工作的技术也日益成熟,并普及在交
2、通、化工、机械等各个领域。而流水灯这项技术在生活中的应用更是广泛,较为贴近生活。而流水灯控制的设计所需要的知识也正好吻合了我们本学期对于单片机这门课程的学习,所以设计流水灯控制的这个课题让我们对知识的学习和巩固都有了进一步的加深。学习单片机的最有效方法就是理论与实践并重,现在我把单片机流水灯设计作为一个课程设计,需要更深的去了解单片机的很多功能,努力的去查找资料,当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动
3、控制的核心就是单片机。单片机课程设计主要是为了让我们增进对89C51单片机电路的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目的。关键词:流水灯,89C51单片机,控制系统 第一章 总体设计方案1.1设计思路本课题使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。如果要让接在P
4、0.0口的LED1亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED1熄灭,就要把P0.0口的电平变为高电平;同理,接在P0.1P0.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。同样的道理,可以让8个灯左移点亮,全亮、全灭。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。在此基础上,增加外扩设备,利用74LS373和8255扩展成24
5、个LED灯循环显示。1.2原件清单表1 流水灯设计元件表元件名称型号数量/个用途单片机AT89C511控制核心晶振12MHZ1晶振电路电容30pF2晶振电路电阻Respack88上位电阻电阻10k4开关电阻电阻10k1复位电路电源+5V1提供电源拨码开关BUTTON4发出信号数码管7SEG-MPX1-CC8显示电路第二章 电路设计与分析2.1 AT89C51 2.1.1主要特性 与MCS-51兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz24Hz 三级程序存储器锁定 128*8位内部RAM 32可编程I/O线 5个中断源 可编程串行通道 低功
6、耗的闲置和掉电模式 片内震荡器和时钟电路2.1.2 管脚说明电源引脚 Vcc(40脚):典型值5V。 Vss(20脚):接低电平。外部晶振 XTAL1、XTAL2分别与晶振两端相连接。输入输出口引脚: P0口:I/O双向口。作输入口时,应先软件置“ 1”。 P1口:I/O双向口。作输入口时,应先软件置“ 1”。 P2口:I/O双向口。作输入口时,应先软件置“ 1”。 P3口:I/O双向口。作输入口时,应先软件置“ 1”。控制引脚: RST、ALE/-PROG、-PSEN、-EA/Vpp组成了MSC-51的控制总线。 RST(9脚):复位信号输入端(高电平有 与MCS-51兼容 4K字节可编程闪
7、烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz24Hz 三级程序存储器锁定 128*8位内部RAM 32可编程I/O线 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内震荡器和时钟电路电源引脚 Vcc(40脚):典型值5V。 Vss(20脚):接低电平。外部晶振 XTAL1、XTAL2分别与晶振两端相连接。输入输出口引脚: P0口:I/O双向口。作输入口时,应先软件置“ 1”。 P1口:I/O双向口。作输入口时,应先软件置“ 1”。 P2口:I/O双向口。作输入口时,应先软件置“ 1”。 P3口:I/O双向口。作输入口时,应先软件置“ 1”。 控制引脚:
8、RST、ALE/-PROG、-PSEN、-EA/Vpp组成了MSC-51的控制总线。 RST(9脚):复位信号输入端(高电平效)。 ALE/-PROG(30脚):地址锁存信号输出端。 第二功能:编程脉冲输入。 -PSEN(29脚):外部程序存储器读选通信号。 -EA/Vpp(31脚):外部程序存储器使能端。 第二功能:编程电压输入端(+21V)。2.1.3 AT89C51单片机的P口特点 P0口:是一个8位漏极开路输出型双向I/O端口。作为输出端口时,每位能以吸收电流的方式驱动8 个TTL输入,对端口写1时,又可作高阻抗输入端用。在访问外部程序或数据存储器时,它是时分多路转换的地址(低8位)/
9、数据总线,在访问期间将激活内部的上拉电阻。P1口:P1口是一个带有内部上拉电阻的8位双向I/O端口。P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P2口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流。P2口:P2口是一个带有内部上拉电阻的8位双向I/O端口。P2口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P2口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流。在访问外部程序存储器时
10、和16位外部地址的外部数据存储器(如执行 MOVX DPTR)时,P2口送出高8位地址。在访问8位地址的外部数据存储器(如执行 MOVX RI)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。P3口:P3口是一个带有内部上拉电阻的8位双向I/O端口。P3口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P3口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流。排阻的作用 所谓排阻就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚。
11、其余引脚正常引出。所以如果一个排阻是由n个电阻构成的,那么它就有n+1只引脚,一般来说,最左边的那个是公共引脚。它在排阻上一般用一个色点标出来。排阻一般应用在数字电路上,比如:作为某个并行口的上拉或者下拉电阻用。使用排阻比用若干只固定电阻更方便。2.2 设计原理图图1 流水灯硬件原理图 从原理图中可以看出,如果要让接在P0.0口的LED1亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED1熄灭,就要把P0.0口的电平变为高电平;同理,接在P0.1P0.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1LE
12、D8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。第三章 软件设计与分析3.1位控法 单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现
13、流水灯控制的软件编程方法。这是一种操作简单容易理解的方法,采用顺序程序结构,用位指令控制P0口的每一个位输出高低电平,从而来控制相应LED灯的亮灭。程序如下:ORG0000H ;单片机上电后从0000H地址执行AJMP START ;跳转到主程序存放地址处ORG 0030H ;设置主程序开始地址START:MOV SP,#60H ;设置堆栈起始地址为60HCLR P0.0 ; P0.0输出低电平,使LED1点亮ACALLDELAY ;调用延时子程序SETBP0.0 ; P0.0输出高电平,使LED1熄灭CLR P0.1 ; P0.1输出低电平,使LED2点亮ACALLDELAY ;调用延时子程
14、序SETBP0.1 ; P0.1输出高电平,使LED2熄灭CLR P0.2 ; P0.2输出低电平,使LED3点亮ACALLDELAY ;调用延时子程序SETBP0.2 ;P0.2输出高电平,使LED3熄灭CLR P0.3 ;P0.3输出低电平,使LED4点亮ACALLDELAY ;调用延时子程序SETBP0.3 ;P0.3输出高电平,使LED4熄灭CLR P0.4 ;P0.4输出低电平,使LED5点亮ACALLDELAY ;调用延时子程序SETBP0.4 ;P0.4输出高电平,使LED5熄灭CLR P0.5 ; P0.5输出低电平,使LED6点亮ACALLDELAY ;调用延时子程序SETB
15、P0.5 ;P0.5输出高电平,使LED6熄灭CLR P0.6 ;P0.6输出低电平,使LED7点亮ACALLDELAY ;调用延时子程序SETBP0.6 ;P0.6输出高电平,使LED7熄灭CLR P0.7 ;P0.7输出低电平,使LED8点亮ACALLDELAY ;调用延时子程序SETBP0.7 ;P0.7输出高电平,使LED8熄灭ACALLDELAY ;调用延时子程序AJMP START ;8个LED流了一遍后返回到标号START处再循环DELAY: ;延时子程序MOV R0,#255 ;延时一段时间D1: MOV R1,#255DJNZ R1,$DJNZ R0,D1RET ;子程序返回
16、END ;程序结束3.2 proteus仿真 马上启动Keil单片机集成开发环境,建立新工程liu01.UV2,将上面的源程序liu01.asm导入到工程中,设置好Keil工程的编译参数,编译得到HEX格式的目标文件liu01.hex,用 ISP编程器 将目标文件liu01.hex烧写到AT89S51单片机中,接下来就是将烧写好的AT89S51从编程器上取下,放到“ S51增强型单片机实验板 ”上通电,我们就看到了LED1LED8的流水效果了。 图2 流水灯仿真图第四章 总结与致谢4.1总结作为一名电子信息工程专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大
17、学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。这次单片机课程设计我们历时两个星期,但经过这两个星期的实践和体验下来,我们又怎么会去在乎那个先后问题呢,因为对我来说学到的不仅是那些知识,更多的是团队和合作。现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉
18、得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。两个星期前我们五个人还在为到底选那个课题而发生分歧,最后抽签选定课题,但是随之而来的问题却远比我们想想的要困难的多,但没想到这项看起来不需要多少技术的工作却是非常需要耐心和精力在一个星期后的今天我已明白课程设计对我来说的意义,它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结,虽然我们这次花去的时间比别人多,但我相信我们得到的也会更多!在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计
19、资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:汇编语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个
20、程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够
21、牢固。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习
22、”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。我认为这个收获应该说是相当大的。觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。小组人员的配合相处,以及自身的动脑和努力,都是以后工作中需要的。4.2致谢 为时两周的单片机课程设计在小组5个成员的齐心协力,合作互助的战斗氛围中,圆满完成。首先,感谢学院给我们安排此次单片机课程设计课程,给我们一个自主学习,自己动手,相互合作学习的平台和机会。其次,感谢给我们单片机课程设计课程辅导的许中璞老师,从开始分组到课题选定,从查找资料到
23、软件调试,从内容补充到仿真调试,从整理到课程设计报告的撰写,老师一直不辞辛苦的陪伴着我们,为我们答疑解惑,对我们的课程进行指导和说明,亦师亦友的情感不断在我们的生活和学习中逐渐滋生,成长。最后,感谢我们的小组其他成员,在本次单片机课程设计课程过程中给予我莫大的支持与帮助,我们相互学习,相互纠正错误和不足,一步一步的完善课程设计报告。最后,我想说一句,老师,您辛苦了!感谢您对我们的谆谆教诲,才能让我们顺利的完成本次课程设计报告。参考文献1徐煜明,韩雁.单片机原理及接口技术M.北京:电子工业出版社,2005.12万光毅,严义,邢春香.单片机实验与实践教程M.北京:北京航空航天大学出版社,2006.
24、43张义和.51单片机(C语言版)M.南京:人民邮电出版社,2006.74梅丽凤.单片机原理及接口技术M. 北京:清华大学出版社,2003.4 5侯玉宝.基于Proteus的51系列单片机设计与仿真M. 上海: 电子工业出版社,2005.2651杨欣,王玉凤,刘湘黔.单片机应用从零开始M. 北京:清华大学社2001.57戴佳.51单片机应用系统开发典型实例M. 天津:中国电力出版社2007.9 8杨欣,王玉凤,刘湘黔.51单片机应用实例详解M. 北京: 清华大学出版社2002.6附录1程序代码ORG0000H ;单片机上电后从0000H地址执行AJMP START ;跳转到主程序存放地址处OR
25、G 0030H ;设置主程序开始地址START:MOV SP,#60H ;设置堆栈起始地址为60HCLR P0.0 ; P0.0输出低电平,使LED1点亮ACALL DELAY ;调用延时子程序SETB P0.0 ; P0.0输出高电平,使LED1熄灭CLR P0.1 ; P0.1输出低电平,使LED2点亮ACALL DELAY ;调用延时子程序SETB P0.1 ; P0.1输出高电平,使LED2熄灭CLR P0.2 ; P0.2输出低电平,使LED3点亮ACALL DELAY ;调用延时子程序SETB P0.2 ; P0.2输出高电平,使LED3熄灭CLR P0.3 ; P0.3输出低电平
26、,使LED4点亮ACALL DELAY ;调用延时子程序SETB P0.3 ; P0.3输出高电平,使LED4熄灭CLR P0.4 ; P0.4输出低电平,使LED5点亮ACALL DELAY ;调用延时子程序SETB P0.4 ; P0.4输出高电平,使LED5熄灭CLR P0.5 ; P0.5输出低电平,使LED6点亮ACALL DELAY ;调用延时子程序SETB P0.5 ; P0.5输出高电平,使LED6熄灭CLR P0.6 ; P0.6输出低电平,使LED7点亮ACALL DELAY ;调用延时子程序SETB P0.6 ; P0.6输出高电平,使LED7熄灭CLR P0.7 ; P0.7输出低电平,使LED8点亮ACALL DELAY ;调用延时子程序SETB P0.7 ; P0.7输出高电平,使LED8熄灭ACALL DELAY ;调用延时子程序AJMP START ; 8个LED流了一遍后返回到标号START处再循环DELAY: ; 延时子程序MOV R0,#255 ;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZR0,D1RET ;子程序返回END ;程序结束附录2图3 流水灯原理框图- 23 -