单片基础及其应用 5_第1页
单片基础及其应用 5_第2页
单片基础及其应用 5_第3页
单片基础及其应用 5_第4页
单片基础及其应用 5_第5页
已阅读5页,还剩92页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目三单片机输入输出接口应用9697任务1

LED指示灯点亮设计

任务2

LED指示灯闪烁显示设计任务3

流水灯显示设计任务4

花样彩灯显示设计LED指示灯点亮设计任务1981.了解单片机I/O接口的电路结构及应用。2.掌握C51程序的构成。3.理解单片机的进制转换关系。4.能设计LED指示灯点亮电路。5.能编写LED指示灯点亮程序并进行仿真测试。6.能与他人分析讨论,发现并解决程序编写和调试问题。99在实际应用中,物联网设备通过LED指示灯显示其运行状态,LED指示灯亮代表物联网设备正在运行,LED指示灯灭则代表物联网设备停止运行。在电路设计中经常会通过单片机I/O接口控制外围设备,单片机对LED指示灯的输出控制是单片机入门的基本控制项目。本任务要求使用单片机控制LED指示灯点亮,如图所示。100101LED指示灯点亮本任务可通过单片机P0口的一个引脚外接一个LED实现设备运行指示灯电路的设计,编程控制单片机引脚输出高、低电平进而控制指示灯的亮与灭。为完成此任务,需要学习LED指示灯控制电路等相关知识。102103一、LED指示灯控制电路的认识LED指示灯可广泛应用于舞台和广告的灯光装饰。如图所示为LED的实物和电路符号,LED有正极和负极,当正极电压大于负极电压时,LED导通发光,反之则截止熄灭。通常当LED中的电流为5mA左右时,LED即可发光,电流越大,其亮度越强,但若电流过大,会烧毁LED。因此,通常给LED串联一个220Ω的电阻即可限制LED的电流,这个电阻被称为限流电阻。104LED的实物和电路符号a)LED的实物b)LED的电路符号105如图所示为典型的单片机控制LED指示灯电路,该电路中的LEDVD正极接+5V电压,VD负极接单片机的P2.4引脚。此时,单片机P2口的P2.4引脚输出低电平,实现VD点亮;同理,如果要让VD熄灭,则需让单片机P2口的P2.4引脚输出高电平。典型的单片机控制LED指示灯电路106二、单片机I/O接口的电路结构及应用MCS-51系列单片机有4个8位的并行I/O接口,即P0~P3口,它们都是双向通道,P0~P3口的每一条I/O接口线都能独立地作为输入或输出线使用,作为输入线使用时可以输入数据,作为输出线使用时可以输出数据。1. P0口的电路结构及应用P0口的位结构电路原理图如图所示。P0口的字节地址为80H。P0口是一个8位双向I/O接口,既可作为地址/数据总线接口使用,又可作为普通I/O接口使用,所以在P0口的电路中有一个多路转换开关MUX。在内部控制信号的作用下,MUX可以分别接通锁存器输出和地址/数据总线。107P0口的位结构电路原理图1082. P1口的电路结构及应用P1口的位结构电路原理图如图所示。P1口的位结构电路原理图109P1口的字节地址为90H。P1口是一个准双向口,其输出驱动部分与P0口不同,内部有上拉电阻与电源相连(没有高阻态),所以无须外加电阻就能直接驱动电路。P1口的每一条I/O接口线都可以分别被定义为输入或输出线使用,当I/O接口线由输出线转为输入线时,必须先向对应的锁存器写入“1”,所以P1口也被称为准双向口。3. P2口的电路结构及应用P2口的位结构电路原理图如图所示。110P2口的位结构电路原理图P2口的字节地址为A0H。P2口也是一个准双向口,它有两种使用功能:作为普通I/O接口或作为外部系统扩展时的高8位地址总线。P2口用于为系统提供高8位地址,因此同P0口一样,在电路中有一个MUX,但MUX的一个输入端的信号不再是地址/数据,而是单一的地址,这是因为P2口的第二功能只能作为高8位地址总线使用。1114. P3口的电路结构及应用P3口的字节地址为B0H,它也是一个准双向I/O接口,其第一功能是可作为普通I/O接口,此时与P1口相同,也是一个准双向I/O接口。另外,由于MCS-51系列单片机的引脚数目有限,因此在P3口的位结构电路中增加了引脚的第二功能,P3口的位结构电路原理图如图所示。112P3口的位结构电路原理图三、程序的识读1. 源程序示例1132. C51程序的构成一个C51程序由一个主函数main()和若干个模块化的子函数构成,有且只有一个main()函数。除了main()函数,用户还可以根据需要自行设计自定义函数。另外,在C51程序中,程序总是从main()函数开始执行。C51程序的基本构成如下。1141153. 关于头文件reg51.h头文件定义了MCS-51系列单片机内部所有的特殊功能寄存器,其部分内容如下。1164. 关于函数C51函数由函数说明和函数体两部分组成。函数体由一对大括号“{}”构成。常见的函数结构如下。117函数示例如下。118(1)函数说明函数说明即函数的第一行,包括函数类型、函数名、函数参数表(形参)。(2)函数体函数体即函数说明部分下面的大括号“{}”内的部分。如果一个函数内有多个大括号,则最外层的一对大括号内的部分为函数体。函数体一般包括以下部分。1)声明语句:定义所用到的变量。2)执行语句:由若干条语句组成。1195. 关于赋值语句C51语句即C51语言中的操作命令,用于单片机完成特定功能。一条完整的语句必须以“;”结束,一般一条语句经过编译后生成若干条机器指令。C51语句包括声明语句、赋值语句、表达式语句、循环语句、条件语句、开关语句、复合语句、空语句和返回语句等,下面主要讲解赋值语句。1206. 关于while语句while语句是循环语句,一般格式如下。121其中,表达式是循环条件,语句组为循环体,while语句的执行过程是计算表达式的值,当值为真(非0)时,执行语句组;当值为假(0)时,退出整个while语句。while语句的执行过程如图所示。122while语句的执行过程7. 关于注释注释内容可以单独写在一行,也可以写在一条语句之后。可采用/*……*/的形式为C51程序的任何一部分添加注释,即从“/*”开始到“*/”为止的内容都将被认为是注释;“//”表示单行注释,即此注释行中符号“//”后的文字被认为是注释。123四、标识符和关键字1. 标识符变量名、常量名、数组名、函数名、文件名与类型名等统称为标识符。C51语言规定标识符只能由字母、数字和下画线3种字符组成,且第一个字符不能是数字。要注意的是,C51语言中的大写字母与小写字母被认为是不同的字符,即Sum与sum是不同的标识符。1242. 关键字关键字是编程语言保留的特殊标识符,它们具有固定的名称和含义,在程序编写中,不允许标识符与关键字同名。KeilμVision4软件除了支持ANSIC标准的32个关键字,还根据MCS-51系列单片机的特点扩展了相关的关键字。在KeilμVision4软件的文本编辑器中编写C51程序后,系统会以不同颜色显示关键字,关键字的默认颜色为蓝色。125五、单片机的进制转换关系二进制数是用0和1两个数码表示的数,它的基数为2,进位规则是“逢2进1”,借位规则是“借1当2”,如8位二进制数“00110101”。十六进制数的进位规则是“逢16进1”,用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示,对应的十进制数是0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15。C51语言中十六进制数前加“0x”。126LED指示灯闪烁显示设计任务21271.了解单片机内部的时间单位及时序。2.掌握C51的数据类型和C51程序的基本结构。3.能用do-while语句和for语句编写循环程序。4.能用for语句编写延时子函数。5.能设计LED指示灯闪烁显示电路。6.能编写LED指示灯闪烁显示程序并进行仿真测试。7.能与他人分析讨论,发现并解决程序编写和调试问题。128在生产环境中,经常需要到机房查看网络设备的运行情况,通过观察设备的指示灯判断设备运行状态是否良好。本任务要求编写单片机控制LED指示灯闪烁显示程序,实现LED指示灯闪烁显示功能,即LED灭0.3s,亮0.3s,循环往复,如图所示。129LED指示灯闪烁显示本任务可用单片机P2口的1个引脚外接1个LED实现LED指示灯闪烁显示的电路设计,编程控制单片机引脚输出低、高电平进而控制指示灯亮、灭,指示灯亮、灭时间间隔为0.3s,从而使其闪烁起来。为完成此任务,需要学习单片机内部的时间单位及时序、C语言程序设计等相关基础知识。130131一、单片机内部的时间单位及时序1. 单片机内部的时间单位单片机各部分能协调一致地工作是因为它们是在时钟脉冲的控制下,一个节拍一个节拍地去完成相应的工作,完成规定操作所需要的时间称为周期,MCS-51系列单片机各种周期的相互关系如图所示,这里涉及振荡周期、状态周期、机器周期和指令周期等概念。132MCS-51系列单片机各种周期的相互关系(1)振荡周期振荡周期是指为单片机提供定时信号的振荡源的周期,用P表示,若为内部产生方式,则单片机的振荡周期为石英晶体的振荡周期,通常振荡周期又称时钟周期。单片机外接的石英晶体有6MHz、11.0592MHz、12MHz和24MHz等规格。(2)状态周期状态周期用S表示。通常,MCS-51系列单片机的一个状态周期为一个振荡周期的2倍。133(3)机器周期单片机完成一个基本操作所需的时间称为一个机器周期,它是一个时间基准,就像日常生活中使用的秒一样。MCS-51系列单片机的一个机器周期包含12个振荡周期。(4)指令周期单片机完成一条指令所需要的时间称为指令周期。2. 单片机内部指令的执行时序单片机执行各种操作时,CPU严格按照规定的时间顺序完成相关的工作,这种时间上的先后顺序称为时序。134二、C51的数据类型C51定义了标准C语言的所有数据类型,同时对标准C语言进行了扩展,更加注意对系统资源的合理利用。C51的基本数据类型见下表。135C51的基本数据类型1. C51的基本数据类型(1)字符型(char)字符型(char)分为有符号字符型(signedchar)和无符号字符型(unsignedchar),默认为有符号字符型。有符号字符型数据长度为1B,表示的数值范围为-128~+127,无符号字符型表示的数值范围为0~255。136(2)整型(int)整型(int)分为有符号整型(signedint)和无符号整型(unsignedint),默认为有符号整型。无符号整型表示的数值范围为0~65535,有符号整型表示的数值范围为-32768~+32767,字节中的最高位表示数据的符号,“0”表示正数,“1”表示负数。137(3)长整型(long)长整型(long)分为有符号长整型(signedlong)和无符号长整型(unsignedlong),默认为有符号长整型。无符号长整型表示的数值范围为0~4294967295,有符号长整型表示的数值范围为-2147483648~+2147483647,字节中的最高位表示数据的符号,“0”表示正数,“1”表示负数。138(4)浮点型(float)浮点型(float)数据的长度为4B(32位),在十进制数中具有约7位有效数字,许多复杂的数学表达式都采用浮点型的变量类型。(5)指针型(*)指针型(*)本身就是一个变量,在这个变量中存放的是指向另一个数据的存储单元地址。指针变量要占据一定的内存单元,在C51中它的长度一般为1~3B。1392. C51扩展的数据类型为了更加有效地利用单片机的硬件资源,C51对标准C语言进行了扩展,增加了表所列的扩展的数据类型。140C51扩展的数据类型(1)位变量(bit)位变量(bit)可以定义一个位类型变量,但是不能定义位指针,也不能定义位数组。位变量的值只能是一个二进制位“0”或“1”。(2)特殊功能寄存器(sfr)特殊功能寄存器(sfr)占用1B,其数值范围为0~255,利用它可以访问单片机内部所有的8位特殊功能寄存器。定义方法为:sfr特殊功能寄存器=地址常数。141(3)位特殊功能寄存器(sfr16)位特殊功能寄存器(sfr16)占用2B,其数值范围为0~65535。定义方法与sfr相同。(4)可寻址位变量(sbit)可寻址位变量(sbit)的作用是可以访问芯片内部RAM的可寻址位或特殊功能寄存器的可寻址位。可寻址位变量(sbit)常用的定义格式有以下3种。1423. 常量常量包括整型(十进制、十六进制等)常量、浮点型常量、字符型常量和字符串常量等。4. 变量变量是一种在程序运行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型等,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下。143其中,[]内的内容是可选项。变量的存储种类有4种,即自动(auto)、外部(extern)、静态(static)和寄存器(register)。(1)自动(auto)自动(auto)用于定义局部变量,这些变量在函数内部自动创建和销毁,它们具有块作用域特点。如果自动变量在定义时未初始化,其值默认为随机数。(2)外部(extern)外部(extern)用于声明在其他文件中定义的全局变量,表示变量可以在多个文件中共享。外部变量的初始值由定义时指定。144(3)静态(static)静态(static)用于修饰全局变量或局部变量,表示变量在程序运行期间一直存在。静态变量在程序开始运行时初始化,如果未明确指定初始值,则初始值为0;如果已明确指定初始值,则初始值为常量表达式指定的值。(4)寄存器(register)寄存器(register)用于定义局部变量,表示变量尽可能地存储在寄存器中以提高访问速度。寄存器变量是动态局部变量,具有局部作用域,存放在CPU的寄存器或动态存储区中,如果寄存器变量没有存放在通用寄存器中,便按自动变量处理。145三、宏定义C51语言同C语言一样,允许用一个标识符表示一个字符串,称为宏,该标识符称为宏名。宏定义语句用预处理命令“#define”来定义,在程序中可以用标识符代替定义后的字符串,格式如下。146此语句定义了PI表示圆周率π值3.1415926。此语句定义了uchar表示数据类型unsignedchar,经过定义的数据类型unsignedchar在程序中就可以用uchar来表示。147四、加减算术运算符1. 加运算符(+)加运算符(+)用于实现加法运算,示例如下。“y=x+1;”表示x值保持不变,把x值加1赋值给y。“x=x+1;”表示x值加1,x值发生变化。2. 自增运算符(++)自增运算符(++)用于将整数值增加1,示例如下。“x=i++;”表示先把i值赋值给x,i值再加1。“x=++i;”表示i值先加1,再赋值给x。1483. 减运算符(-)减运算符(-)用于实现减法运算,示例如下。“y=x-1;”表示x值保持不变,把x值减1赋值给y。“x=x-1;”表示x值减1,x值发生变化。4. 自减运算符(--)自减运算符(--)用于将整数值减少1,示例如下。“x=i--;”表示先把i值赋值给x,i值再减1。“x=--i;”表示i值先减1,再赋值给x。149五、循环语句1. do-while语句do-while语句的一般格式如下。150此循环与while循环的区别在于:它先执行一次循环中的语句组,再判断表达式是否为真,如果为真,则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环体。do-while语句的执行过程如图所示。151do-while语句的执行过程2. for语句在C51语言中,for语句使用较为灵活,它最简单的格式如下。152for语句的执行过程如图所示,描述如下。153for语句的执行过程(1)执行“循环变量赋初始值”,一般为一个赋值表达式。(2)判断“循环条件”,若其值为真(非0),则先执行for语句中指定的内嵌语句组,再执行第(3)步;若其值为假(0),则执行第(5)步。(3)执行“修改循环变量”,定义每一次循环后变量如何变化。(4)转回第(2)步继续执行。(5)循环结束,执行for语句下面的语句。154六、C51程序的基本结构设计程序时,应先根据程序的功能要求选用不同的程序结构,然后绘制流程图,最后根据流程图编写程序。C51程序共有3种结构,即顺序结构、分支结构和循环结构,如图所示。155C51程序的结构a)顺序结构b)分支结构c)循环结构1. 顺序结构顺序结构是一种最简单、最基本的结构,它是一种无分支的程序结构,即按照程序编写的顺序依次执行每一条指令。2. 分支结构分支结构不是按顺序执行指令,它是先依据实际问题做出判断,再根据判断条件的满足与否,产生一个或多个程序分支,以实现不同的程序流向。3. 循环结构循环结构是依据需要对某一段程序重复执行多次,以缩短程序的长度,节省程序的存储空间。156七、延时程序设计在单片机程序设计中,单片机指令的执行时间是微秒级的,若让LED指示灯和数码管显示的状态能让人眼识别出来,就必须延时。在单片机控制系统中,延时程序是常用的程序之一,延时的控制方法有两种:软件延时和定时器延时,本任务主要介绍软件延时的方法。157软件延时的原理是利用CPU执行一段程序,只消耗CPU一定的时间,不做其他具体的功能控制,其主要设计思想是利用多次循环来延长程序的执行时间,从而实现延时功能。延时的时间=程序指令执行的总机器周期数×机器周期。若假设单片机外接石英晶振的频率为12MHz,则单片机一个机器周期为1μs。158for循环延时子函数时间示意图如图所示。159for循环延时子函数时间示意图流水灯显示设计任务31601.掌握位运算符的使用方法。2.掌握循环移位函数的使用方法。3.能设计流水灯显示电路。4.能编写流水灯显示程序并进行仿真测试。5.能与他人分析讨论,发现并解决程序编写和调试问题。161每当夜幕降临,道路上各式各样广告牌上漂亮的霓虹灯都会让人感到赏心悦目,为夜幕中的城市增添了一抹亮丽色彩,其实,这些霓虹灯的亮灭控制方式和流水灯是一样的,实际生活中的广告彩灯、装饰彩灯都是流水灯的典型应用。本任务要求用单片机控制8个LED以流水灯的方式按照排列顺序逐个点亮后熄灭,即先点亮VD1,延时0.5s后熄灭;再点亮VD2,延时0.5s后熄灭……直到VD8熄灭,再从头开始。162本任务可在单片机P2口外接8个LED,按照如图所示的示意图实现流水灯显示功能。163流水灯显示示意图如需让接在P2.0引脚上的LED(VD1)点亮,只要将P2.0引脚的电平设置为低电平即可;相反,如需让VD1熄灭,就将P2.0引脚的电平设置为高电平。同理,接在P2.1~P2.7引脚的其他7个LED的点亮和熄灭方法与VD1相同。只要依次让P2.0~P2.7引脚的电平变化,就可以控制8个LED从左到右依次点亮并熄灭,然后无限循环,从而实现流水灯的效果。为完成此任务,需要学习位运算符以及循环移位函数等基础知识。164165一、C51语言的位运算符C51语言直接用于MCS-51系列单片机硬件编程,通常要求程序对二进制数进行运算或处理,所以提供了强大、灵活的位运算功能。位运算符是指按变量的二进制位进行逻辑运算的运算符。C51语言提供的位运算符见下表。166C51语言提供的位运算符1. 按位取反运算符“~”按位取反运算符“~”为单目运算符,即它的操作数只有一个,其功能是对操作数按位取反。按位取反运算规则:~1=0,~0=1。1672. 按位左移运算符“<<”按位左移运算符“<<”用于将一个数的各位全部左移若干位,高位若干位移出,低位若干位补0。可以看出,temp的各位左移1位后,其值是原来的2倍。由此可见,数据左移n位相当于该数据乘以2n。1683. 按位右移运算符“>>”按位右移运算符“>>”用于将一个数的各位全部右移若干位,低位若干位移出,高位若干位补0。可以看出,右移和左移相似,只是移动的方向不同。数据右移1位相当于该数据除以2,右移n

