中职基于Proteus仿真的单片机技能应用(双色)proteus项目3教学课件 .ppt

上传人:春哥&#****71; 文档编号:90568883 上传时间:2023-05-15 格式:PPT 页数:38 大小:275KB
返回 下载 相关 举报
中职基于Proteus仿真的单片机技能应用(双色)proteus项目3教学课件 .ppt_第1页
第1页 / 共38页
中职基于Proteus仿真的单片机技能应用(双色)proteus项目3教学课件 .ppt_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《中职基于Proteus仿真的单片机技能应用(双色)proteus项目3教学课件 .ppt》由会员分享,可在线阅读,更多相关《中职基于Proteus仿真的单片机技能应用(双色)proteus项目3教学课件 .ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、中职基于Proteus仿真的单片机技能应用(双色)proteus项目3教学课件高教版项目三 MCS-51单片机及C语言程序设计基础知识一 MCS-51单片机基础一、一、MCS-51单片机单片机内部内部结结构及功能部件构及功能部件 MCS-51单片机的内部结构框如图单片机的内部结构框如图3-1所示。所示。CPU中央处理器时钟电路4KB程序存储器256B数据存储器2个16位定时器/计数器并行I/O接口P0P3全双工串行I/O接口中断系统内部总线XTAL1XTAL2T0T1P0P1P2P3TXD RXDINT0 INT1图图3-1 MCS51单片机内部结构方框图单片机内部结构方框图二、MCS-51单

2、片机存储器及存储空间1存储器的概念存储器的概念 什么是存什么是存储储器呢?打个比方来器呢?打个比方来说说:存:存储储器好比是一器好比是一栋栋楼,假如楼,假如这栋这栋楼共楼共有有256层,我们称存储器的空间是层,我们称存储器的空间是256个字节(个字节(Byte),又叫),又叫256个单元,表个单元,表示为示为256B;每个单元共有;每个单元共有8位(位(bit),相当于),相当于8个房间,每位(个房间,每位(bit)可以存)可以存放一位二进制数放一位二进制数“0”或或“1”,那么每个单元可以存放,那么每个单元可以存放8位二进制数。位二进制数。为为了了对对指定指定单单元存取数据,需要元存取数据,

3、需要给给每个每个单单元元编编号,号,这这个个编编号就是地址。号就是地址。在在计计算机中所有的算机中所有的编编号都是从号都是从0开始的,如果用十进制编址就是开始的,如果用十进制编址就是0、1、2、253、254、255层,如果用十六进制编址就是层,如果用十六进制编址就是00H、01H、02H、FDH、FEH、FFH,其中,其中H表示是十六进制数。如果存储器空间大表示是十六进制数。如果存储器空间大于于256B,则需要使用,则需要使用4位十六进制数进行编址,如位十六进制数进行编址,如0000H、0001H等等。等等。2MCS-51单片机存储器分类及配置 MCS-51单片机单片机51子系列(如子系列(

4、如AT89S51)内部有)内部有128B的数据存储器和的数据存储器和4KB的程序存储器,的程序存储器,52子系列(如子系列(如AT89S52)内部有)内部有256B的数据存储器和的数据存储器和8KB的程序存储器,片外可寻址空间均为的程序存储器,片外可寻址空间均为64KB。高128BSFR低128BRAM块00H7FH80HFFH外部64KB0000HFFFFH51子系列52子系列片外数据存储器片内数据存储器高128BRAM块低128BRAM块00H7FH80HFFH高128BSFR80HFFH数据存储器(RAM)当单片机的当单片机的EA(31脚)为高电平时,如果程序长度小于脚)为高电平时,如果

5、程序长度小于4KB,CPU执行内执行内部程序,如果程序长度大于部程序,如果程序长度大于4KB,CPU从内部的从内部的0000H开始执行程序然后自动开始执行程序然后自动转向外部转向外部ROM的的10000H开始的单元;当单片机的开始的单元;当单片机的EA(31脚)为低电平时,程脚)为低电平时,程序跳过内部,直接从外部序跳过内部,直接从外部ROM开始执行程序。开始执行程序。外部60KB内部4KB0000H0FFFH1000HFFFFH外部56KB内部8KB0000H1FFFH2000HFFFFH外部64KB0000HFFFFHEA=151子系列52子系列EA=0 MCS-51单片机程序存储器(单片

6、机程序存储器(ROM)空间结构如图)空间结构如图3-4所示。所示。3片内数据存储器(1)低)低128B的的RAM块块低低128单元的单元的RAM块是供用户使用的数据存储器单元,按用途可把低块是供用户使用的数据存储器单元,按用途可把低128单单元分为三个区域元分为三个区域。寄存器区寄存器区地址地址为为00H1FH的空间为寄存器区,共的空间为寄存器区,共32个单元,分成个单元,分成4个组,每个组个组,每个组8个单元,符号为个单元,符号为R0R7,通,通过过RS1位和位和RS0位的状态(在位的状态(在C51语言中使用关语言中使用关键字键字using)选定当前寄存器组,如图)选定当前寄存器组,如图3-

