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   //头文件包含//全局变量声明和定义//函数声明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   //头文件包含int main(void){P1=0xfe;//P1.0口输出低电平while(1){//程序一直在此循环}}

对于程序中#include 这句话的作用,我们可以通过将该语句屏蔽后,编译程序提示的错误信息来了解。

将该语句屏蔽后,编译程序,会出现如图6所示的错误提示,根据这个提示,我们知道,头文件的其中一个作用就是将P1进行了预定义,只有这样我们才能在程序中使用P1而不会出错。

1.6. 实例仿真

单片机程序编译完成后,将生成的hex文件装载到用proteus建立的仿真电路中,点击开始仿真按钮,就可以看到程序的运行结果了,可以看到LED被点亮了。如图6所示。

图6 仿真现象:发光二极管点亮

拓展:大家可以试着在proteus环境下,将电阻R2的阻值或者发光二极管D1的导通电流修改一下,然后再看看发光二极管的亮度会有什么变化。

1.7. 总结

发光二极管是单片机学习中最方便、最直接的指示程序运行结果的器件。所以我们要对发光二极管的特性和工作原理有充分的理解。在后面的实例中,我们将会经常看到使用发光二极管的点亮、熄灭、闪烁等状态指示程序的运行状态。

本系列实例基本都基于keil和proteus两个软件。所以大家需要熟悉如何在keil环境下编写51单片机程序,如何在proteus环境下建立51单片机仿真项目。

51单片机如何跳出wile循环_基于proteus的51单片机开发实例(1)相关推荐

  1. 51单片机如何跳出wile循环_单片机C语言之串口通信协议(代码分享)

    原标题:单片机C语言之串口通信协议(代码分享) 现实生活中, 我们总是要与人打交道,互通有无.单片机也一样,需要跟各种设备交互.例如汽车的显示仪表需要知道汽车的转速及电动机的运行参数,那么显示仪表就需 ...

  2. 51单片机如何跳出wile循环_信用卡还最低、以卡养卡、乱分期,这种“死循环”如何跳出?...

    更多信用卡技巧和玩卡工具,请关注公众号:刷卡世界 人在悬崖边上苦苦挣扎的时候,内心是非常纠结的,继续挣扎总有筋疲力尽的那一天,而马上跳崖又没有这样的勇气.这种纠结,是负债人们非常可以感同身受的. 信用 ...

  3. hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下

    1. 基于proteus的51单片机开发实例(13)-LED指示那个按键被按下 1.1. 实验目的 本实例将实现两路外部中断的检测和识别,让我们能够更好地理解51单片机的外部中断以及中断优先级的概念. ...

  4. c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计

    1. 基于proteus的51单片机开发实例30-模块化程序设计 1.1. 实验目的 模块化程序设计 不知不觉我们的51单片机开发实例已经进行到第三十篇了,是时候进行一个总结和反思了,总结什么?反思什 ...

  5. hc05与单片机连接图_基于proteus的51单片机开发实例37-DAC0832

    学习手记 1. 基于proteus的51单片机开发实例37-DAC0832 1.1. 实验目的 之前我们学习了数模转换芯片DAC0808,今天我们继续学习另一种D/A转换芯片DAC0832. 1.2. ...

  6. 51单片机如何跳出wile循环_51单片机(九)汇编指令

    1 往期链接 Chenglin Li:51单片机(一)Visual Basic串口通信程序 Chenglin Li:51单片机(二)汇编语言设计流水灯 Chenglin Li:51单片机(三)汇编语言 ...

  7. 51单片机如何跳出wile循环_51单片机C语言程序100例分析(4)外设

    和我预想的一致,接下来该涉及外设了! /******************************************************** *********数码管显示*****数码管显 ...

  8. c51中断优先级c语言,基于proteus的51单片机开发实例(14)中断嵌套和中断优先级...

    1. 基于proteus的51单片机开发实例(14)中断嵌套和中断优先级 1.1. 实验目的 在前面实例中我们已经学习了51单片机的定时器/计数器中断,外部中断,通过这些实例,知道了中断电路的设计,中 ...

  9. 【最新最全】Java微服务实战项目【尚医疗】_智慧医疗管理项目_基于若依框架快速开发

    尚医疗是专门为各大医院.门诊提供的一款医疗管理平台.系统包含:系统管理.药品进销存管理.看病就诊.收费管理.检查管理.数据统计等核心模块.通过尚医疗系统可以快速.方便的管理病人从挂号到门诊结束所涉及到 ...

  10. 51单片机基本刷屏测试实验_基于单片机的发动机振动速度、位移和加速度测量方法...

    Single-chip microcomputer-based measuring of engine vibration speed.displacement and acceleration Ab ...

最新文章

  1. drf2 FBV和CBV
  2. 随机变量的分布函数-定义域问题
  3. python历史波动率_历史波动率计算(旧文)
  4. 恢复 linux系统密码
  5. 【转】Visual Studio 2005/2008中的快捷键与小技巧整理
  6. 写给自己,梳理一下我现在对前端知识结构的理解
  7. mediacodec配置h265解码
  8. 盛金公式解一元三次方程_一元三次方程的解法
  9. Android或者是IOS/普通屏全面屏及qq浏览器和qq内置浏览器判断
  10. 对抗样本的创建和防御
  11. 互联网日报 | 瑞幸咖啡股票6月29日停牌;B站举办十一周年演讲;Airbnb辟谣破产传闻...
  12. 群晖存储空间不足-处理方案一
  13. 【规范】万字集大成的C编写规范
  14. SQLyog安装包下载(64位和32位的都有)
  15. word导出html乱码怎么办,Word文档文件变成乱码如何完全修复?-修复百科
  16. mac 提示文件已损坏 解决办法
  17. MATLAB图像二值化函数im2bw与imbinarize对给定阈值的内部处理细节
  18. 【Ubuntu18.04 无法找到终端 ifconfig 命令】
  19. 输出1-100之内的所有质数
  20. Web安全-检测-网页挂马

热门文章

  1. SQL Server insert的触发器
  2. 趣味理解ADO.NET对象模型
  3. Python使用matplotlib可视化模拟烧烤摊每月营业额折线图
  4. matlab 相位谱_电气信息类专业课程之matlab系统仿真 第九章 提高仿真能力需要案例(1)...
  5. openpythonxl_常用模块之openpyxl (python3入门)
  6. ERROR: Unsupported method: AndroidProject.getVariantNames().
  7. C#winform实现下载文件的功能
  8. 全网首发:JAVA的+=类算符,带有自动类型转换功能
  9. SHELL中获取函数返回值
  10. 随便一个人就能干预大选?