前面介绍了非常多概念知识。做了非常多准备工作,从这一节開始,我们正式開始单片机的学习。我们将使用单片机完毕一项非常easy的工作:点亮一个发光二极管(即LED:Light-Emitting Diode)。

LED简单介绍

先简介一下LED。LED是一种半导体器件,大家事实上对LED并不陌生,各种电器的指示灯、手机键盘灯、LED液晶屏的背光、高亮LED手电筒等,都是通过LED发光的。LED有两种主要用途,一种是作为指示灯;还有一种是照明。照明用的LED一般都是大功率LED,须要较大的电压电流才干正常工作。

而这里我们要用到的则是用作指示灯的小功率LED。常见的小功率LED。在它的正负极加上3V左右的电压,就会发光。正常发光的时候。电流大概是2~5mA。这里要注意,LED有正负极之分,接反了不会发光。另外,电压也不可太高,那样会烧坏LED。

关于LED更具体的介绍,大家能够參考电子元器件介绍之类的书籍。

电路设计

前面已经介绍了,单片机的IO口能输出高低电平,点亮LED就是通过IO口输出电平实现的。假设我们把LED的正极接在电源正极,负极接在单片机的一个IO口上。让单片机的IO口输出低电平,也就是接近0V的电压,这时LED两端有电压差,就能发光;假设IO口输出高电平,LED就会熄灭。

因为我们用的51单片机是5V供电,而LED须要3V电压,所以我们须要在LED上串联合适的电阻,否则会烧坏器件。

我们能够选用P0~P3共32个IO口中的不论什么一个,这里选择的是P1.0。电路图例如以下,电阻取值推荐为330Ω ~ 1kΩ之间。

顺便附上电阻阻值的计算过程:

1、电阻和LED串联,LED点亮时总电压5V,LED上须要3V,所以电阻上电压是5-3=2V。

2、LED的电流为2~5mA。假设算成2mA,电阻上电压为2V,电流为2mA,依据欧姆定律,所以阻值应该为2V/2mA=1kΩ。

面包板搭建电路

我们在自己的面包板上搭建的电路例如以下。我把LED连接在P1.0port上(万用板焊接的电路这里没有提供,大家能够自己去搭建):

开发板的使用

假设你是用的是开发板而且上面有LED模块。你能够查看电路图。

比如我的开发板电路图:

图中VCC通过J1接到RP1上,RP1是排阻,图中的1号脚是公共脚,在排阻的内部从1号脚往2~9号每一个管脚之间有一个1k电阻。总共8个1k电阻排列起来,所以叫做排阻。J1相当于一个开关。事实上是两个排针构成的插座。假设插上跳线帽,就能够导通;拔下跳线帽,就断开了。这样设计的优点是。假设我要用LED模块就插上跳线帽;而假设我不用LED模块。而讲IO口用于其它目的,这时LED就不会对我的电路产生干扰。由于LED一端接IO口,还有一端接到排阻上。而排阻还有一端是悬空的,没有接入电路。

而图中的标号DB1~DB8又接在单片机最小系统电路中的P1.0~P1.7的IO口。所以在J1导通的情况下,P1.0~P1.7的高低电平就能控制D1~D8这八个LED的亮灭了。

详细操作

单片机的编程,我们通常使用Keil软件。Keil软件能够从网上下载。安装过程这里不做具体介绍,有基本计算机操作知识,安装起来应该没有问题。

值得注意的一点是,安装的时候尽量安装到英文文件夹下,最好不要用中文,以免程序执行出现故障。

我们打开Keil软件。准备给单片机敲代码。

大家能够依照以下的步骤进行(这里以Keil uv4英文版为例进行说明。

假设你使用的是Keil其它版本号。操作方式基本同样)。

一、新建并配置project

1、首先新建project:点击菜单中的Project - New uVision Project。

2、然后我们在电脑上为我们的project新建一个目录,这里我用的是Project01 – LED,大家能够自行命名,但最好是英文名。

3、打开目录,输入project的名称,点击保存。这里我输入的是LED。

4、然后弹出一个窗体,让我们选择单片机的型号。

我们用到的是STC89C52RC。而这里面可能没有STC单片机,我们仅仅须要选择全然兼容STC的Atmel系列AT89C52单片机,点击OK确认就可以。

5、随后会弹出一个窗体,提示我们是否须要加入8051的启动代码到project中,点击否就可以(假设我们须要使用自己定义的启动代码,则能够点是,然后改动启动代码。而我们编程用的是C语言,普通情况下不须要改动启动代码。至于启动代码有什么用处,则能够等到我们对单片机了解的比較深入的时候再查找相关资料进行学习)。

6、以下我们对project进行简单的设置。

右击Target 1。选择第一项Options for Target ‘Target1’…。弹出project属性设置窗体。

