毕业论文
2008 届 光电技术 专业 08302 班级
题 目 基于单片机的流水灯 姓 名 学 号 200801125 指导老师 职 称 教师
1
摘 要
单片机的应用已经广泛的渗透到国民经济的各个领域,随着在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未有的速度被单片机智能控制系统所取代,它已经成为工科大学生的必修课程之一。单片机技术含有硬﹑软两个方面的技术。硬件是以单片机为核心,再加以其他各元器件组成的电子电路的一个实体。它既有单片机的技术,又有电子类专业所必须的模拟﹑数字﹑高频电子电路的综合运用。
单片机的种类繁多,目前单片机应用系统开发工具也有不少,但同一系列单片机的开发工具或实验系列基本相同。51系列单片机时目前应用最广泛的一种8为单片机之一,它具有体积小﹑功能强﹑成本低﹑应用面广等优点。经过20多年的推广与发展,51系列单片机形成了一个规模庞大,功能齐全,资源丰富的产品群。
本文设计的是基于单片机C51的流水灯设计。
关键词:单片机 ﹑流水灯﹑控制系统
2
目 录 第一章第二章第三章 第四章
前言----------------------------------(2)2.1 硬件组成--------------------------(3)2.2 流水灯硬件原理图------------------(3)3.1 软件编程概述----------------------(4)3.1.1 位控法--------------------------(5)3.1.2 循环移位法----------------------(6)3.1.3 查表法--------------------------(7)4.1软件仿真---------------------------(7)总结----------------------------------(8)参考文献------------------------------(8)致谢词--------------------------------(9)3
第一章
前言
学习单片机的最有效方法就是理论与实践并重,现在我把单片机流水灯设计作为一个毕业课程设计,需要更深的去了解单片机的很多功能,努力的去查找资料,当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
第二章
2.1硬件组成
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。ATC51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用ATC51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
4
2.2 流水灯硬件原理图
从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
5
第三章
3.1 软件编程概述
单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。
3.1.1 位控法
这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,从而来控制相应LED灯的亮灭。程序如下:
ORG 0000H ;单片机上电后从0000H地址执行 AJMP START ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开始地址 START:MOV SP,#60H ;设置堆栈起始地址为60H
6
CLR P1.0 ;P1.0输出低电平,使LED1点亮 ACALL DELAY ;调用延时子程序
SETB P1.0 ;P1.0输出高电平,使LED1熄灭 CLR ACALL SETB CLR ACALL SETB CLR ACALL SETB CLR ACALL SETB P1.1 DELAY P1.1 P1.2 DELAY P1.2 P1.3 DELAY P1.3 P1.4 DELAY P1.4 ;P1.1输出低电平,使LED2点亮
;调用延时子程序
;P1.1输出高电平,使LED2熄灭 ;P1.2输出低电平,使LED3点亮
;调用延时子程序
;P1.2输出高电平,使LED3熄灭 ;P1.3输出低电平,使LED4点亮 ;调用延时子程序
;P1.3输出高电平,使LED4熄灭 ;P1.4输出低电平,使LED5点亮 ;调用延时子程序
;P1.4输出高电平,使LED5熄灭
7
CLR P1.5 ;P1.5输出低电平,使LED6点亮 ACALL DELAY ;调用延时子程序
SETB P1.5 ;P1.5输出高电平,使LED6熄灭 CLR ACALL SETB CLR ACALL SETB ACALL AJMP 处再循环
DELAY: MOV R0D1: MOV R1DJNZ R1
P1.6 ;P1.6输出低电平,使LED7点亮 DELAY ;调用延时子程序
P1.6 ;P1.6输出高电平,使LED7熄灭 P1.7 ;P1.7输出低电平,使LED8点亮
DELAY ;调用延时子程序
P1.7 ;P1.7输出高电平,使LED8熄灭
DELAY ;调用延时子程序
;8个LED流了一遍后返回到标号START;延时子程序
,#255 ;延时一段时间 ,#255
,$
8
START DJNZ R0,D1
RET ; 子程序返回
END ; 程序结束
3.1.2 循环移位法
在上个程序中我们是逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,下面我们利用循环移位指令,采用循环程序结构进行编程。我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果啦。由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。具体编程如下所示,程序结构确实简单了很多。
ORG 0000H ;单片机上电后从0000H地址执行 AJMP START ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开始地址 START:MOV SP,#60H ;设置堆栈起始地址为60H
MOV A,#0FEH ;ACC中先装入LED1亮的数据(二进制的11111110)
MOV P1,A ;将ACC的数据送P1口
9
MOV R0,#7 ;将数据再移动7次就完成一个8位流水过程
LOOP: RL A ;将ACC中的数据左移一位
MOV P1,A ;把ACC移动过的数据送p1口显示 ACALL DELAY ;调用延时子程序
DJNZ R0,LOOP ;没有移动够7次继续移动 AJMP START ;移动完7次后跳到开始重来,以达到循环流动效果
DELAY: ;延时子程序
MOV R0,#255 ;延时一段时间 D1: MOV R1,#255
DJNZ R1,$ DJNZ R0,D1
RET ; 子程序返回 END ;程序结束
10
3.1.3 查表法
上面的两个程序都是比较简单的流水灯程序,“流水”花样只能实现单一的“从左到右”流方式。运用查表法所编写的流水灯程序,能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水灯效果。我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVC A,@A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示。具体源程序如下,TAB标号处的数据表可以根据实现效果的要求任意修改。
ORG 0000H ;单片机上电后从0000H地址执行 AJMP START ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开始地址 START:MOV SP,#60H ;设置堆栈起始地址为60H
MOV DPTR,# TAB ;流水花样表首地址送DPTR LOOP: CLR A ;累加器清零
MOVC A,@A+DPTR ;取数据表中的值 CJNE A,#0FFH,SHOW ;检查流水结束标志 AJMP START ;所有花样流完,则从头开始重复流 SHOW: MOV P1,A ;将数据送到P1口
ACALL DELA ;调用延时子程序
11
INC DPTR ;取数据表指针指向下一数据 AJMP LOOP ;继续查表取数据 DELAY: ;延时子程序
MOV R0,#255 D1: MOV R1,#255
DJNZ R1,$ DJNZ R0,D1
RET ;子程序返回TAB: 意编写
DB 11111110B 高左移
DB 11111101B DB 11111011B DB 11110111B DB 11101111B
;延时一段时间
;二进制表示的流水花样数据,从低到12
;下面是流水花样数据表,用户可据要求任
DB 11011111B DB 10111111B DB 01111111B
DB 01111111B 花样数据,从高到低右移 DB 10111111B DB 11011111B DB 11101111B DB 11110111B DB 11111011B DB 11111101B DB 11111110B
DB 0FEH,0FDH,0FBH,0F7H 花样数据
DB 0EFH,0DFH,0BFH,7FH DB 7FH,0BFH,0DFH,0EFH
13
;二进制表示的流水;十六进制表示的流水 DB 0F7H,0FBH,0FDH,0FEH „„
DB 0FFH ; 流水花样结束标志0FFH
END ; 程序结束
第四章
4.1软件仿真
4.1.1 仿真:打开WAVE6000,输入所编写的源程序并对程序进行编译,在软件的帮助下检查其中的错误并进行反复修改,知道编译正确后运行,确保没有错误以后对正确的源程序进行保存,保存时给其命名,以便将来载入程序时容易找到。
4.1.2 打开PROTEUS软件,并出画单片机流水灯具体运行电路图。 4.1.3 检查所画电路运行图,确保没有错误以后,在PROTEUS下对原理图进行加载WAVE6000下的源程序。
4.1.4 加载完成后,单击电路图框下的开始按钮,进行仿真,观察LED二极管现实情况,此时LED数码管开始显示,观察其是否正确。
4.2仿真结果
通过在WAVE6000下对源程序的编译,改正了其中的很多错误,然后运行,保证源程序的正确性。然后按原理图选择正确合理的电器元件,画出正确的电路图,加载源程序运行,顺利实现了流水灯的功能。该流水灯的效果分别如图所示。
14
15
16
参考文献
(1) 孙玉才编著,MCS-51系列单片微型计算机及其
应用,东南大学出版社,2004.6
(2) 万光毅,严义,邢春香,单片机实验与实践教
程[M],北京航空航天大学出版社,2006.4
(3) 夏路易,石宗义,电路原理图与电路板设计教
程Protel 99SE,北京希望电子出版社
(4) 侯玉宝等编著,基于Proteus的51系列单片机
设计与仿真,电子工业出版社
(5) 杨欣,王玉凤,刘湘黔编著,51单片机应用从
零开始,清华大学社
(6) 杨欣,王玉凤,刘湘黔编著,51单片机应用实
例详解,清华大学出版社
17
致 谢
在本论文的撰写过程中,得到了很多老师、同事和同学的大力支持,在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,他们也给予了程序方便的很多建设性意见所以在这里非常感谢帮助我的同学。
在此更要感谢我的指导老师和专业老师,是你们的细心指导和关怀,使我能够顺利的完成毕业论文。在我的学业和论文的研究工作中无不倾注着老师们辛勤的汗水和心血。老师的严谨治学态度、渊博的知识、无私的奉献精神使我深受启迪。从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在此我要向我的导师致以最衷心的感谢和深深的敬意。
18
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019-2025 yule263.com 版权所有 湘ICP备2023023988号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务