首页 理论教育 单片机开发:LED闪烁接口驱动

单片机开发:LED闪烁接口驱动

时间:2023-10-23 理论教育 版权反馈
【摘要】:P0.0接口驱动LED闪烁已在第2章中作为Keil和Proteus软件应用的典型例子进行说明,这里作为一个项目设计,详细叙述项目实现的基本过程。LED闪烁电路参考图3-1b低电平直接驱动方式。程序设计由于单片机内部的P0~P3寄存器都可以进行位操作,程序设计过程中,可以利用程序对P0.0直接操作实现LED的闪烁。4)利用位定义命令让LED等价于P0.0位,程序执行LED1=1后,单片机内部位寄存器P0.0位就设置为高电平,同时P0.0接口就会输出高电平。

单片机开发:LED闪烁接口驱动

闪烁控制是安全灯、高层建筑、高空飞行器、警示灯等设备灯光闪烁控制的基础,也是单片机项目学习过程中最简单的项目。P0.0接口驱动LED闪烁已在第2章中作为Keil和Proteus软件应用的典型例子进行说明,这里作为一个项目设计,详细叙述项目实现的基本过程。

1.电路设计

电路设计是指单片机系统的电路原理设计或编辑。能够设计系统电气原理图的软件很多,常用的软件有Protel 99se或Protel DXP、OrCAD。为了提高联调效果,我们一般采用Proteus软件设计单片机的仿真电路,当程序设计完成后可直接加载程序验证程序设计的完整性。

LED闪烁电路参考图3-1b低电平直接驱动方式。项目设计时,应先根据项目的原理图利用Proteus软件设计仿真电路图,下面重新说明Proteus的使用过程。

(1)打开Proteus软件的ISIS程序并保存文件

一个项目包含程序和电路两部分,因此在使用Proteus软件设计电路时,应首先考虑仿真电路文件的目录。在学习项目设计过程中,建立科学的项目目录结构对于养成良好的项目开发习惯有很多益处,因为真正进行单片机项目开发时,所做的一切都很重要。项目1所在的目录结构如图3-3所示。

操作过程中,首先打开Proteus ISIS程序,用鼠标左键单击File→Save Design As,在弹出的窗口中选择合适路径,然后点击“创建新文件夹”并命名为“项目1-LED闪烁”;然后进入这个文件夹,再创建一个新文件夹命名为“电路”。再一次进入“电路”文件夹中,这时才对要保存的电路文件进行命名,比如“LED闪烁”。

(2)Proteus ISIS设计电路

使用Proteus进行原理图设计主要操作为放置元器件和连线。本项目所使用的单片机型号虽然为STC89C51,但在Proteus中凡是51内核的单片机都可以使用。这里选择Micropo-cessor Ics-8051 Family中的80C51即可。Proteus中的单片机电路符号含有完整的单片机最小系统模型,并且电源默认连接完好。其仿真电路设计如图3-4所示,其中为了达到显示效果,电阻取值为470Ω,实际取值要大一些。电路设计完成后,再次保存设计,下面就可以设计程序了。

978-7-111-43463-4-Chapter03-12.jpg

图3-3 项目1目录结构

978-7-111-43463-4-Chapter03-13.jpg

图3-4 项目1的仿真电路图

2.程序设计

本项目采用Keil软件进行设计,基本操作共4个步骤,分别是创建一个项目、新建C文件、程序设计、生成HEX文件。

创建项目和新建C文件比较简单,这里不再详细说明,但要注意,在打开Keil软件时,新建的工程必须保存在项目1目录下的程序中,新建一个C文件,保存为main.c,并加载到工程中。

(1)程序设计

由于单片机内部的P0~P3寄存器都可以进行位操作,程序设计过程中,可以利用程序对P0.0直接操作实现LED的闪烁。

C51定义P0.0为P0^0,因此在利用C语言进行程序设计时,可使P0.0输出高、低电平,如P0.0输出低电平,程序中编写P0^0=0即可。为了使程序简单明了,也可以利用sbit LED=P0^0语句,让LED代替P0^0。

在程序编写过程中,项目程序设计的一般顺序是先写#include<reg51.h>,然后编写主函数,用到LED时,才在程序的预处理区写“sbit LED=P0^0;”,用到延时函数时才在主函数前面写void delay(unsigned int x)函数。千万不要按照提供的程序一步一步地照抄,因为这样等于自己没有一个完整的编程思路。本项目的具体程序为

