基于单片机的流水灯设计讲解_第1页
基于单片机的流水灯设计讲解_第2页
基于单片机的流水灯设计讲解_第3页
基于单片机的流水灯设计讲解_第4页
基于单片机的流水灯设计讲解_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告书机械与电子工程学院学号:基于单片机的流水灯设计系机械与电子工程学院学号:基于单片机的流水灯设计专业:学生姓名:课程设计题目:起迄日期:课程设计地点:指导教师:下达任务书日期:2013年12月16日第第 页共17页DJNZR6,$DJNZR5,C1RETEND3.2C语言编程3.2.1C语言程序在上个程序中我们是一个个控制P1.0至P1.7端口的每个来实现的,下面我们用c语言程序来控制各个端口赋值来实现P1.0至P1.7的发光二极管的亮与灭,我们将初始值11111110赋值给led,并将led赋值给P1.0端口,然后每隔100毫秒led左移一位改变P1.1端口,实现P1.0端口的灭

2、和P1.1端口的亮,其他几个端口按此方法依次执行,实现各个端口依次亮与灭,做流水工作。当P1.7端口灭时,led又变回11111110完成流水灯的循环工作。#include#include延时毫秒12M延时毫秒12M,ms最大值255为P1口赋值的变量/循环控制变量voidmain()ucharled;uchari;while(1)led=0 xfe;初值为11111110for(i=0;i7;i+)P1=led;/led值送入P1口delay_ms(100);led=delay_ms(100);led=_crol_(led,1);/延时100ms/led值循环左移1位for(i=0;i7;i

3、+)/led值送入P1/led值送入P1口/延时100ms/led值循环左移1位延时毫秒12M,ms最大值255P1=led;delay_ms(100);led=_cror_(led,1);voiddelay_ms(ucharms)uchari;while(ms-)for(i=0;i124;i+);3.2.2编程注意事项这里需要说明的是,按从语言编写的要求,所编制的程序(下称源程序)之格式和书写要求必须依下列原则:每行的格式应为:标号:命令参数;注释。即一行由四部份组成各部份的顺序不能搞错,依实际要求可以缺省其中的一部份或几部份,甚至全部省去,即空白行。需要使用标号时标号后面必须有“:”(冒号

4、),而命令语句和参数之间必须用空格分开,如果命令有多个参数,则参数与参数之间必须用“,”(逗号)分开,需要注释时注释前必须用“;”(分号),“;”后面的语句可以写任何字符,包括汉字用于解释前面的汇编语句它将不参与汇编,不生成代码。由于汇编程序对我们还不直观,所以在编写源程序时,应当养成多写注释的习惯,这样有助于今后源程序的阅读和维护。标号是标志程序中某一行的符号名,编译后标号的数值就是标号所在行代码的地址。在宏汇编ASM51中标号的长度不受限制,但标号中不能包含:或其它的一些特殊符号,也不能用汉字,可以用数字作标号,但必须用字母开头。当标号作参数用(如标号作转移地址)在命令后面出现时,必须舍去

5、:(如上面程序中的AJMPSTART中的START是不能再有:)。每行只能有一个标号,一个标号只能用在一处,如果有两行用了同一个标号,则汇编时就会出错。由于标号的长度没有限制,可以用有意义的英文或汉语拼音来说明行,使源程序读起来更方便。在源程序中的字母不区分大小写,也就是说start和START是一样的,请不要用大小写方式去区分不同的标号。我们知道了汇编语言程序的规则,现在就动手编辑源程序吧。马上启动Keil单片机集成开发环境,建立新工程liu01.UV2,将上面的源程序liuOl.asm导入到工程中,设置好Keil工程的编译参数,编译得到hex格式的目标文件liuOl.hex,用ISP编程器

6、将目标文件liuOl.hex烧写到AT89S51单片机中,接下来就是将写好的AT89S51从编程器上取下,放到“S51增强型单片机实验板”上通电,我们就看到了LED1LED8的流水效果了。到此,我们做的流水灯已成功,工作原理也清楚了,我们将发光二极管的顺序改变一下可以同时将流水灯从左向右流改为从右向左流,也可以改为两边向内流、内部向外流!,在前面学习的程序中我们让LED流水是去逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,下面我们就采用新的思路来编程。新的编程思路如下:我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后让这个数据向高位移动不就实现“流水”

7、效果啦?的确如此!80c51指令中没有让P1数据移动的指令,但有对累加器ACC中数据左移或右移的指令,ACC在指令中常写为A,累加器A数据左移指令为RLA,累加器数据右移指令为RRA,累加器在数据传输和数据处理过程中作用十分重要,累加器ACC为8位。他可与片内所有单字节寄存器交换数据,实际上P1和其他端口在单片机中也是一个寄存器。这样我们可以将需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。3.3仿真结果我们将程序加载到proteus中的流水灯电路中,我们就可以看到流水灯的工作,上排8个发光二极管从左往右依次循环亮和灭,然后,从右往左

8、依次循环亮与灭,下排发光二极管从右往左依次循环亮与灭,然后,从左往右依次循环亮和灭。如图所示PO.O/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6iAiA2iAiA23A256PSENP2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P1.0P3.0/RXDP1.1P3.1/TXDP1.2P3.2/INT0P1.3P3.3/INT1P1.4P3.4/T0P1.5P3.5/T1P1.6P3.6/WRP3.7/RDP2.0/A8P2.1/A9P2.2/A10图8仿真结果当上述程序之一编写好以后,我们需

9、要使用编译软件对其编译,得到单片机所能识别的二进制代码,然后再用编程器将二进制代码写到AT89C51单片机中,最后连接好电路通电,我们就看到LED1LED8的“流水”效果了。实验总结本次实验我选择的题目是流水灯的设计,其实流水灯就是一组灯,然后在控制系统的控制下按照一定的顺序和时间来发亮和熄灭,两者时间在一定的时间间隔下,就会形成一定的视觉效果。本次实验主要应用的是AT89C51单片机,利用其与晶振电路和复位电路进行控制发光二极管的发光与熄灭。通过本次的课程设计,使我了解到实践出真知的正确性,不光如此,这次实际它还让我更加扎实的掌握了有关单片机方面的知识。在这次课程设计中我发现最主要的还是要有

10、明确的设计思路,清晰的分析过程有很大的作用。在设计之前,对所用AT89C51单片机的内部结构有一个系统的了解,这样才能很好地完成设计。通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。而安排课程设计的基本目的,是在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟和领悟力。实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我找出自身状况与实际需要的差距并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而更好的适应毕业后的生活。在单片机方面也是了解了一些

11、些,我相信这次课程设计会对我以后的工作通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为自己的东西,在课程设计过程中,我们要不断地发现错误,不断改正,不断领悟,不断获取。这次课程设计结束了,但在以后的社会发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到退缩,一定要不厌其烦的发现问题所在,然后一一解决,只有这样,才能成功的做成想做的事情通过亲手实践,体会到了收获成果的喜悦。参考文献:徐煜明,韩雁单片机原理及接口技术M.北京:电子工业出版社,2005.1万光毅,严义,邢春香.单片机实验与实践教程M.北京:北京航空航天大学出版社,20

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论