7、5中表格所示。任一中表格所示。任一时时刻,刻,CPU只能只能使用其中的一组寄存器。使用其中的一组寄存器。位位寻寻址区址区地址地址为为20H2FH的的16个单元空间称为位寻址区,这个区的单元既可以字个单元空间称为位寻址区,这个区的单元既可以字节操作,也可以对每节操作,也可以对每1位单独操作(置位单独操作(置“1”或清或清“0”),所以每一位都有自己的),所以每一位都有自己的位地址。在图位地址。在图3-5中表格中,比如中表格中,比如20H单元的第单元的第0位的位地址是位的位地址是00H,25H单元单元的第的第7位的位地址是位的位地址是2FH。用用户户RAM区区地址地址为为30H7FH的的80个单元

8、空间是供用户使用的一般个单元空间是供用户使用的一般RAM区,对于该区,区,对于该区,只能字节操作。只能字节操作。(2)高)高128B的特殊功能寄存器(的特殊功能寄存器(SFR)块)块内部数据存内部数据存储储器的高器的高128单元的地址为单元的地址为80HFFH,在这,在这128个单元中离散的个单元中离散的分布着若干个特殊功能寄存器(简称分布着若干个特殊功能寄存器(简称SFR),也就是说其中有很多地址是无),也就是说其中有很多地址是无效地址,空间是无效空间。效地址,空间是无效空间。4片内程序存储器片内程序存储器 程序存程序存储储器主要用来存放程序,但有器主要用来存放程序,但有时时也会在其中存放数

9、据表(如数也会在其中存放数据表(如数码码管段管段码码表等)。表等)。AT89S51芯片内有芯片内有4K的程序存储器单元,其地址为的程序存储器单元,其地址为0000H0FFFH。在。在程序存储器中地址为程序存储器中地址为0000H002AH的的43个单元在使用时是有特殊规定的。个单元在使用时是有特殊规定的。其中其中0000H0002H三个单元是系统的启动单元,三个单元是系统的启动单元,0000H称为复位入口地称为复位入口地址,也叫做主程序入口地址,对应址,也叫做主程序入口地址,对应main函数。系统复位后,单片机从函数。系统复位后,单片机从0000H单单元开始取指令执行程序。元开始取指令执行程序

10、。地址地址为为0003H002AH的的40个单元被均匀地分为五段,每段个单元被均匀地分为五段,每段8个单元,分别个单元,分别作为五个中断源的中断地址区。具体划分如表作为五个中断源的中断地址区。具体划分如表3-2所示。所示。知识知识二二 C51语语言言程序设计基础程序设计基础 C语言是美国贝尔实验室于语言是美国贝尔实验室于20世纪世纪70年代初研制出来的,后来又被多次改年代初研制出来的,后来又被多次改进,并出现了多种版本,但主要是应用在微机上,如进,并出现了多种版本,但主要是应用在微机上,如Microsoft C、Turbo C、Borland C等。人们在进行单片机开发时,为了提高编程效率也开

11、始使用针对等。人们在进行单片机开发时,为了提高编程效率也开始使用针对单片机的单片机的C语言,一般称为语言,一般称为C51语言,其编译的目标代码简洁且运行速度很高。语言,其编译的目标代码简洁且运行速度很高。一、一、C51语言在单片机系统开发中的语言在单片机系统开发中的优优势势C51语言同时具有汇编语言和高级语言的优点。语言同时具有汇编语言和高级语言的优点。语语言言简洁简洁、紧紧凑,更符合人凑,更符合人类类思思维习惯维习惯,开,开发发效率高、效率高、时间时间短。短。模模块块化开化开发发。运算符非常丰富。运算符非常丰富。提供数学函数并支持浮点运算。提供数学函数并支持浮点运算。使用范使用范围围广,可移