7、我们打开Output标签,并勾选Create HEX File,然后点击OK确认就可以。

二、新建源文件并加入至project中

1、project新建并配置完毕了,以下我们開始新建程序源文件。点击菜单中的File-New。出现一个新的文件,如图。

2、然后我们点击保存button,将其保存到project目录Project01 - LED中,保存为扩展名是“.c”的文件,如main.c。这里大家要注意的是。源文件事实上仅仅是一个普通的文本文件,只是扩展名是c而不是txt。我们刚刚新建main.c文件的操作,也能够通过在资源管理器中新建文本文档。然后重命名为main.c的方式进行。

3、源文件新建好了。源文件仅仅是一个独立的文本文件。而project文件如今和刚刚新建的源文件还是全然独立、没有关联的。我们要把刚刚新建的main.c文件加入到我们的project中来:右击Target 1/Source Group 1,并选择菜单中的Add Files to Group ‘Source Group 1’…来加入文件。

4、双击须要加入的文件main.c。或者选中它再点击Addbutton。从左边的Project窗体就能够看到。文件就已经被加入到project中了。这时弹出的窗体并没有关闭,由于这样能够方便继续加入其它文件。由于我们如今仅仅需加入一个文件而且加入好了,所以点击Close关闭弹出的窗体。

三、编敲代码并编译

1、我们打开main.c。開始正式编敲代码了。我们编写的程序例如以下并保存。至于这个程序是什么含义,之后将具体介绍。注意一点。我给出的程序中设置的LED是P1.0,假设你的开发板或者自己搭建的电路中LED的IO口不是P1.0,你须要照着我给出的格式改动sbit那一行。这一点也充分体现了,单片机编程是和实际硬件电路息息相关的。程序和电路要配套。才干正常执行。

#include <reg52.h>

sbit LED = P1^0;

void main()

{

LED = 0;

while(1);

}

2、点击左上方的双箭头button编译所有文件,我们看到下方的输出窗体显示编译完毕。“creating hex file from ‘LED’”表明已经编译时创建了HEX文件(HEX文件是十六进制文件。将烧写进单片机。

相当于Windows中的可运行文件“.exe”),“0 Error(s), 0 Warning(s).”表示编译成功。程序也没有语法错误。假设提示你的程序有错,请细心的检查一下。有没有发生漏掉分号等情况。

四、烧敲代码到单片机中

在project目录下,我们能够看到生成的LED.hex文件,这正是我们所须要的。以下我们将把LED.hex文件烧写进单片机。

前面已经介绍了单片机程序下载相关知识,这里我们将介绍下载程序的一般步骤。因为大家使用的电脑、开发板等都不全然一样,有可能会下载失败。希望下载没有成功的读者不要灰心,关于下载失败怎样处理,请继续看后面内容。下载程序的操作过程例如以下:

1、设置单片机型号,这里我们设置单片机为STC89C52RC。

2、设置串口port号,波特率等參数。因为我们一般用的是USB转串口芯片,不是真正的RS232串口,所以串口号不固定。每次插上转接板或单片机学习板时,我们应打开设备管理器如图(XP系统:右击“我的电脑”→“属性”→“硬件”→“设备管理器”。Win7系统:右击“计算机”→“管理”→“设备管理器”)。找到port(COM和LPT)选项。展开。里面会有一个类似“Prolific USB-to-Serial Comm Port(COM1)”或者“USB-SERIAL CH431(COM1)”的项。括号中面的COMx就是我们要找的port号。

填到STC-ISP中就能够了(假设有多项不知道是哪一个,能够插拔单片机学习板看哪项会刷新)。假设非常不幸,你的串口号非常大,超出STC-ISP可设置的范围了。能够右击设备管理器中显示的那一项更改COMport序号。波特率等选项一般按默认就可以,不需设置。

3、点击“打开程序文件”,选择要烧写的单片机程序HEX或BIN文件。

HEX或BIN文件是编译之后的机器码,打开后能够在STC-ISP右側程序文件里看到相应的十六进制数字。

你能够选择自己写的程序产生的机器码,也能够在STC-ISP的test-hex文件夹中找一些測试程序。这里我们选择刚刚编译生成的HEX文件。

4、先点击“下载”,然后再打开电源开关,给单片机上电。稍后STC-ISP就会显示正在烧敲代码。

假设点击“下载”前忘了先关电源。或者程序没能下载,不须要点击“停止”button,直接断电再上电尝试就可以。一般几秒钟就能下载完毕,STC-ISP中会显示下载成功。

五、观察程序运行结果,有必要的时调试程序。

