通过本例了解并熟悉以下知识:
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。 这四个端口有不同的电路结构和用途。 本例中使用的是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 //头文件包含
//全局变量声明和定义
//函数声明
int main(void)
{
//初始化设置
while(1)
{
//程序内容
}
}
1.4. 电路设计
本例电路如图6所示,单片机的P1.0口接发光二极管的负极,发光二极管的正极接单片机的VCC端。通过限流电阻供电。
图6 基于proteus的51单片机开发实例(一)——点亮小灯
该电路中的发光二极管的驱动电路是典型的“电流吸收”电路。 具体原理是,当P1.0输出高电平时,D1两端均为高电平,因此发光二极管上没有电压差,不会发生导通。 如果打开,则不会发光; 当P1.0输出低电平时,D1两端有电压差,导致导通,发光二极管开始发光。 从电流流向来看,电流从VCC经过限流电阻流向发光二极管正极,再从发光二极管负极流向单片机的P1.0口。 就好像电流被“排泄”到微控制器的 P1.0 中一样。 端口,因此称为“灌”电流。 (相应的,还有电流拉动电路,在下一个例子中,我们将采用电流拉动方式)
需要注意的是,该电路图并不适合正式产品使用,因为微控制器端口的输入或输出电流能力有限,并且通常的微控制器系统不可能只有一个发光二极管。 在下面的例子中,我们将介绍一种更适合实际应用的发光二极管驱动电路。
1.5. 编程
本例的程序代码如下。
#include //头文件包含
int main(void)
{
P1=0xfe;//P1.0口输出低电平
while(1)
{
//程序一直在此循环
}
}
至于#include语句在程序中的作用,我们可以通过阻塞该语句后编译器提示的错误信息来理解。
屏蔽该语句并编译程序后,会出现如图6所示的错误信息。 根据这个信息,我们知道头文件的作用之一就是预定义P1。 这样我们才能在程序中使用P1。 不会出错。
1.6. 模拟示例
单片机程序编译完成后,将生成的hex文件加载到用proteus搭建的仿真电路中。 点击开始模拟按钮,可以看到程序的运行结果,LED灯亮起。 如图6所示。
图6 模拟现象:LED点亮
延伸:你可以尝试在proteus环境下修改电阻R2的阻值或者发光二极管D1的导通电流,然后看看发光二极管的亮度如何变化。
1.7. 概括
发光二极管是单片机学习中指示程序执行结果最方便、最直接的器件。 因此,我们必须充分了解发光二极管的特性和工作原理。 在下面的例子中,我们会经常看到用发光二极管来点亮、关闭、闪烁等来指示程序的运行状态。
这一系列的例子基本都是基于keil和proteus这两个软件。 因此,大家需要熟悉如何在keil环境下编写51单片机程序以及如何在proteus环境下建立51单片机仿真项目。