12、植性广,可移植性强强。可以直接可以直接对对硬件操作。硬件操作。程序可程序可读读性和可性和可维护维护性性强强。二、基本数据类型1位类型位类型bit Bit型型是是C51编译编译器的一种器的一种扩扩充数据充数据类类型,利用它可定型,利用它可定义义一个位一个位变变量,但量,但不能定不能定义义位指位指针针,也不能定,也不能定义义位数位数组组。它的。它的值值是一个是一个1位二位二进进制数,取制数,取值值0或或1。2字符型数据字符型数据char char类类型的型的长长度是一个字度是一个字节节(8位位),通常用于定),通常用于定义处义处理字符数据的理字符数据的变变量或常量。分无符号字符量或常量。分无符号字

13、符类类型型unsigned char和有符号字符和有符号字符类类型型signed char,默,默认值为认值为signed char类类型。型。unsigned char类类型用字型用字节节中所有的位来表示数中所有的位来表示数值值,所,所以可表达的数以可表达的数值值范范围围是是0255。signed char类类型用字型用字节节中最高位表示数据的符中最高位表示数据的符号,号,“0”表示正数,表示正数,“1”表示表示负负数,数,负负数用数用补码补码表示。所能表示的数表示。所能表示的数值值范范围围是是-128+127。unsigned char常用于常用于处处理理ASCII字符或用于字符或用于处处

14、理小于或等于理小于或等于255的的整数。整数。3整型数据整型数据int int型型长长度度为为两个字两个字节节(16位位),用于存放一个双字,用于存放一个双字节节数据。分有符号整型数据。分有符号整型数数signed int和无符号整型数和无符号整型数unsigned int,默,默认值为认值为signed int类类型。型。signed int表示的数表示的数值值范范围围是是-32768+32767,字,字节节中最高位表示数据的符号,中最高位表示数据的符号,“0”表示表示正数,正数,“1”表示表示负负数。数。unsigned int表示的数表示的数值值范范围围是是065535。4长整型数据长整

15、型数据long long型型长长度度为为四个字四个字节节(32位),用于存放一个四字位),用于存放一个四字节节数据。分有符号数据。分有符号长长整型整型signed long和无符号和无符号长长整型整型unsigned long,默,默认值为认值为signed long类类型。型。signed int表示的数表示的数值值范范围围是是-2147483648+2147483647,字,字节节中最高位表示中最高位表示数据的符号,数据的符号,“0”表示正数,表示正数,“1”表示表示负负数。数。unsigned long表示的数表示的数值值范范围围是是04294967295。5浮点型数据浮点型数据floa

16、t float型在十型在十进进制中具有制中具有7位有效数字,是符合位有效数字,是符合IEEE-754标标准的准的单单精度浮精度浮点型数据,占用四个字点型数据,占用四个字节节。因浮点数的。因浮点数的结结构构较较复复杂杂不再做不再做详细详细的的讨论讨论。6指针型指针型 *指指针针型本身就是一个型本身就是一个变变量,在量,在这这个个变变量中存放指向另一个数据的地址。量中存放指向另一个数据的地址。这这个指个指针变针变量要占据一定的内存量要占据一定的内存单单元,元,对对不同的不同的处处理器理器长长度也不尽相同,在度也不尽相同,在C51中它的中它的长长度一般度一般为为13个字个字节节。指。指针变针变量也具

17、有量也具有类类型,型,具体内容在下一具体内容在下一节节中做中做详细阐详细阐述。述。三、常量、变量和指针1常量常量 常量就是在程序运行常量就是在程序运行过过程中不能改程中不能改变值变值的量。常量的数据的量。常量的数据类类型只有位型只有位类类型、字符型、整型、浮点型、字符串型。型、字符型、整型、浮点型、字符串型。2变量变量 变变量是指在程序量是指在程序执执行行过过程中其程中其值值可以可以发发生生变变化的量。要在程序中使用化的量。要在程序中使用变变量,必量,必须须先声明先声明变变量名及其量名及其类类型,并指出所用存型,并指出所用存储储模式,模式,这样编译这样编译系系统统才才能能为变为变量分配相量分配

18、相应应的存的存储储空空间间。(1)变量的声明)变量的声明所有所有变变量在使用前都必量在使用前都必须须声明,一条声明,一条变变量声明量声明语语句可以声明一个或多个句可以声明一个或多个变变量。声明量。声明变变量的格式如下:量的格式如下:存储种类存储种类数据类型数据类型存储器类型存储器类型变量名表变量名表在定在定义义格式中除了数据格式中除了数据类类型和型和变变量名表是必要的,其它都是可量名表是必要的,其它都是可选项选项。例如:例如:unsigned char i,j,k;/声明无符号字符型变量声明无符号字符型变量i、j、ksigned int a=60;/声明有符号整型变量声明有符号整型变量a并赋值