一般程序下载完毕后,假设P1.0口接有LED,电路连接无误,LED就会奇迹般的亮起来。我们就成功的让单片机运行了我们自己写的程序。每一个初学单片机的人在看到这一幕的时候,往往都会激动万分,正如我第一次学习单片机一样开心。因为这里的程序很easy,基本不须要调试。这时你就能够向好友炫耀一下,展示你的劳动成果了。

=======================================================

《单片机小白学步》系列教程(原名《单片机入门指南》)介绍

本系列教程从最主要的入门知识開始,逐步深入介绍单片机系统设计,内容包含:
1、入门篇:单片机等基本概念、各种电子设计基本知识
2、思想篇:单片机/计算机系统设计的project思想
3、学习篇:单片机学习过程、方法和技巧,以51单片机为例介绍。并推广到其它单片机
4、应用篇:遵循规范的project方法,设计单片机系统实例(计划设计的系统有:计算器、电子表、password锁、简易手机,详细看有没有时间再确定)
5、原理篇:从模拟电路、数字电路開始,逐步深入介绍单片机/计算机系统原理,并自行设计简易的CPU(因为个人水平有限。这部分没有把握写好。详细内容视情况而定)

教程特点

1、技术知识点全面。从入门到精通

包括了各种基本知识,尤其是对单片机基本概念的介绍、为什么要用单片机等。在非常多同类书籍教程中都被忽略了。同一时候也包括了一些深入的知识,包括原理篇考虑对单片机的基本原理进行介绍。有助于深入理解单片机。

本系列教程以51单片机为例进行介绍。通过51介绍完单片机的基本知识,我会再把430进行简要介绍,尤其是对照两者之间的优缺点,让大家非常快感受到430的巨大优势,而学习51正好为高速了解430打下了坚实的基础。

2、除了单片机知识,还有思想、方法、技巧的介绍

本系列教程中,介绍单片机各种模块编程知识的主要是学习篇,而学习篇仅仅是整个教程的一部分。

在学习篇中我会贯穿各种方法技巧,怎样理解一些模块功能,怎么看时序图,严格遵守project思想进行编程,程序发生了错误怎么调试等等。而在思想篇中会整体介绍非常多重要的思想,为后面的学习做好准备工作。

3、知识先后顺序的设计

单片机学习过程中,涉及大量的知识,并且非常多知识之间相互依赖,关联非常强。

本系列教程对知识的先后顺序进行比較明白的规划,尽最大可能符合人的认知过程。可是实际规划时发现。不管怎么调整知识的顺序,总有一些知识之间相互依赖,关系复杂。

比如開始讲IO口的时候肯定会提到寄存器,而寄存器这个词的理解,须要深厚的背景知识。可是这些背景知识在没有进行实践的时候也非常难理解。

刚開始学习的人经常就会在这种地方感觉疑惑不解,不知所措。

而每次遇到类似这种知识,我会向刚開始学习的人指出,应该怎样对待。

这个知识是应该自己去学习补充。还是等到学完原理篇再做理解,而如今又应该怎么去看待这个名词。

另外。在整个教程的学习前,须要掌握一定的C语言等基础知识,详细可參考教程第〇篇《序》中的相关说明
http://www.hainter.com/mcu-primer-0

4、语言通俗易懂

本系列教程力求语言通俗易懂,而不会用一堆新手不懂的词语去解释还有一个不懂的词语。可是受限于个人语言表达能力。可能有些地方表述的比較繁琐,或者不清楚,希望大家可以帮忙指出。

其它问题

假设认为我写的对你有帮助,欢迎多多反馈,包含写的不对、不合理、不太明确都能够指出来,这样方便我对其进行完好。

很多其它可參见:《怎样以学习单片机为契机。逐步成为优秀的project师》
http://www.hainter.com/mcu-engineer

本系列教程首发于我的个人主页。欢迎訪问(因为是国外server,速度略微有点慢):
http://www.hainter.com/category/hacker/mcu-primer

同一时候会将其转发到CSDN、电子发烧友等网站,欢迎关注。

CSDN专栏网址 http://blog.csdn.net/column/details/mcu-introduction.html
电子发烧友论坛 http://bbs.elecfans.com/zhuti_mcu_1.html

本文首发自我的个人主页,转载请注明来源:http://www.hainter.com/mcu-primer-13

转载于:https://www.cnblogs.com/clnchanpin/p/7255843.html