978-7-111-43463-4-Chapter03-14.jpg(www.xing528.com)

978-7-111-43463-4-Chapter03-15.jpg

(2)程序说明

1)本项目中,单片机型号为STC89C51,因此程序包含reg51.h文件,reg51.h文件定义了MCS-51系列单片机所有特殊功能寄存器和相对应的地址值。

2)单片机程序顺序执行,先执行主函数,在主函数内可以调用子函数,子函数可以调用子函数,但子函数不能调用主函数。单片机程序从主函数入口依次执行每一条指令,执行完毕后返回到主函数入口进行下次循环。

3)延时函数。延时的过程是程序执行了一个延时函数delay()。在主函数调用延时函数的过程中,如果单片机没有中断发生,单片机只能忙于执行这个延时函数。

单片机在执行延时函数相关指令时,每一条指令都会占用一定数量的机器周期,执行完延时函数的所有指令,浪费或占用的时间就是调用延时函数所获得的延时时间,但执行延时函数不能得到精确的延时时间。

4)利用位定义命令让LED等价于P0.0位,程序执行LED1=1后,单片机内部位寄存器P0.0位就设置为高电平,同时P0.0接口就会输出高电平。单片机的所有I/O接口都可以进行位操作,也可以字节操作。

5)利用C语言编写单片机程序时,每个人都有自己的风格。虽然C语言格式自由,但作为单片机的程序语言,具有严格的书写格式。为了提高单片机C语言程序的可读性,增加程序页的层次感,一般情况下,函数的字符左边距为0,函数体每条语句前留一个“tab”键空;算术逻辑符号的左右各留一个空格,关键语句要有中文或英文注释,关键函数有时需要用“/**...**/”说明,并把主函数所在的程序命名为main.c。

6)实际应用中,把LED换成继电器或其他驱动电路,就可以让单片机间接驱动一个大功率的负载,如额定电压为交流220V、200W的红色的灯泡。图3-5电路为安全灯闪烁驱动电路,双向光电晶闸管型号为MOC3061,再加上一级晶闸管VTH,可以实现更大功率的负载驱动。

3.程序编译并创建HEX文件

程序编译是检验程序设计格式或代码错误的过程。如果程序在编译过程中出错,会在Keil的编译结果栏中进行提示。程序的调试修改过程一般先用鼠标左键双击最上面的错误提示进行修改,然后再编译,一直到无错误、无警告为止。

978-7-111-43463-4-Chapter03-16.jpg

图3-5 单片机大功率交流负载驱动

HEX文件是单片机可以执行的二进制文件,程序编译无误后可以通过Keil软件创建一个HEX文件。在工具栏中Project→Options For Target‘target 1’→Output窗口中选中“Cre- ate HEX Fi”,再编译时,Keil即可创建一个HEX文件,这个文件自动保存在项目程序的目录下。可将Keil软件创建的HEX文件直接下载到实验开发板上的单片机中运行,也可以加载到仿真电路中的单片机内运行。

4.软件仿真

软件仿真是一种单片机系统测试,在没有硬件的条件下,利用Proteus进行软件仿真可以快速检验单片机程序设计的正确性。本项目在仿真时,需要利用Proteus先画出项目参考的电路,然后把本项目程序创建的HEX文件加载到单片机中,最后点击运行即可看到本项目LED闪烁的效果。

Proteus是单片机程序设计的重要仿真工具,但软件仿真不能测试软件的安全性和可靠性,也不能测试电路电气特性的完整性。单片机的程序设计或相关产品开发必须有相关的软件和硬件实验支撑。本项目中,为了进一步验证程序的可靠性,需要把程序下载到实验开发板或实验箱中的单片机内进行实际运行。

因为本项目比较简单,初学者在了解项目的设计过程后可亲自动手设计电路并编写程序,实现项目的功能和要求。如果能看到成功的仿真结果,一定会有成就感,这就是项目设计的兴趣所在。

在完成了P0.0驱动LED闪烁项目程序设计后,我们就可以在此基础上增加一些元器件,如利用P0驱动8只LED按照一定顺序闪烁,进一步学习单片机I/O接口的输出控制原理。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