19、并赋值 变变量被声明后,根据其声明量被声明后,根据其声明语语句所在的位置,它的作用范句所在的位置,它的作用范围围也随之确定。根也随之确定。根据据变变量声明量声明语语句所在位置的不同,句所在位置的不同,变变量可分量可分为为全局全局变变量和局部量和局部变变量。量。局部局部变变量:是在函数内部声明的量:是在函数内部声明的变变量,只在声明它的函数内部有效,量,只在声明它的函数内部有效,仅仅在使用在使用它它时时,才,才为为它分配内存它分配内存单单元。元。全局变量:是在所有函数的外部声明的变量,可以被任何声明它的语句之全局变量:是在所有函数的外部声明的变量,可以被任何声明它的语句之后函数使用,并且在整个程

20、序的运行中都保留其值。由于全局变量的作用范围是后函数使用,并且在整个程序的运行中都保留其值。由于全局变量的作用范围是从声明它的位置开始直到整个程序文件结束,所以一般应在程序的开始处声明全从声明它的位置开始直到整个程序文件结束,所以一般应在程序的开始处声明全局函数。主函数也是函数,所以在主函数中声明的变量也局部变量,作用范围只局函数。主函数也是函数,所以在主函数中声明的变量也局部变量,作用范围只在主函数内部。在主函数内部。(2)变量的作用范围)变量的作用范围3.3.数组数组 数数组组必必须须要先声明后使用。根据数要先声明后使用。根据数组组的下的下标标的个数不同,数的个数不同,数组组可分可分为为一

21、一维维数数组组和多和多维维数数组组。具有一个下具有一个下标标的数的数组组称称为为一一维维数数组组,声明一,声明一维维数数组组的一般格式如下:的一般格式如下:数据数据类类型型 存储类型存储类型 数组名数组名元素个数元素个数;/元素个数可以不写元素个数可以不写 其中数其中数组组名的命名名的命名规则规则和和变变量名相同,元素个数是一个常量,不能是量名相同,元素个数是一个常量,不能是变变量量或或变变量表达式。数量表达式。数组组声明后,数声明后,数组组元素可表示元素可表示为为:数:数组组名名下标下标。下标必须用。下标必须用方括号括起来,下标可以是整数或整型表达式。方括号括起来,下标可以是整数或整型表达式

22、。在声明数在声明数组时组时,可以不,可以不赋赋初初值值,也可以也可以给给部分或全部元素部分或全部元素赋赋初初值值,但如果定,但如果定义义成成ROM中的数组则必须赋初值。中的数组则必须赋初值。例如:例如:unsigned char a6;/有有6个元素的数组个元素的数组achar tab3=1,2,3;/声明数组声明数组tab并赋值:并赋值:tab0=1,tab1=2,tab2=3int shu10=1,2,3;/声明声明10个元素的数组个元素的数组shu并对前并对前3个元素赋值个元素赋值unsigned char code sky=0 x02,0 x34,0 x22,0 x32,0 x21,0

23、 x12;/数据保存在数据保存在code区区(1)一维数组一维数组 具有两个或两个以上的下具有两个或两个以上的下标标的的数的的数组组称称为为多多维维数数组组。我。我们们常用到的是常用到的是二二维维数数组组,声明二,声明二维维数数组组的一般格式如下:的一般格式如下:数据数据类类型型 存储类型存储类型 数组名数组名常量常量1常量常量2;/元素个数可以元素个数可以不写不写 在声明二在声明二维维数数组时组时,可以不,可以不赋赋初初值值,也可以,也可以给给部分或全部元素部分或全部元素赋赋初初值值,但如果定但如果定义义成成ROM中的数组则必须赋初值。例如:中的数组则必须赋初值。例如:unsigned ch

24、ar zimo45=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;/第一维下标范围为第一维下标范围为03,第二维下标为,第二维下标为04,共,共45个元素个元素(2)多维数组多维数组二二维维数数组组zimo的元素共有的元素共有4组,每组有组,每组有5个元素,第一维下标表示元个元素,第一维下标表示元素所在的组数,第二维下标表示该组中第几个元素。素所在的组数,第二维下标表示该组中第几个元素。4 4地址与指地址与指针针地址就是存地址就是存储储器中器中对对每个存每个存储单储单元的元的编编号号。(1)指针)指针 什么是指什么是指针针呢?当我呢?当我

