版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2.1 点亮一个发光二极管项目2 发光二极管的闪烁大多数单片机初学者都是从点亮一个发光二极管开始单片机学习之路的。在项目2中我们安排了3个简单的任务,分别是点亮一个发光二极管、发光二极管闪烁和8位流水灯。通过这三个任务,让初学者初步了解51单片机IO口控制外围器件的原理,激发初学者学习单片机的兴趣。在完成这三个任务之外,教程中穿插讲述了51单片机编程软件KeilC51以及STC烧录软件的使用、C语言入门基础、模拟电路基本元件的特点等入门知识,为今后的学习打下良好的基础。【内容安排】2.1点亮一个发光二极管2.2 发光二极管的闪烁2.3 8位流水灯 任务2.1 点亮一个发光二极管2.1.1任务要
2、求 使用单片机的两个I/O口,其中一个I/O口作为输入引脚,接开发板上的高电平(或低电平),另外一个I/O口作为输出引脚,控制开发板上的一个发光二极管亮灭。当输入I/O接高电平时,发光二极管点亮,反之当输入I/O接低电平时,发光二极管熄灭。2.1.2知识准备1、发光二极管LED(light-emitting diode),即发光二极管,有贴片的,也有直插的,如图2.1.1所示,常见的颜色有红、绿、黄、蓝、白等。从发光二极管的字面上我们可以看出它的一些特性:首先它能发出可见光,另外这种器件具有普通二极管的特性,即单向导电性,具有阴极和阳极之分。 图2.1.1 直插发光二极管和贴片发光二极管开发板
3、上的发光二极管发出的光是红颜色,0805贴片封装。这种二极管的正向导通电压在1.8V到 2.2V之间,工作电流在1mA20mA 之间。当导通电流大约1mA时,人的眼睛就可以明显地观察到二极管的发光,导通电流越大,亮度越高,超过10mA,亮度变化就不明显了,当电流超过20mA时,发光二极管就会有烧坏的危险。 在设计发光二极管驱动电路时,要在发光二极管电路中串接一个限流电阻,调节阻值的大小可以控制发光二极管的发光亮度。导通电流与限流电阻的关系为Iled=(VCC-Vled)/R,Iled是流过发光二极管的电流,Vled是发光二极管两端电压,电阻R是限流电阻。电流3-10mA,电源电压5V,Vled
4、在2V左右,则限流电阻的取值在300-1K之间。图2.1.2 发光二极管驱动电路 2、单片机I/O口如何控制发光二极管亮灭 图2.1.3(a)中是一个通过开关控制发光二极管亮灭的电路。开关S1断开,电源上的电流经过限流电阻R1,流向发光二极管,发光二极管被点亮。开关S1闭合,电源上的电流经过限流电阻R1流向地,发光二极管没有电流流过,发光二极管熄灭。在单片机的I/O内部,实际上也存在这样一个开关。图2.1.3(b)是通过单片机I/O口控制发光二极管亮灭的等效电路图。与图(a)不同的地方在于,开关S1不是通过手动控制的,而是通过单片机的I/O控制的。我们通过程序控制P17引脚连接的开关S1闭合,
5、则P17引脚为低电平,发光二极管熄灭,相反通过程序控制开关打开,则P17引脚呈现高电平,发光二极管被点亮。(a)开关控制发光二极管 (b)I/O控制发光二极管 图2.1.3 I/O控制发光二极管亮灭的原理解释 另外需要说明的,对于51单片机而言,如果按照图2.1.3(b)中的接法来驱动发光二极管,并不能点亮发光管,本单元的任务3中会详细解释I/O口高电平驱动不了发光二极管的原因。3、编程语言的选择和C语言的简单介绍 单片机控制发光二极管亮灭是通过编写程序来实现的,那么我们用什么语言来编写程序呢? 单片机编程语言有汇编语言和C语言。相比较来说,汇编语言比较接近单片机的底层,使用汇编语言有助于理解
6、单片机内部结构。简单的程序,用汇编语言,程序效率也可能比较高,但是当程序容量达到几千上万行以后,汇编语言在组织结构、修改维护等方面就会成为你的噩梦了。C语言具有通用性,51单片机用可以用C语言编程,其它单片机(AVR、STM32等)也可以用C语言编程,而汇编则不具备通用性,每一类型的单片机的汇编指令不尽相同,初学者绕不过学习汇编指令的烦扰。另外C语言的可移植性好,用51单片机写的程序只要稍加修改,就可以在别的单片机中使用。所以目前实际开发过程中,大部分工程师都在用 C 语言做单片机开发,只有在很低端的应用中或者是特殊要求的场合,才会用汇编语言开发,所以这里建议大家还是用C语言开发比较好一些。4
7、、特殊功能寄存器(SFR) 学过C语言的人肯定会有这样一个问题:编写单片机程序用C语言,那么在C语言中怎样来描述单片机的资源呢?在单片机内部有一个重要的资源叫特殊功能寄存器,简称SFR。SFR是单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令、状态或数据。举个例子来讲,SFR可以看成是一栋宿舍楼,里面有很多房间,这些房间存放P0、P1、P2、P3这些I/O的控制命令,也存放着定时器、中断、串口等资源的控制命令,房间号对应命令的地址。我们要操控这些资源,只需要向房间号(命令的存放地址)写命令就可以了。表2.1.1是STC89C52单片机的SFR地址表,共有21个特殊功能寄存器。我们
8、可以看到P0口的地址为0x80,我们要操控P0口,只需要对0x80这个地址写数据就可以了。在C51中,相比于普通C语言,多了两个特殊的变量声明,sfr和是sbit。表2.1.1 STC89C52的特殊功能寄存器符号地址功能介绍符号地址功能介绍BF0HB寄存器TH18DH定时/计数器1(高8位)ACCE0H累加器TH08CH定时/计数器0(低8位)PSWD0H程序状态字TL18BH定时/计数器1(高8位)IPB8H中断优先级控制寄存器TL08AH定时/计数器0(低8位)P3B0HP3口锁存器TMOD89H定时/计数器方式控制寄存器IEA8H中断允许控制寄存器TCON88H定时/计数器控制寄存器P
9、2A0HP2口锁存器DPH83H数据地址指针(高8位)SBUF99H串口缓冲器DPL82H数据地址指针(低8位)SCON98H串口控制寄存器SP81H堆栈指针P190HP1口锁存器P080HP0口锁存器PCON87H电源控制寄存器sfr:在声明变量的同时为其指定特殊功能寄存器作为存储地址。例如:sfr P0=0x80,此处声明一个变量P0,并指定其存储地址为特殊功能寄存器P0对应的地址(0x80)。编写应用程序时直接对变量P0赋值就可以了。举例:P0口的8个位分别10101010,则在软件里直接写语句P0=0xAA(0B10101010)就可以了。sbit:同样是声明一个变量,和SFR 使用方
10、法类似,但是sbit是用来声明一个位变量。P0口共有8个位,我们想单独控制第2个位,可以通过这样的定义:sbit P11=P11,这样我们就可以在程序中使用P11表示P1口的第二个位。是不是我们每一次编写程序的时候都需要用sfr和sibt来定义寄存器变量呢?实际上C51编译器已经做好了一个文件,里面已经存放了些定义。这个文件的名字叫做reg52.h(头文件),文件存放的路径是KeilC51INC,在Keil软件的安装文件夹中。我们在编写程序的时候,只需要在程序的开头加上这样一个语句#include,就可以把这些寄存器变量定义加载到当前的程序中直接使用了。2.1.3 任务实施1、KeilC51的
11、安装KeilC51是美国Keil Software公司(ARM公司之一)出品的51系列兼容单片机C语言软件开发系统。下面是Keil C51编译器的安装步骤。(1)双击KeilC51安装文件夹中的 文件,弹出如图2.1.4所示的对话框。图2.1.4 双击安装文件界面(2)点击“Next”按钮,弹出“License Agreement”对话框,如图2.1.5所示。文本框中显示的是安装许可协议,需要在“I agree to all the terms of the preceding License Agreement”前面的的小框中打勾。图2.1.5 许可协议界面(3)点击“Next”按钮,弹出“
12、Folder Selection”对话框,如图2.1.6所示。这里可以设置安装路径,默认安装路径在“C:Keil”文件夹下。点击“Browse.”按钮,可以修改安装路径,应用程序尽量不要安装在C盘,建议选用别的盘符,安装路径不能出现中文字符。2.1.6 选择安装路径界面(4)点击“Next”按钮,弹出“Customer Information”对话框,如图2.1.7所示。输入用户名、公司名称以及 E-mail 地址即可。图2.1.7 输入用户名等信息界面(5)单击“Next”,自动安装软件,进度条一点一点增大,如图2.1.8所示。图 2.1.8 文件安装界面(6)安装完成后,弹出来安装完成对话
13、框,如图2.1.9 所示,有几个打钩的选项,把这些勾都去掉,点击“Finish”按钮,Keil C51安装完成。 图 2.1.9 安装完成后界面2、工程的建立(1)在编写应用程序之前,需先建立一个工程,应用程序和其它文件放在工程中。打开 Keil 软件后,点击:Project-New uVision Project.,如图2.1.10 所示。 图 2.1.10 新建一个工程(2)在弹出的窗口中,选择工程保存的位置,并给工程起一个名字,我们给工程起名LED,软件会自动添加扩展名.uvproj。如图2.1.11所示图2.1.11 工程命名(3)点击“保存”按钮后,弹出如图2.1.12的对话框。图2
14、.1.12 选择CPU型号在这个对话中,要为我们的工程选择CPU类型。在Data base列表框中,拖动滚动条,有很多生产厂商的名称,但找不到我们开发板上STC89C52的生产厂商宏晶科技。Keil C51的设计者并没有把STC单片机加入到Keil中。STC89C52和Amel公司的51单片机同属一个系列,在选择CPU时,我们可以选择Atmel公司,单击Atmel前面的+,展开后,有很多Atmel公司的单片机,我们选择AT89C52就可以了。(4)选定CPU型号后,点击”OK”按钮,会弹出一个对话图,让你选择在工程中加入一段启动代码,初学者可以不理会,点击”否”就可以了,工程创建完毕,界面如图
15、2.1.13所示。2.1.13 工程创建后界面(5) 工程创建后,下一步的工作就是建立编写代码的文件。点击菜单File-New,新建一个文件,然后点击File-Save,保存文件,弹出如图2.1.14所示的窗口。图2.1.14 新建一个.c文件我们把文件放在LED工程下,同时给文件起个名字:LED.c,(6)建立了工程和C文件之后,两者还是分离的,下一步的工作是把C文件加入到工程中。鼠标右键单击Project栏中的Target 1下的文件夹Source Group 1,弹出一个菜单,选择Add Files to “Source Group 1”.,如图2.1.15所示。 图 2.1.15 C文
16、件加载到工程中点击Add Files to “Source Group 1”.后,弹出如图2.1.16所示的对话框,我们选中刚才建立的LED.c文件,然后点击按钮Add,再点击按钮Close,关闭对话框。 图2.1.16 加载LED.c界面把文件加入到工程中后,可以看到在左侧Source Group 1下多了一个新的文件:LED.C,如图2.1.17所示。图2.1.7 加入.c文件后工程界面3、程序的编写#includesbit LED=P10; /LED输出接口定义sbit Input=P11; /外接电平输入接口定义void main(void)while(1) /大循环if(Input=
17、1) /如果输入电平为高电平,则点亮LEDLED=0; /低电平点亮LED else LED=1; /否则,熄灭LED我们把C文件加入到工程后,就可以编写应用程序了。应用程序的编写在LED.c窗口中,当前行有光标在闪烁,而且当前行的颜色为淡紫色。如果对编程的字体大小不满意,可以点击菜单栏Edit-Configuration,里面有一个选项卡Colors & Fonts,可以修改字体大小和颜色等。程序清单如下:程序解释如下:(1)在介绍特殊功能寄存器SFR时,我们提到过功能寄存器的定义已经被包含在reg52.h这个文件中,#include是预处理命令,在这里是文件包含的意思。就是把中的文件包含到
18、本程序中,成为当前程序的一部分。有了#include这个语句,我们可以直接使用那些寄存器了。(2)打开reg52.h这个头文件,我们可以看到既有寄存器定义,也有部分寄存器中每个位的定义,但是我们在这个文件中找不到I/O的位定义,所以我们需要在我们的程序中加上单个IO的位定义:sbit LED=P10;sbit Input=P11;。(3)日常生活中,要完成一件复杂的功能,我们总是习惯把“大功能”分解为多个“小功能”来实现。这些功能在C语言中我们称之为“函数”。大功能我们称之为主函数,函数名为main,小功能为子函数。一个程序,无论复杂或简单,都是由主函数开始的。函数的格式为:返回类型 函数名称
19、(参数列表,.),在main函数中,返回类型和参数列表都是空的,所以都用void来表示。main函数中的内容放大中。(4)我们在学习C语言课程时,课本中的例程执行一次,输出结果就可以了。但是在C51中,主程序中的任务大多数是循环运行的,不能执行一次就结束了,举个例子,温度采集器采集环境温度,需要程序不停的执行温度采集任务,不能只采集一次,程序就不运行了。C51中,循环执行的任务放到大循环中。大循环的格式为:while(1)任务A;任务B;任务C;.while语句是循环语句的一种,后面的()的内容为循环条件,如果条件为真,则执行中循环体的内容,如果不为真,则不执行中循环体的内容。本例程中,whi
20、le语句的条件为1,永远为真,则不停执行中循环体的任务。(5)在本任务的硬件电路设计中,发光二极管正极接电源,负极连接单片机PI0引脚,电路如图2.1.18所示。所以要点亮发光二极管,P10引脚需置低电平,程序中对应的语句:led=0;,发光二极管灭,P10引脚需置高电平,则程序中对应的语句:led=1;。至于为什么用低电平点亮发光二极管,而不是用高电平来点亮发光二极管,本单元的任务3会解释低电平点亮的原因。 图2.1.18 发光二极管硬件电路(6)程序中的任务是不停的检测输入I/O口(P11)外接电平是高电平还是低电平,如果是高电平,则发光二极管熄灭,如果为低电平,则发光二极管点亮。程序中判
21、断输入I/O是高电平还是低电平,用到了C语言中的if语句,其格式为:if(条件) 执行动作A else执行动作B如果条件满足,则执行动作A,否则执行动作B。在本程序中,如果P11口外接输入电平为高电平1(if(Input=1)),则点亮发光二极管(LED=0),否则则熄灭发光二极管(LED=1)。开发板上留有高电平(5V)和低电平(0V)接口,用杜邦线把P11口和高电平或者低电平相连就可以了。细心的读者会发现,如果P11口不用杜邦线连接高电平,发光二极管也点亮,其中的原因我们会在本单元的任务3中,给予解释。4、程序的编译程序编好了,我们要对程序进行编译,生成可以下载到单片机里的文件,在编译之前,我们先要勾选一个选项,Project-Options for Target Target1.,或者直接点图2.1.19图中红框内的快捷图标。 图2.1.19 点击魔术棒在弹出的对话框中,点击 Output 选项页,勾选其中的“Create HEX File”复选框,然后点 OK,如图2.1.20所示。图2.1.20 勾选复选框设置好以后,点击“Project-rebuild all target files” ,或者鼠标点击图2.1.21中红框内的快捷图标,就可以对程序进行编译了。图2.1.21
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中数学 第一章 集合与函数概念 新人教版必修1
- 土建类施工组织设计
- 2024年度旅游包车服务详细合同
- 2024年度电气设备安装工程设计合同
- 2024中国电力建设集团水电水利规划设计总院招聘3人易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国电信江苏公司春季招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国冶金地质总局在京单位招考应届毕业生易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国一冶集团限公司交通工程公司招聘80人易考易错模拟试题(共500题)试卷后附参考答案
- 2024下半年江苏兴海控股集团限公司招聘17人易考易错模拟试题(共500题)试卷后附参考答案
- 2024上半年福建福州市连江县部分国企业招聘9人易考易错模拟试题(共500题)试卷后附参考答案
- 刘力红思考中医
- 血液运输物流服务投标方案
- 机电保安制度
- 浅谈小学数学后进生的产生原因及转化策略
- 高中英语-John Snow Defeats“King Cholera”教学课件设计
- 围手术期护理论文范文10篇
- 华为5GNR初中级理论考试参考题库(含答案)
- 涉校矛盾纠纷排查化解工作方案
- 学院(校)食堂餐饮企业承包经营退出管理制度
- 中级纺织工程师工作计划工作总结述职报告
- Unit3Whatcolouristhisballoon颜色单词演练
评论
0/150
提交评论