1. 基于proteus的51单片机开发实例(1)--点亮一个小灯
1.1. 实验目的
通过本实例了解和熟悉以下知识:
1、51单片机I/O端口的输出操作;
2、了解单片机最小系统的组成;
3、了解单片机程序的基本框架;
4、了解LED发光二极管的特性。
1.2. 设计思路
电路设计思路:将一个发光二极管的一端连接到51单片机的一个I/O端口(P1端口)上,发光二极管的另一端连接到电源正极。
程序设计思路:编写程序,通过程序控制连接发光二极管的I/O端口输出高电平(或低电平)来控制发光二极管的点亮(或熄灭)。
1.3. 基础知识
本实例用到的基础知识有以下几方面:
1、51单片机P1端口结构及使用方法;
2、51单片机最小系统的电路组成;
3、发光二极管(LED)的工作原理及使用方法;
4、51单片机的基本程序框架。
下面我们来分别学习一下这些基础知识。
1.3.1. 51单片机P1端口结构及使用方法
首先我们来看看51单片机长什么样,以及在电路图中51单片机的标识符号,如图1,图2所示。
图1 51单片机实物图
图2 51单片机的电路符号
51单片机有4个8位的并行I/O端口,分别是P0、P1、P2、P3。这4个端口分别有不同的电路结构及用途。本例中用到的是P1端口,所以我们先来了解一下51单片机P1端口的内部结构及工作原理。置于P0,P2,P3口的内部结构及工作原理,我们在后续的例子中陆续学习。
图3所示是51单片机P1口的引脚内部结构。
图3 51单片机P1端口内部结构图
51单片机的P1端口只能作为普通的通用I/O口使用(P0,P2,P3口除了作为通用I/O口功能外,还有第二功能,接下来的实例中会讲解)。
从图3中可以看出,在其输出端接有上拉电阻,所以它可以直接输出高电平或者低电平,不需要外接上拉电阻了。
当P1口作为输入口时,必须先向内部锁存器写“1”,这样使场效应管VT截止,才能够从读引脚位置处获取端口的电平状态,否则场效应管如果处于导通状态,就不能够获取正确的引脚电平状态了。
1.3.2. 51单片机最小系统的电路组成
我们知道,想要让一个电路能够正常工作,必须满足它的最基本的工作条件,同样的,对于单片机电路来说,想让单片机电路工作起来,必须满足其最基本的要求,这些要求有:电源,时钟电路,复位电路。
51单片机的最小系统图如图4所示。
图4 51单片机最小系统电路图
对于电子产品来说,首先必须给它提供正常的电源才能工作,没有一个稳定的、适配的电源,它就不能工作。对于51单片机来说,它需要5V的稳定直流电源供电。
单片机必须在稳定的时钟脉冲下才能稳定的工作,就像我们列队操练,必须在统一的“一二一”的口令下,才能够保持队型不乱,步伐一致。
单片机复位电路也是必须的,因为单片机开始工作时,需要先将单片机内部的数据、状态配置在一个初始状态下,才能够按照程序设计的流程正常工作,比如单片机数据存储区(RAM)中的数值都需要按照确定的初始化的默认值开始执行,如果每次不初始化,则这些数值可能每次单片机启动时都不一样,这样就会导致程序执行出现问题。
1.3.3. 发光二极管(LED)的工作原理及使用方法
发光二极管(LED)是单片机学习中最常见的两种元器件(另一个元器件是按键,使用LED和按键就可以把单片机的大部分基础功能实现,在后面的实例中我们会对此有深切体会)。
常见发光二极管的外形接结构图如图5所示。
图5 发光二极管(LED)实物图
发光二极管(LED)和普通二极管的特性一样,都具备单向导电性,不同的是,当加在发光二极管两端的电压超过它的导通电压(一般为1.7~1.9V)后,发光二极管导通,当流过它的电流超过一定值时(一般是2~3mA,不同颜色的发光二极管发光电流不一样),开始发光。
1.3.4. 51单片机的基本程序框架
任何程序的编写都要遵循一定的规则和流程,对于单片机程序来说,同样如此,单片机程序的一般框架如下。
#include <AT89X52.h> //头文件包含//全局变量声明和定义//函数声明int main(void){//初始化设置while(1){//程序内容}}1.4. 电路设计
本实例的电路如图6所示。单片机的P1.0端口接发光二极管的负极,发光二极管的正极通过限流电阻接到电源的VCC端。
图6 基于proteus的51单片机开发实例(1)--点亮一个小灯
本电路中发光二极管的驱动电路是典型的“灌电流”电路,具体原理是,当P1.0输出高电平时,D1两端都是高电平,所以发光二极管上无压差,不会导通,也就不会发光;当P1.0输出低电平时,D1两端就有了压差,从而导通,发光二极管开始发光。从电流流向来说,电流是从VCC经过限流电阻,到达发光二极管的正极,然后从发光二极管的负极流入到单片机的P1.0口,就好像是电流“灌入”了单片机的P1.0端口,所以称为“灌电流”电流。(与之对应的,还有拉电流电路,下一个例子我们就采用拉电流的方式)
需要注意的是,该电路图并不适合正式产品使用,因为单片机端口的输入或者输出电流的能力都是有限的,并且通常的单片机系统不可能只有一个发光二极管。在后面的例子中,我们会介绍更符合实际应用的发光二极管驱动电路。
1.5. 程序设计
本实例的程序代码如下。
#include <AT89X52.h> //头文件包含int main(void){P1=0xfe;//P1.0口输出低电平while(1){//程序一直在此循环}}对于程序中#include <AT89X52.h>这句话的作用,我们可以通过将该语句屏蔽后,编译程序提示的错误信息来了解。
将该语句屏蔽后,编译程序,会出现如图6所示的错误提示,根据这个提示,我们知道,头文件的其中一个作用就是将P1进行了预定义,只有这样我们才能在程序中使用P1而不会出错。
1.6. 实例仿真
单片机程序编译完成后,将生成的hex文件装载到用proteus建立的仿真电路中,点击开始仿真按钮,就可以看到程序的运行结果了,可以看到LED被点亮了。如图6所示。
图6 仿真现象:发光二极管点亮
拓展:大家可以试着在proteus环境下,将电阻R2的阻值或者发光二极管D1的导通电流修改一下,然后再看看发光二极管的亮度会有什么变化。
1.7. 总结
发光二极管是单片机学习中最方便、最直接的指示程序运行结果的器件。所以我们要对发光二极管的特性和工作原理有充分的理解。在后面的实例中,我们将会经常看到使用发光二极管的点亮、熄灭、闪烁等状态指示程序的运行状态。
本系列实例基本都基于keil和proteus两个软件。所以大家需要熟悉如何在keil环境下编写51单片机程序,如何在proteus环境下建立51单片机仿真项目。