《小灯控制程序》由会员分享,可在线阅读,更多相关《小灯控制程序(12页珍藏版)》请在金锄头文库上搜索。
1、目录1单片机技术概述11.1 基本概念11.2 MCS-51系列单片机简介22 系统的硬件设计32.1硬件组成32.2流水灯硬件原理图32.3开发软件32.4编程语言特点43系统软件设计及调试5 3.1设计思路53.2 软件编程53.3 位控法53.4 循环移位法63.5 查表法73.6 汇编语法要求、规则93.7小灯控制程序93.8 结语114参考文献125致谢13全国驴友团队、自驾俱乐部、户外俱乐部、及各旅行社、社会团体,以及户外爱好者均可报名。报名时提供真实身份证信息、联系电话等信息。以报名款到帐成功为准确认报名资格2基于单片机的广告灯控制系统 111 单片机技术概述1.1基本概念单片机
2、实际上是微型计算机的一种,自从它问世以来,人们对它不断地改进,以应用于现代化社会的各方各面。单片机体积小,价格低廉,开发较为容易,可根据需要制作成各种智能控制器以代替人工的操作,实现自动化。在我国,由于ASIC(专用集成电路)的生产还跟不上,单片机的作用更加地重要,在智能仪器仪表、工业设备过程控制、家用电器中,都可以见到它的踪迹。单片机应用的意义不仅在于它的广阔范围及所带来的经济效益。更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。以前自动控制中的PID调节,现在可以用单片机实现具有智能化的数字
3、计算控制、模糊控制和自适应控制。这种以软件取代硬件并能提高系统性能的控制技术称为微控技术。 单片微型计算机就是将CPU、RAM、ROM、时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。(引脚图例如图1.1) 按用途可分为通用型和专用型两大类根据单片机能够一次处理的数据的宽度,单片机可分为1位机,4位机,8 位机,16位机,32位机。(内部逻辑如图1.2)图1.1 51系列单片机引脚图图1.2 51系列单片机内部逻辑图1.2 MCS-51系列单片机简介MCS是Intel公司生产的单片机的系列符号 。20世纪80年代中期以后,Intel公司以专利转让的形式把8051内核技术转让给了许多
4、半导体芯片生产厂家,如AMTEL、PHILIPS、ANALOG DEVICES、DALLAS公司等。这些厂家生产与MCS-51指令系统兼容的单片机。这些兼容机与8051的系统结构(主要是指令系统)相同,采用CMOS工艺,因而常用80C51系列来称呼所有具有8051指令系统的单片机。不应该把它们直接称为MCS-51系列单片机,因为MCS只是Intel公司专用的单片机系列符号。2 系统的硬件设计 2.1 硬件组成按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资
5、源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.255.50V的电压工作范围和024MHz工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。2.2 流水灯硬件原理图图2.1 系统硬件原理图2.3开发软件Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。它可以结合proteus软件可
6、以实现单机仿真。对于初学者的需求基本能得到满足。而对于所需电路图的绘制则需要专用的protel软件的支持。它也是个功能全面的软件。所以学好单片机首先要熟悉上面提到的几种软件。以便于理论与实践的真正结合。用protel软件的主要注意的是对各图标代码的熟悉。一提高绘画速度。Keil C51软件主要是对程序的编写要准确。软件的使用要在学习理论知识的同时带着使用,在使用中不断的熟悉。如果在实验室则主要熟悉对Keil C51与硬件设备的连接和使用。为了正确仿真串口,在软件仿真调试时,在用户的Keil工程文件的属性中,还需要设置实际使用的晶振频率。这个参数非常重要,直接影响通信的波特率,可以按照实际使用的
7、参数进行设置。2.4编程软件特点它最大的好处就是简单、方便,容易使用,不需要使用任何电路,也没有特殊的要求;甚至可以在硬件电路制作好之前就将串口部分的程序编写、调试完毕。3系统软件设计及调试3.1 设计思路从硬件原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点
8、,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。3.2 软件编程单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。3.3位控法这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位
9、指令控制P1口的每一个位输出高低电平,从而来控制相应LED灯的亮灭。程序如下:ORG0000H ;单片机上电后从0000H地址执行AJMP START ;跳转到主程序存放地址处ORG 0030H ;设置主程序开始地址START:MOV SP,#60H ;设置堆栈起始地址为60H CLR P1.0 ;P1.0输出低电平,使LED1点亮ACALL DELAY ;调用延时子程序 SETB P1.0 ;P1.0输出高电平,使LED1熄灭CLR P1.1 ;P1.1输出低电平,使LED2点亮ACALL DELAY;调用延时子程序SETB P1.1 ;P1.1输出高电平,使LED2熄灭CLR P1.2 ;
10、P1.2输出低电平,使LED3点亮ACALL DELAY;调用延时子程序SETB P1.2 ;P1.2输出高电平,使LED3熄灭CLR P1.3 ;P1.3输出低电平,使LED4点亮ACALL DELAY;调用延时子程序SETB P1.3 ;P1.3输出高电平,使LED4熄灭CLR P1.4 ;P1.4输出低电平,使LED5点亮ACALL DELAY;调用延时子程序SETB P1.4 ;P1.4输出高电平,使LED5熄灭CLR P1.5 ;P1.5输出低电平,使LED6点亮ACALL DELAY ;调用延时子程序SETB P1.5 ;P1.5输出高电平,使LED6熄灭CLR P1.6 ;P1.
11、6输出低电平,使LED7点亮ACALL DELAY ;调用延时子程序 SETB P1.6 ;P1.6输出高电平,使LED7熄灭CLR P1.7 ;P1.7输出低电平,使LED8点亮ACALL DELAY ;调用延时子程序SETB P1.7 ;P1.7输出高电平,使LED8熄灭ACALL DELAY;调用延时子程序AJMP START ;8个LED流了一遍后返回到标号START处再循环DELAY: ;延时子程序 MOV R0,#255 ;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET ;子程序返回END ;程序结束3.4循环移位法在上个程序中我们是逐个控制P
12、1端口的每个位来实现的,因此程序显得有点复杂,下面我们利用循环移位指令,采用循环程序结构进行编程。我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果啦。由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。具体编程如下所示,程序结构确实简单了很多。ORG0000H ;单片机上电后从0000H地址执行AJMP START ;跳转到主程序存放地址处ORG 0030H ;设置主程序开始地址START:MOV SP,#60H