单片机小白学步系列(十三) 点亮第一个LED——好的開始,成功的一半相关推荐

  1. 单片机c语言中io取反,单片机小白学步(21) IO口:基本的LED和按键操作

    原标题:单片机小白学步(21) IO口:基本的LED和按键操作 本篇我们先介绍最基础的几个IO口操作.学完本篇,大家要能自己独立完成下面几个实验. 1.点亮 2.一个按键控制LED,按下灯亮,释放灯灭 ...

  2. 单片机小白学步系列(二十三) IO口原理知识补充:双向IO口、互补推挽、高阻态

    由于之前考虑不周,本篇在IO口原理知识的基础上,进一步补充一些知识. ================================================= 双向IO口的输出:互补推挽 在 ...

  3. 单片机小白学步系列(十四) 点亮第一个LED的程序分析

    本篇我们将分析上一篇所写的程序代码.未来学习单片机的大部分精力,我们也将放在程序代码的编写上.但是不用担心,我会非常详细的介绍每个程序的编写思路和各种注意事项等. 之前我们写的程序如下: #inclu ...

  4. 单片机小白学步系列(二十一) IO口:基本的LED和按键操作

    本篇我们先介绍最基础的几个IO口操作.学完本篇,大家要能自己独立完成下面几个实验. 1.点亮LED 2.一个按键控制LED,按下灯亮,释放灯灭 3.两个按键控制一个LED,一个键开灯,一个键关灯 实验 ...

  5. 单片机小白学步系列(二十) IO口原理

    IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比较长的篇幅介绍IO口的原理.也是查阅了不少资料,确保内容正确无误,花了很长时间写的.IO口原理原本需要涉及很多深入的知识,而这里尽最大可能做了 ...

  6. 单片机小白学步系列(十五) 单片机程序下载失败总结

    前面介绍了点亮第一个LED的全过程,很多人可能很幸运的点亮了LED,然而也很可能不少人非常不幸没有把程序下载进去.初学者常会遇到程序无法下载的情况,很多人在尝试多次未果后比较受打击,因此放弃了学习,实 ...

  7. 单片机小白学步系列(十二) Proteus仿真软件简介

    Proteus软件是英国Labcenter electronics公司出版的EDA工具软件.常用于单片机等数字电路仿真,分为ISIS和ARES两个程序,前者用于仿真,后者用于设计PCB.我们常使用IS ...

  8. 单片机小白学步系列(四) 模拟电路、传统数字电路与单片机

    大家都用过计算器,有没有想过它是怎么实现的呢?这里我不详述计算器的原理,而只对思路进行简单介绍.等我们学会了单片机,也可以亲手制作一个计算器.通过电路进行数学计算,应该怎么做呢?为了便于理解,下面我举 ...

  9. 单片机小白学步系列(二)爱上单片机的一万个理由

    到现在为止,相信大家对单片机已经有了一个基本概念,但是我们为什么要学习单片机呢?我们需要找到爱上单片机的一万个理由. 单片机在生活中应用非常广泛.各种家电,如洗衣机,电冰箱,电饭煲,电子称,等等,往往 ...

最新文章

  1. Java程序员校招蚂蚁金服,mysql培训考试
  2. 第10章 嵌入式linux的调试技术
  3. 注册界面php mysql_php:用户登录注册并存入数据库的简单网页示例
  4. 干货 | 从零进阶数据分析学习资料汇总(限时福利)
  5. ORA-01658:Unable to create INITIAL extent for segment in tablespace %s
  6. JVM学习笔记之-StringTable String的基本特性,内存分配,基本操作,拼接操作,intern()的使用,垃圾回收 ,G1中的String去重操作
  7. js对浏览器内部及外部窗口宽度及高度使用测试
  8. [学习笔记]c#Primer中文版-类设计、static成员、const和readonly数据成员
  9. 从源码分析RocketMQ系列-Producer的invokeSync()方法
  10. 各种类型变量的定义以及赋值
  11. 滴滴配合警方调证不超 10 分钟;苹果否认恶意芯片报道;贝索斯建火箭中心 | 极客头条...
  12. vue入门:(class与style绑定)
  13. Android 端 Rsa加密数据
  14. JavaScript ES6新特性
  15. 用linux设计应用程序,ARM设计的uClinux及其应用
  16. 信息安全工程07875 自考软件工程 助学班复习纲要
  17. 《哪咤学python进阶篇》之选学案例三:白桦林的故事_(Python多媒体MV)
  18. lua 调用c++ dll, 提示:%1 不是有效的 Win32 应用程序。
  19. 微信小程序——背景音乐播放
  20. mplayer 视频播放器_如何全屏播放视频并使它与MPlayer循环播放?

热门文章

  1. Boost.Function 库示例
  2. boost::core模块实现范围枚举C++11
  3. Boost:异步操作,涉及重新打包多个操作,但选择仅调用其中一个的测试程序
  4. Boost:字符串Predicate的测试实例
  5. ITK:将网格写入vtp文件
  6. DCMTK:DcmFloatingPointDouble类的测试程序
  7. VTK:相互作用之ImageRegion
  8. VTK:图片之ImageCheckerboard
  9. Qt Linguist 翻译
  10. C++const与#define 相比,有何优点?