位相当于该数据除以2n。1694. 按位逻辑与运算符“&”按位逻辑与运算符“&”用于将参加运算的2个数据按二进制位进行“与”运算。按位逻辑与运算规则:1&1=1,1&0=0,0&1=0,0&0=0。170在单片机的实际应用中,按位逻辑与运算符“&”经常用于实现一些特定的功能,示例如下。(1)位清0按位逻辑与运算符“&”常用于将变量中的某一位或某几位清0。171(2)位检测若想知道一个变量中某一位是“1”还是“0”,可以通过按位逻辑与运算符对该位进行检测。1725. 按位逻辑异或运算符“^”按位逻辑异或运算符“^”用于将参加运算的2个数据按二进制位进行“异或”运算。按位逻辑异或运算规则:1^1=0,1^0=1,0^1=1,0^0=0。2个数据相同为0,不同为1,即某一位与1异或就会被取反,与0异或就保持不变。1736. 按位逻辑或运算符“|”按位逻辑或运算符“|”用于将参加运算的2个数据按二进制位进行“或”运算。按位逻辑或运算规则:1|1=1,1|0=1,0|1=1,0|0=0。也就是说,某一位与1相或结果为1,与0相或就保持不变。174二、循环移位函数C51语言的编译器中包含丰富的库函数,使用库函数可以大大简化用户的程序设计,提高编程效率。库文件中有相应的头文件给出函数原型声明,在使用时,必须在源程序的开始处使用预处理命令“#include”将相关的头文件包含进来。在移位操作中,移位运算符“<<”和“>>”是先把相应的位数据移出,然后将移位操作后空出的位补0。有时,移位操作需要的是循环移位,即把前面移出的位数据补到后面空出的位中,而不是对后面空出的位补0,这时用循环移位函数就相对容易实现了。175循环移位函数原型声明在头文件intrins.h中,循环移位函数有循环左移函数“_crol_”和循环右移函数“_cror_”两种。循环左移函数“_crol_”是将移出的高位数据补到低位中;同理,循环右移函数“_cror_”是将移出的低位数据补到高位中,函数格式如下。176如图所示是循环左移函数“_crol_”移动1位数据的规律。177循环左移函数“_crol_”移动1位数据的规律如图所示是循环右移函数“_cror_”移动1位数据的规律。178循环右移函数“_cror_”移动1位数据的规律花样彩灯显示设计任务41791.掌握数组的定义和格式。2.掌握调用数组元素的方法。3.能设计花样彩灯显示电路。4.能编写花样彩灯显示程序并进行仿真测试。5.能与他人分析讨论,发现并解决程序编写和调试问题。180生活中,节日彩灯显示效果多种多样,如图所示,彩灯显示效果可以利用单片机的控制功能实现。181节日彩灯本任务要求用单片机控制8个LED构成的彩灯实现先双灯由两边向中间流动、再双灯由中间向两边流动的显示效果,每次双灯点亮0.5s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论