25、们们在程序中声明了一个在程序中声明了一个变变量,量,编译编译器就会器就会给这给这个个变变量在内存中分配一个地址,通量在内存中分配一个地址,通过访问这过访问这个地址可以找到所需的个地址可以找到所需的变变量,量,这这个个变变量量的地址称的地址称为该变为该变量的指量的指针针。如。如图图3-7 7所示,地址所示,地址2000是变量是变量i的指针。的指针。图图3-6 6 变变量存放示意量存放示意图图 图图3-7 7 指指针针指向指向变变量地址量地址 如果一个如果一个变变量量专门专门用来存放其它用来存放其它变变量的地址,量的地址,则则称称该变该变量量为为指指针变针变量。量。图图3-7 7中的中的p就是一个

26、指针变量。指针变量在使用前也必须先声明,声明指针变量就是一个指针变量。指针变量在使用前也必须先声明,声明指针变量的一般格式如下:的一般格式如下:类类型型说说明明 *变量名变量名其中,其中,*表示这是一个指针变量,类型说明表示本指针变量所指向的变量的表示这是一个指针变量,类型说明表示本指针变量所指向的变量的数据类型。数据类型。(3)指针变量的赋值)指针变量的赋值指指针变针变量使用前不量使用前不仅仅要先声明,而且必要先声明,而且必须赋须赋具体的具体的值值,未,未经赋值经赋值的指的指针变针变量量不能使用。不能使用。给给指指针变针变量所量所赋赋的的值值与与给给其它其它变变量所量所赋赋的的值值不同,不同

27、,给给指指针变针变量的量的赋赋值值只能只能赋赋地址,而不能地址,而不能赋赋任何具体的数据或任何具体的数据或变变量的量的值值。那么怎么得到那么怎么得到变变量的地址呢?量的地址呢?C语言专门提供了地址运算符语言专门提供了地址运算符“&”来获取变量来获取变量的地址,其一般格式如下:的地址,其一般格式如下:&变量名变量名如如&a表示变量表示变量a的地址。给指针变量赋值的方法如下:的地址。给指针变量赋值的方法如下:(2)指针变量)指针变量unsigned int a;unsigned char b;unsigned int*p=&a;/声明指针变量的同时进行赋值声明指针变量的同时进行赋值unsigned

28、 char*q;/先声明指针变量先声明指针变量q=&b;/再赋值再赋值注意:注意:这这两种两种赋值语赋值语句之句之间间是有区是有区别别的,如果先声明指的,如果先声明指针变针变量后再量后再赋值时赋值时不要加不要加“*”号。号。项项目二的花目二的花样样广告灯程序,使用指广告灯程序,使用指针变针变量量实现实现的程序如下:的程序如下:#include/MCS-51系列单片机头文件系列单片机头文件unsigned char tab=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f,0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 x

29、fd,0 xfe,0 xff,0 x7e,0 xbd,0 xdb,0 xe7,0 xdb,0 xbd,0 x7e,0 xff;/声明数组声明数组tab并赋值(共并赋值(共25个元素)个元素)delay()/延时子函数延时子函数unsigned int i;for(i=0;i30000;i+);/用用for 语句实现语句实现30000次循环次循环int main(void)/主程序主程序main函数函数unsigned char*p;/声明指针变量声明指针变量punsigned char j;while(1)/在主程序中设置死循环程序在主程序中设置死循环程序p=&tab;/将数组变量将数组变量t

30、ab的首地址赋给指针变量的首地址赋给指针变量pfor(j=0;j大于大于其中其中、=、3;/结果为结果为010(3+6);/结果为结果为1=大于等于大于等于小于小于3;/结果为假结果为假3+5;/结果为真结果为真|逻辑逻辑或或!逻辑逻辑非非位运算符号位运算符号&按位与按位与两个字符或整数按位两个字符或整数按位进进行行逻逻辑辑与运算与运算0 x3a&0 x55;/结果为结果为0 x10|按位或按位或两个字符或整数按位两个字符或整数按位进进行行逻逻辑辑或运算或运算0 x3a|0 x55;/结果为结果为0 x7f按位异或按位异或两个字符或整数按位两个字符或整数按位进进行行逻逻辑辑异异或运算或运算0

31、x3a 0 x55;/结果为结果为0 x6f按位取反按位取反字符或整数按位字符或整数按位进进行行逻辑逻辑非非运算运算0 x55;/结果为结果为0 xaa右移右移字符或整数按位右移字符或整数按位右移0 x3a1;/结果为结果为0 x1d左移左移字符或整数按位左移字符或整数按位左移0 x3a1;/结果为结果为0 x74 赋值赋值符号前加上其它运算符构成复合运算符。符号前加上其它运算符构成复合运算符。C51提供十种复合运算符:提供十种复合运算符:+=、-=、*=、/=、%=、&=、|=、=、=。如。如:a+=b;/等价于等价于a=a+ba*=b;/等价于等价于a=a*ba=2;/等价于等价于a=(a

32、2)五、函数 C51语言就是由一个个的函数构成的,其从一个主函数开始执行,调用其语言就是由一个个的函数构成的,其从一个主函数开始执行,调用其它函数后返回主函数,进行相应的操作,主函数内部一般有一个死循环程序。它函数后返回主函数,进行相应的操作,主函数内部一般有一个死循环程序。1函数的分类函数的分类 C51语言函数从结构上可以分为主函数语言函数从结构上可以分为主函数main和普通函数,主函数是和普通函数,主函数是程序执行时首先进入的函数,它可以调用普通函数,而普通函数可以调用程序执行时首先进入的函数,它可以调用普通函数,而普通函数可以调用其它普通函数,不能调用主函数。其它普通函数,不能调用主函数

33、。普通函数又可分普通函数又可分为标为标准准库库函数和用函数和用户户自自定定义义函数两种。函数两种。标标准准库库函数是由函数是由C51编译器提供的函数,可以通过编译器提供的函数,可以通过#include 包含相应的头文件调用这些库函数。包含相应的头文件调用这些库函数。2函数的定义函数的定义从定从定义义的形式上,函数分的形式上,函数分为为无参数函数和有参数函数。无参数函数是无参数函数和有参数函数。无参数函数是为为了完成某种特定功能而了完成某种特定功能而编编写的,没有写的,没有输输入入变变量,可以使用全局量,可以使用全局变变量完成参量完成参数的数的传递传递;有参数函数在;有参数函数在调调用用时时必必

34、须须按照形式参数提供按照形式参数提供对应对应的的实际实际参数。参数。两种函数都可以提供返回两种函数都可以提供返回值值以供其它函数使用。以供其它函数使用。(1)函数定义的一般格式)函数定义的一般格式函数定函数定义义的一般格式如下:的一般格式如下:函数函数类类型型 函数名函数名(形式参数列表形式参数列表)函数体函数体其中函数其中函数类类型是函数返回型是函数返回值值的的类类型,如果没有返回型,如果没有返回值则值则使用使用void。函数。函数名由用户自定义,规则和变量的相同。形式参数是指调用函数时要传入到名由用户自定义,规则和变量的相同。形式参数是指调用函数时要传入到函数体内参与运算的变量,一个函数可

35、以有一个、多个或没有参数,当不函数体内参与运算的变量,一个函数可以有一个、多个或没有参数,当不需要参数也就是无参函数,括号内空为空或写入需要参数也就是无参函数,括号内空为空或写入“void”表示,但括号不能表示,但括号不能少,有多个参数时,每个参数要用少,有多个参数时,每个参数要用“,”号隔开。大括号中的语句块用于实现号隔开。大括号中的语句块用于实现函数的功能。不能在同一个程序中定义同名的函数。函数的功能。不能在同一个程序中定义同名的函数。(2)函数的参数)函数的参数 C51语言的函数采用参数传递方式,使一个函数可以对不同的变语言的函数采用参数传递方式,使一个函数可以对不同的变量数据进行功能相

36、同的处理,在调用函数时实际参数被传入到被调用函量数据进行功能相同的处理,在调用函数时实际参数被传入到被调用函数的形式参数中,在执行完函数后使用数的形式参数中,在执行完函数后使用return语句将一个和函数类型相语句将一个和函数类型相同的返回值返回给调用语句。同的返回值返回给调用语句。函数定函数定义义好以后,要被其它函数好以后,要被其它函数调调用才能被用才能被执执行。定行。定义义函数函数进进在函在函数名称后面的括号里列数名称后面的括号里列举举的的变变量名称量名称为为“形式参数形式参数”;调用函数时,函数;调用函数时,函数名称后面的括号里的变量称为名称后面的括号里的变量称为“实际参数实际参数”。例

37、如:在一个程序中我们需要例如:在一个程序中我们需要两个延时时间不同的延时程序,可以编写有参数的延时程序如下:两个延时时间不同的延时程序,可以编写有参数的延时程序如下:delay(unsigned int i)/这里这里i是形式参数是形式参数while(i-);int main()while(1)led=0;delay(25000);/25000是实际参数是实际参数led=1;delay(50000);/50000是实际参数是实际参数 函数的返回函数的返回值值是在函数是在函数执执行完成之后通行完成之后通过过return语句返回调用函数语句返回调用函数语句的一个值,返回值的类型和函数的类型相同,函

38、数的返回值只能通过语句的一个值,返回值的类型和函数的类型相同,函数的返回值只能通过return语句返回。语句返回。调调用求和子函数并返回用求和子函数并返回计计算算结结果的程序如下:果的程序如下:unsigned int sum(unsigned char i,unsigned char j)unsigned int temp;temp=i+j;return temp;int main()unsigned char a,b;unsigned int c;a=2;b=3;c=sum(a,b);(3 3)函数的返回值)函数的返回值函数函数调调用的一般格式如下用的一般格式如下:函数名函数名(实际参数列

39、表实际参数列表);由于函数有的有参数,有的无参数,有的有返回由于函数有的有参数,有的无参数,有的有返回值值,有的无返回,有的无返回值值,所以,所以在在调调用用时时也有多种形式,如:也有多种形式,如:delay();/无参数无返回值的函数调用无参数无返回值的函数调用c=sum(a,b);/函数的返回值赋给一个变量函数的返回值赋给一个变量d=sum(a,b)+c;/函数的返回值参与表达式的运算函数的返回值参与表达式的运算result=max(sum(a,b),sum(c,d);/函数的返回值作为另一个函数的实际参函数的返回值作为另一个函数的实际参数数3函数的调用函数的调用六六、语语句句 C语言是一

40、种结构化的程序设计语言,提供了相当丰富的程序控制语句。学语言是一种结构化的程序设计语言,提供了相当丰富的程序控制语句。学习掌握这些语句的用法也是习掌握这些语句的用法也是C语言学习中的重点。语言学习中的重点。1表达式语句表达式语句表达式表达式语语句是最基本的一种句是最基本的一种语语句。不同的程序句。不同的程序设计语设计语言都会有不一言都会有不一样样的表的表达式达式语语句,在句,在51单片机的单片机的C语言中加入分号语言中加入分号“;”构成表达式语句。举例如下:构成表达式语句。举例如下:b=b*10;i+;P1=a;P2=0 xfe;count=(a+b)/a-1;在在C语言中有一个特殊的表达式语

41、句,称为空语句,它仅仅是由一个分号语言中有一个特殊的表达式语句,称为空语句,它仅仅是由一个分号“;”组成。有时候为了使语法正确,那么就要求有一个语句,但这个语句又组成。有时候为了使语法正确,那么就要求有一个语句,但这个语句又没有实际的运行效果那么这时就要有一个空语句。比如没有实际的运行效果那么这时就要有一个空语句。比如while、for构成的循构成的循环语句后面加一个分号,形成一个不执行其它操作的空循环体。环语句后面加一个分号,形成一个不执行其它操作的空循环体。2复合语句复合语句在在C语言中括号的分工较为明确,语言中括号的分工较为明确,号是用于将若干条语句组合在一号是用于将若干条语句组合在一起

42、形成一种功能块,这种由若干条语句组合而成的语句就叫复合语句。起形成一种功能块,这种由若干条语句组合而成的语句就叫复合语句。复合语句之间用复合语句之间用分隔,而它内部的各条语句还是需要以分号分隔,而它内部的各条语句还是需要以分号“;”结束。结束。复合语句是允许嵌套的,也就是在复合语句是允许嵌套的,也就是在中的中的也是复合语句。也是复合语句。C语言提供了语言提供了3种形式的条件语句:种形式的条件语句:当条件表达式的当条件表达式的结结果果为为真真时时,就,就执执行行语语句,否句,否则则就跳就跳过过,语语法如法如下:下:if(条件表达式条件表达式)语语句句;当条件表达式成立当条件表达式成立时时,就,就

43、执执行行语语句句1,否则就执行语句,否则就执行语句2,语法如,语法如下:下:if(条件表达式条件表达式)语语句句1;else语语句句2;3条件语句条件语句 由由 if、else 组成的多分支条件语句,语法如下:组成的多分支条件语句,语法如下:if(条件表达式条件表达式1)语语句句1;else if(条件表达式条件表达式2)语语句句2;else if(条件表达式条件表达式3)语语句句3;else if(条件表达式条件表达式m)语语句句n;else语语句句m;如果使用条件如果使用条件语语句来句来编编写超写超过过3个以上的分支程序的话,会使程序变得不个以上的分支程序的话,会使程序变得不那么清晰易读那

44、么清晰易读。开关。开关语语句句既既可以可以实现处实现处理多分支理多分支选择选择的目的,又可以使程序的目的,又可以使程序结结构清晰。构清晰。4开关语句开关语句switch(表达式表达式)case 常量表达式常量表达式1:语句语句1;break;case 常量表达式常量表达式2:语句语句2;break;case 常量表达式常量表达式n:语句语句n;break;default:语句语句n+1;#includeint main(void)unsigned int i,j;while(1)switch(j)case 0:P2=0 xfe;break;case 1:P2=0 xfd;break;case

45、2:P2=0 xfb;break;case 3:P2=0 xf7;break;case 4:P2=0 xef;break;case 5:P2=0 xdf;break;case 6:P2=0 xbf;break;case 7:P2=0 x7f;break;for(i=0;i10000;i+);j=(j+1)%8;/j加加1后只取后只取j的低的低3位位项目二的流水灯程序,使用开关语句实现的程序如下:项目二的流水灯程序,使用开关语句实现的程序如下:循循环语环语句是几乎每个程序都会用到的,它的作用就是用来句是几乎每个程序都会用到的,它的作用就是用来实现实现需要反需要反复复进进行多次的操作。行多次的操作

46、。5循环语句循环语句 goto语句在很多高级语言中都会有,它是一个无条件的转移语句,只要执语句在很多高级语言中都会有,它是一个无条件的转移语句,只要执行到这个语句,程序就会跳转到行到这个语句,程序就会跳转到goto后的标号所在的程序段。它的语法如下:后的标号所在的程序段。它的语法如下:goto 语句标号语句标号;其中的其中的语语句句标标号号为为一个一个带带冒号的冒号的标识标识符。由符。由if和和goto构成循环延时程序如下:构成循环延时程序如下:delay()unsigned int a=0;loop:a+;/loop是标号,标号和语句用是标号,标号和语句用“:”隔开隔开if(a30000)g

47、oto loop;在循在循环语环语句句执执行行过过程中,如果需要在程中,如果需要在满满足循足循环环判定条件的情况下跳出判定条件的情况下跳出循循环环体,可以使用体,可以使用break、continue语句,如果在没有执行完子函数而需要语句,如果在没有执行完子函数而需要返回或需要返回给调用函数语句一个值时,使用返回或需要返回给调用函数语句一个值时,使用return语句。语句。6break语句、语句、continue语句和语句和return语句语句(1)break语句语句break语句用于从循环体中退出,然后执行循环语句之后的语句,不再进入语句用于从循环体中退出,然后执行循环语句之后的语句,不再进入

48、循环。循环。例:无符号字符型数例:无符号字符型数组组array有有100个数组元素,要求计算这个数组元素,要求计算这100个数的和,个数的和,保存在整型变量保存在整型变量sum中,当和超过中,当和超过3000时,不再计算,并记录参与计算的数时,不再计算,并记录参与计算的数的个数。的个数。unsigned char i;unsigned char j;/用于存放参与计算的数的个数用于存放参与计算的数的个数j=0sum=0;for(i=0;i3000)break;(2)continue语句语句continue语句用于退出当前循环,不再执行本轮循环,直接进入下一轮语句用于退出当前循环,不再执行本轮循

49、环,直接进入下一轮循环,直到判定条件不满足为止,和循环,直到判定条件不满足为止,和break语句的区别是该语句不是退出语句的区别是该语句不是退出整个循环。整个循环。例:无符号字符型数例:无符号字符型数组组array有有100个数组元素,要求计算这个数组元素,要求计算这100个数的个数的和,保存在整型变量和,保存在整型变量sum中,其中大于中,其中大于99的数不参与计算,并记录参与计的数不参与计算,并记录参与计算的数的个数。算的数的个数。unsigned char i;unsigned char j;/用于存放参与计算的数的个数用于存放参与计算的数的个数j=0;sum=0;for(i=0;i99)continue;j+;sum=sum+array(i);(3)return语句语句return语句主要用于子函数没有执行完而需要返回的情况,或者语句主要用于子函数没有执行完而需要返回的情况,或者需要返回给调用函数语句一个返回值时。需要返回给调用函数语句一个返回值时。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