第3章 单片机并行IO端口应用.ppt

上传人:hyn****60 文档编号:87235553 上传时间:2023-04-16 格式:PPT 页数:103 大小:3.07MB
返回 下载 相关 举报
第3章 单片机并行IO端口应用.ppt_第1页
第1页 / 共103页
第3章 单片机并行IO端口应用.ppt_第2页
第2页 / 共103页
点击查看更多>>
资源描述

《第3章 单片机并行IO端口应用.ppt》由会员分享,可在线阅读,更多相关《第3章 单片机并行IO端口应用.ppt(103页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 本章内容本章内容任务四任务四 彩灯多方式控制彩灯多方式控制 3.1 3.1 并行并行I/OI/O端口电路结构端口电路结构3.2 3.2 认识认识C C语言语言3.3 C3.3 C语言的基本语句语言的基本语句任务五任务五 流水灯控制流水灯控制3.4 C3.4 C语言数据与运算语言数据与运算3.5 3.5 数组的概念数组的概念任务六任务六 简易密码锁设计简易密码锁设计 第第3 3章章 单片机并行单片机并行I/OI/O口应用口应用任务四任务四 彩灯多方式控制彩灯多方式控制l/程序:程序:ex3_1.cl/功能:控制八个信号灯闪烁程序功能:控制八个信号灯闪烁程序l#include/包含头文件包含头文

2、件REG51.H,定义了,定义了MCS-51单片机的单片机的特殊功能寄存器特殊功能寄存器lvoid delay(unsigned char i);/延时函数声明延时函数声明lvoid main()/主函数主函数ll while(1)l P1=0 x00;/将将P1口的八位引脚清口的八位引脚清0,点亮八个,点亮八个LEDl delay(200);/延时延时l P1=0 xff;/将将P1口的八位引脚置口的八位引脚置1,熄灭八个,熄灭八个LEDl delay(200);/延时延时l ll/函数名:函数名:delayl/函数功能:实现软件延时函数功能:实现软件延时l/形式参数:形式参数:unsign

3、ed char i;l/i控制空循环的外循环次数,共循环控制空循环的外循环次数,共循环i*255次次l/返回值:无返回值:无lvoid delay(unsigned char i)/延时函数,无符号字符型变量延时函数,无符号字符型变量i为形式参数为形式参数ll unsigned char j,k;/定义无符号字符型变量定义无符号字符型变量j和和kl for(k=0;ki;k+)/双重双重for循环语句实现软件延时循环语句实现软件延时l for(j=0;j255;j+);l3.13.1并行并行I/OI/O口电路结构口电路结构 MCS-51系列单片机共有四个8位并行I/O口,分别用P0、P1、P2

4、、P3表示。每个I/O口既可以按位操作使用单个引脚,也可以按字节操作使用8个引脚。一、一、P0P0口的结构口的结构 输出控制电路输出驱动电路P0口逻辑电路51单片机的P1 P2 P3 口为准双向口,输出高电平是由内部开关管与地断开,上拉到高电平,如果内部的开关管与地是通的,那么输出的是低电平“0”,这样你怎么读端口都会一直是低电平,所以要先写个“1”,就是让它输出高电平,这样内部开关管就与地断开了,读到的电平就是外部的电平了。(1)(1)当当P0P0口作为输出口使用时,口作为输出口使用时,内部总线将数据送入锁存器,内部总线将数据送入锁存器,。经过锁存器,。经过锁存器,T2T2反相后正好反相后正

5、好是内部总线的数据,送到是内部总线的数据,送到P0P0口口引脚输出。引脚输出。(2)(2)作输入端口使用,作输入端口使用,分为读端口和读引脚分为读端口和读引脚当P0口作为输入口使用时,应区分读引脚和读端口两种情况,所谓读引脚,就是读芯片引脚的状态,这时使用下方的数据缓冲器,由“读引脚”信号把缓冲器打开,把端口引脚上的数据从缓冲器通过内部总线读进来。读端口是指通过上面的缓冲器读锁存器Q端的状态。读端口是为了适应对I/O口进行“读-修改-写”操作语句的需要。例如下面的C51语句:P0=P0&0 xf0;/将P0口的低4位引脚清0输出P0口的结构口的结构 除了I/O功能以外,在进行单片机系统扩展时,

6、P0口是作为单片机系统的地址/数据线使用的,一般称为地址/数据分时复用引脚。当输出地址或数据时,由内部发出控制信号,使“控制”端为高电平,打开与门,并使多路开关MUX处于内部地址/数据线与驱动场效应管栅极反相接通状态。此时,输出驱动电路由于两个FET处于反相,形成推拉式电路结构,使负载能力大为提高。输入数据时,数据信号直接从引脚通过输入缓冲器进入内部总线。P0口的结构口的结构 pP0口作为一般I/O口输出口使用时,由于T1截止,输出电路是漏极开路,需再外接上拉电阻才有高电平输出。pP0口作为输入口使用时,应区分读引脚和读端口。读引脚时,必须先向电路中的锁存器写入“1”,使输出级的FET截止引脚

7、处于高阻态,以避免锁存器状态为“0”时对引脚读入的干扰。P0口应用注意事项口应用注意事项 二、二、P1P1口的结构口的结构 P1口逻辑电路pP1口是准双向口,只能作为通用I/O口使用。pP1口作为输出口使用时,无需再外接上拉电阻。pP1口作为输入口使用时,应区分读引脚和读端口。读引脚时,必须先向电路中的锁存器写入“1”,使输出级的FET截止。P1口应用注意口应用注意 三、三、P2P2口的结构口的结构 P2口逻辑电路pP2口是准双向口,在实际应用中,可以用于为系统提供高8位地址,也能作为通用I/O口使用。pP2口作为通用I/O口的输出口使用时,与P1口一样无需再外接上拉电阻。pP2口作为通用I/

8、O口的输入口使用时,应区分读引脚和读端口。读引脚时,必须先向锁存器写入“1”。P2口应用注意口应用注意 四、四、P3P3口的结构口的结构 P3口逻辑电路pP3口是准双向口,可以作为通用I/O口使用,还可以作为第二功能使用。作为第二功能使用的端口,不能同时当作通用I/O口使用,但其他未被使用的端口仍可作为通用I/O口使用。pP3口作为通用I/O的输出口使用时,不用外接上拉电阻。P3口应用注意口应用注意 1.21.2认识认识C C语言语言 C语言程序以函数形式组织程序结构,C程序中的函数与其他语言中所描述的“子程序”或“过程”的概念是一样的。C程序基本结构一、认识一、认识C C语言语言p一个C语言

9、源程序是由一个或若干个函数组成,每一个函数完成相对独立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列顺序如何,最后在主函数中结束整个程序。pC语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。pC语言程序使用“;”作为语句的结束符,一条语句可以多行书写,也可以一行书写多条语句。一、认识一、认识C C语言语言p结构化语言p丰富的数据类型p便于维护管理p与汇编语言相比,C语言的优点如下:不要求编程者详细了解单片机的指令系统,但需了解单片机的存储器结构;寄存器分配、不同存储器的寻址及数据类型等细

10、节可由编译器管理;结构清晰,程序可读性强;编译器提供了很多标准库函数,具有较强的数据处理能力。3.3 C3.3 C语言的基本语句语言的基本语句语言程序的执行部分由语句组成。C语言提供了丰富的程序控制语句,按照结构化程序设计的基本结构:顺序结构、选择结构和循环结构,组成各种复杂程序。这些语句主要包括表达式语句、复合语句、选择语句和循环语句等。一、表达式语句和复合语句一、表达式语句和复合语句 p表达式语句是最基本的C语言语句。表达式语句由表达式加上分号“;”组成,其一般形式如下:表达式;表达式;执行表达式语句就是计算表达式的值。p在 C 语言中有一个特殊的表达式语句,称为空语句。空语句中只有一个分

11、号“;”,程序执行空语句时需要占用一条指令的执行时间,但是什么也不做。在C51程序中常常把空语句作为循环体,用于消耗CPU时间等待事件发生的场合。pFor(i=0;i100;i+);一、表达式语句和复合语句一、表达式语句和复合语句 p把多个语句用大括号括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合而成的语句块称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。p复合语句在程序运行时,中的各行单语句是依次顺序执行的。在C语言的函数中,函数体就是一个复合语句。lvoid main()/主函数主函数ll bit left,right;/定义位变量定义位变量left、ri

12、ght表示左、右状态表示左、右状态l while(1)/while循环语句,由于条件一直为真,该语句循环语句,由于条件一直为真,该语句为无限循环为无限循环l left=P3_0;/读取读取P3.0引脚的(左转向灯)状态并赋值给引脚的(左转向灯)状态并赋值给leftl right=P3_1;/读取读取P3.1引脚的(右转向灯)状态并赋值给引脚的(右转向灯)状态并赋值给rightl P1_0=left;/将将left的值送至的值送至P1.0引脚引脚l P1_1=right;/将将right的值送至的值送至P1.1引脚引脚l delay(200);/调用延时函数,实际参数为调用延时函数,实际参数为2

13、00l P1_0=1;/将将P1.0引脚置引脚置1输出输出(熄灭熄灭LED)l P1_1=1;/将将P1.1引脚置引脚置1输出输出(熄灭熄灭LED)l delay(200);/调用延时函数,实际参数为调用延时函数,实际参数为200l l 二、选择语句二、选择语句 基本if语句的格式如下:if(表达式)语句组;if语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组”,否则跳过该语句组,继续执行下面的语句。二、选择语句二、选择语句 pif语句中的“表达式”通常为逻辑表达式或关系表达式,也可以是任何其他的表达式或类型数据,只要表达式的值非0即为“真”。以下语句都是合法的:if(3)if(

14、x=8)if(P3_0)p在if语句中,“表达式”必须用括号括起来。p在if语句中,花括号“”里面的语句组如果只有一条语句,可以省略花括号。如“if(P3_0=0)P1_0=0;”语句,但是为了提高程序的可读性和防止程序书写错误,建议读者在任何情况下,都加上花括号。l/程序:程序:ex3_3.cl/功能:采用功能:采用if语句实现的模拟汽车转向灯控制程序语句实现的模拟汽车转向灯控制程序l#include lsbit P1_0=P10;/定义定义P1.0引脚位名称为引脚位名称为P1_0lsbit P1_1=P11;/定义定义P1.1引脚位名称为引脚位名称为P1_1lsbit P3_0=P30;/

15、定义定义P3.0引脚位名称为引脚位名称为P3_0lsbit P3_1=P31;/定义定义P3.1引脚位名称为引脚位名称为P3_1lvoid delay(unsigned char i);/延时函数声明延时函数声明lvoid main()/主函数主函数ll while(1)/while循环循环l if(P3_0=0)P1_0=0;/如果如果P3.0(左转向灯)状态为(左转向灯)状态为0,则点亮左转灯,则点亮左转灯l if(P3_1=0)P1_1=0;/如果如果P3.1(右转向灯)状态为(右转向灯)状态为1,则点亮右转灯,则点亮右转灯l delay(200);/延时延时l P1_0=1;/左转灯回

16、到熄灭状态左转灯回到熄灭状态l P1_1=1;/右转灯回到熄灭状态右转灯回到熄灭状态l delay(200);/延时延时l ll/函数名:函数名:delayl/函数功能:实现软件延时函数功能:实现软件延时l/形式参数:形式参数:unsigned char i;l/i控制空循环的外循环次数,共循环控制空循环的外循环次数,共循环i*255次次l/返回值:无返回值:无lvoid delay(unsigned char i)/延时函数,无符号字符型变量延时函数,无符号字符型变量i为形式参数为形式参数ll unsigned char j,k;/定义无符号字符型变量定义无符号字符型变量j和和kl for(

17、k=0;ki;k+)/双重双重for循环语句实现软件延时循环语句实现软件延时l for(j=0;j255;j+);l二、选择语句二、选择语句 if-else语句的一般格式如下:if(表达式)语句组1;else 语句组2;if-else语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组1”,否则执行“语句组2”二、选择语句二、选择语句 if-else-if语句是由 if else 语句组成的嵌套,用来实现多个条件分支的选择,其一般格式如下:if(表达式1)语句组1;else if(表达式2)语句组2;else if(表达式n)语句组n;else 语句组n+1;l/程序:ex3_4.c

18、l/功能:采用功能:采用if-else-if语句实现的模拟汽车转向灯控制程序语句实现的模拟汽车转向灯控制程序l#include/包含头文件包含头文件REG51.H lsbit P1_0=P10;/定义定义P1.0引脚位名称为引脚位名称为P1_0lsbit P1_1=P11;/定义定义P1.1引脚位名称为引脚位名称为P1_1lsbit P3_0=P30;/定义定义P3.0引脚位名称为引脚位名称为P3_0lsbit P3_1=P31;/定义定义P3.1引脚位名称为引脚位名称为P3_1lvoid delay(unsigned char i);/延时函数声明延时函数声明lvoid main()/主函数

19、主函数ll while(1)/while循环循环l if(P3_0=0&P3_1=0)/如果如果P3.0和和P3.1状态都为状态都为0l P1_0=0;/则点亮左转灯和右转灯则点亮左转灯和右转灯l P1_1=0;l delay(200);l l else if(P3_0=0)/如果如果P3.0(左转向灯)状态为(左转向灯)状态为1l P1_0=0;/则点亮左转灯则点亮左转灯l delay(200);l l else if(P3_1=0)/如果如果P3.1(右转向灯)状态为(右转向灯)状态为1l P1_1=0;/则点亮右转灯则点亮右转灯l delay(200);l l else l l ;/空语

20、句空语句l l P1_0=1;/左转灯回到熄灭状态左转灯回到熄灭状态l P1_1=1;/右转灯回到熄灭状态右转灯回到熄灭状态l delay(200);l ll/函数名:函数名:delayl/函数功能:实现软件延时函数功能:实现软件延时l/形式参数:形式参数:unsigned char i;l/i控制空循环的外循环次数,共循环控制空循环的外循环次数,共循环i*255次次l/返回值:无返回值:无lvoid delay(unsigned char i)/延时函数,无符号字符型变延时函数,无符号字符型变量量i为形式参数为形式参数ll unsigned char j,k;/定义无符号字符型变量定义无符号

21、字符型变量j和和kl for(k=0;ki;k+)/双重双重for循环语句实现软件延时循环语句实现软件延时l for(j=0;j255;j+);l二、选择语句二、选择语句(switch)二、选择语句二、选择语句多分支选择的switch语句,其一般形式如下:switch(表达式)case常量表达式1:语句组1;break;case常量表达式2:语句组2;break;case常量表达式n:语句组n;break;default :语句组n+1;该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应该常量表达式后的语句组,再

22、执行break语句,跳出switch语句的执行,继续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同,则执行default后的语句组。l/程序:程序:ex3_5.cl/功能:采用功能:采用switch语句实现的模拟汽车转向灯控制程序语句实现的模拟汽车转向灯控制程序l#include/包含头文件包含头文件REG51.H lsbit P1_0=P10;lsbit P1_1=P11;lvoid delay(unsigned char i);/延时函数声明延时函数声明lvoid main()/主函数主函数l l unsigned char ledctr;/定义转向灯控制变量定义转向灯

23、控制变量ledctrl P3=0 xff;/P3口作为输入口,必须先置全口作为输入口,必须先置全1l while(1)l ledctr=P3;/读读P3口的状态送到口的状态送到ledctrl ledctr=ledctr&0 x03;/与操作,屏蔽掉高与操作,屏蔽掉高6位无关位,取出位无关位,取出P3.0和和P3.1引脚的状态(引脚的状态(0 x03即二进制数即二进制数00000011B)l switch(ledctr)l l case 0:P1_0=1;P1_1=0;break;/如如P3.0、P3.1都为都为0则点亮左、右灯则点亮左、右灯l case 1:P1_1=0;break;/如果如果

24、P3.1(右转向灯)为(右转向灯)为0则点亮右灯则点亮右灯l case 2:P1_0=0;break;/如果如果P3.0(左转向灯)为(左转向灯)为0则点亮左灯则点亮左灯ldefault:;/空语句,什么都不做空语句,什么都不做l l delay(200);/延时延时l P1_0=1;/左转灯回到熄灭状态左转灯回到熄灭状态l P1_1=1;/右转灯回到熄灭状态右转灯回到熄灭状态l delay(200);/延时延时l ll/函数名:函数名:delayl/函数功能:实现软件延时函数功能:实现软件延时l/形式参数:形式参数:unsigned char i;l/i控制空循环的外循环次数,共循环控制空循

25、环的外循环次数,共循环i*255次次l/返回值:无返回值:无lvoid delay(unsigned char i)/延时函数,无符号字符型变延时函数,无符号字符型变量量i为形式参数为形式参数ll unsigned char j,k;/定义无符号字符型变量定义无符号字符型变量j和和kl for(k=0;ki;k+)/双重双重for循环语句实现软件延时循环语句实现软件延时l for(j=0;j255;j+);lwhilewhile语句用来实现语句用来实现“当型当型”循环,循环,执行过程:首先判断表达式,执行过程:首先判断表达式,当表达式的值为真(非当表达式的值为真(非0 0)时,)时,反复执行循

26、环体。为假(反复执行循环体。为假(0 0)时)时执行循环体外面的语句。执行循环体外面的语句。循环体循环体循环继续的条循环继续的条件表达式件表达式下一条语句下一条语句非非0(真)(真)0(假)假)循环体语句组循环体语句组while执行过程执行过程格式:格式:while(循环继续的条件表达式)循环继续的条件表达式)语句组语句组;花括号不花括号不能丢掉!能丢掉!请问:下述程序实现了什么功能?请问:下述程序实现了什么功能?main()main()intint i,sum=0;i,sum=0;while(i=10)while(i=10)sum=sum+i;sum=sum+i;i+;i+;三、循环语句三、

27、循环语句 do-while语句用来实现语句用来实现“直到型直到型”循环循环执行过程:先无条件执行一次循环体,执行过程:先无条件执行一次循环体,然后判断条件表达式,当表达式的值然后判断条件表达式,当表达式的值为真(非为真(非0)时,返回执行循环体直)时,返回执行循环体直到条件表达式为假(到条件表达式为假(0)为止。)为止。绝对不能少分号!绝对不能少分号!循环体循环体格式:格式:dodo 循环体语句组;循环体语句组;while(while(循环继续条件循环继续条件);花括号不花括号不能丢掉!能丢掉!循环继续的条循环继续的条件表达式件表达式下一条语句下一条语句非非0(真)(真)0(假)假)循环体语句

28、组循环体语句组请问:下述程序实现了什么功能?请问:下述程序实现了什么功能?main()main()intint i,sum=0;i,sum=0;do do sum=sum+i;sum=sum+i;i+;i+;while(i=100);while(i=100);三、循环语句三、循环语句 总循环次数已确定总循环次数已确定的情况下,的情况下,可采用可采用forfor语句形式为:语句形式为:forfor语句的一般形式:语句的一般形式:for(for(循环变量赋初值循环变量赋初值;循环继续条件循环继续条件;循环变量增循环变量增值值 )循环体语句组;循环体语句组;分隔符分隔符为分号为分号请问:下述程序实现

29、了什么功能?请问:下述程序实现了什么功能?main()main()intint i,y=0;i,y=0;for(i=1;i=10;i+)for(i=1;i10)break;lsum=sum+i;lll通过通过break退出整个循环结构,但对退出整个循环结构,但对if else条件语句条件语句不起作用,在循环嵌套中只能向外跳一层。不起作用,在循环嵌套中只能向外跳一层。Continue语句l求出求出1-20之间不能被之间不能被5整除的整数之和。整除的整数之和。lmain()l int i,sum=0;lfor(i=1;i=20;i+)lif(i%5=0)continue;/i除除5取余;即取余;即

30、i能被能被5整除,整除,l /则跳过下面的求和语句则跳过下面的求和语句.lsum=sum+i;/i不能被不能被5整除,就求和整除,就求和lllContinue停止当前循环体的执行,跳过循环体中余下语句,再次停止当前循环体的执行,跳过循环体中余下语句,再次进入循环条件判断,准备继续开始下一次循环体的执行。进入循环条件判断,准备继续开始下一次循环体的执行。任务五任务五 流水灯控制流水灯控制l/程序:程序:ex3_6.cl/功能:采用顺序结构实现的流水灯控制程序功能:采用顺序结构实现的流水灯控制程序l#include lvoid delay(unsigned char i);/延时函数声明延时函数声

31、明lvoid main()/主函数主函数ll while(1)l P1=0 xfe;/点亮第点亮第1个发光二极管个发光二极管l delay(200);/延时延时l P1=0 xfd;/点亮第点亮第2个发光二极管个发光二极管l delay(200);/延时延时l P1=0 xfb;/点亮第点亮第3个发光二极管个发光二极管l delay(200);/延时延时l P1=0 xf7;/点亮第点亮第4个发光二极管个发光二极管l delay(200);/延时延时l P1=0 xef;/点亮第点亮第5个发光二极管个发光二极管l delay(200);/延时延时l P1=0 xdf;/点亮第点亮第6个发光二极

32、管个发光二极管l delay(200);/延时延时l P1=0 xbf;/点亮第点亮第7个发光二极管个发光二极管l delay(200);/延时延时l P1=0 x7f;/点亮第点亮第8个发光二极管个发光二极管l delay(200);/延时延时l ll/函数名:函数名:delayl/函数功能:实现软件延时函数功能:实现软件延时l/形式参数:形式参数:unsigned char i;l/i控制空循环的外循环次数,共循环控制空循环的外循环次数,共循环i*255次次l/返回值:无返回值:无lvoid delay(unsigned char i)/延时函数,无符号字符型变延时函数,无符号字符型变量量

33、i为形式参数为形式参数ll unsigned char j,k;/定义无符号字符型变量定义无符号字符型变量j和和kl for(k=0;ki;k+)/双重双重for循环语句实现软件延时循环语句实现软件延时l for(j=0;j255;j+);ll/程序:ex3_7.cl/功能:采用循环结构实现的流水灯控制程序功能:采用循环结构实现的流水灯控制程序l#include/包含头文件包含头文件REG51.H lvoid delay(unsigned char i);/延时函数声明延时函数声明lvoid main()/主函数主函数ll unsigned char i,w;l while(1)l w=0 x

34、01;/信号灯显示字初值为信号灯显示字初值为01Hl for(i=0;i8;i+)l l P1=w;/显示字取反后,送显示字取反后,送P1口口l delay(200);/延时延时l w=1;/显示字左移一位显示字左移一位 l l ll/函数名:函数名:delayl/函数功能:实现软件延时函数功能:实现软件延时l/形式参数:形式参数:unsigned char i;l/i控制空循环的外循环次数,共循环控制空循环的外循环次数,共循环i*255次次l/返回值:无返回值:无lvoid delay(unsigned char i)/延时函数,无符号字符型变量延时函数,无符号字符型变量i为形式参数为形式参

35、数ll unsigned char j,k;/定义无符号字符型变量定义无符号字符型变量j和和kl for(k=0;ki;k+)/双重双重for循环语句实现软件延时循环语句实现软件延时l for(j=0;j255;j+);l分隔符分隔符为分号为分号3.4 C语言数据与运算语言数据与运算 l1.赋值运算符赋值运算符l2.算术运算符和算术表达式算术运算符和算术表达式 l3.关系运算符和关系表达关系运算符和关系表达l4.逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式l5.位运算位运算l6.数据类型数据类型1、赋值运算符、赋值运算符l 赋值语句的作用是把某个常量或变量或赋值语句的作用是把某个常量或变量或表

36、达式的值赋值给另一个变量。表达式的值赋值给另一个变量。l符号为符号为=。这里并不是等于的意思,。这里并不是等于的意思,只是赋值,等于用只是赋值,等于用=表示。表示。l赋值语句左边必须是赋值语句左边必须是变量或寄存器变量或寄存器,且,且必须必须先定义先定义。l常量不能出现左边。常量不能出现左边。1、赋值运算符和赋值表达式、赋值运算符和赋值表达式简单的赋值运算符:简单的赋值运算符:复合的赋值运算符复合的赋值运算符=+=、-=、*=、%=、/=i+=2 等价于等价于 i=i+2 a*=b+5 等价于等价于 a=a*(b+5)x%=3 等价于等价于 x=x%32、算术运算符、算术运算符(加法运算)(加

37、法运算)(减法运算)(减法运算)*(乘法运算符)(乘法运算符)(除法运算符)(除法运算符)%(求余运算符,或称模运算符)如:(求余运算符,或称模运算符)如:4%24%20 0+(+(变量自加变量自加1)1)-(变量自减(变量自减1 1)注注 意意p两个两个整数整数相除结果为相除结果为整数整数,如,如8/5的结果为的结果为1,舍去小数部分。,舍去小数部分。如果参加运算的两个数中有一个数为如果参加运算的两个数中有一个数为实数实数,则结果是,则结果是实型实型。p求余运算要求求余运算要求%两侧都是两侧都是整型数据整型数据。自增、自减运算实战演练:请说明程序运行完后实战演练:请说明程序运行完后x,y,z

38、,m,nx,y,z,m,n的值分别是多的值分别是多少?少?main()main()intint x=6,y,z,m,n;x=6,y,z,m,n;y=+x;y=+x;z=x-;z=x-;m=m=y/zy/z;n=n=y%zy%z;自增运算符(自增运算符(+)和自减运算符()和自减运算符(-):):(1 1)前置运算前置运算变量、变量变量、变量 即先增减、后运算。即先增减、后运算。(2 2)后置运算后置运算变量、变量变量、变量 即先运算、后增减。即先运算、后增减。3、关系运算符、关系运算符关系运算符 优先级 =!=低低高高关系表达式关系表达式p 用用关系运算符关系运算符将两个表达式(可以是算术表达

39、将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为连接起来的式子,称为关系表达式关系表达式。p关系表达式的值为关系表达式的值为逻辑值逻辑值“真真”或或“假假”,以,以1代表代表“真真”,以,以0代表代表“假假”。例如:例如:(1)关系表达式关系表达式“8=4”的值为的值为 。(2)关系表达式关系表达式“50”的值为的值为 。4、逻辑运算符及其优先级、逻辑运算符及其优先级 逻辑运算符逻辑运算符 优先级优先级 !(逻辑非逻辑非)&(逻辑与逻辑与)|(逻辑或逻辑或)注意:逻辑运算符与位操作运算符的区别。注意:逻辑运算符与位操

40、作运算符的区别。逻辑表达式逻辑表达式p用用逻逻辑辑运运算算符符将将一一个个或或多多个个表表达达式式连连接接起起来来,进行逻辑运算的式子。进行逻辑运算的式子。p逻辑量的真判断逻辑量的真判断非非0p逻辑量的假判断逻辑量的假判断0 若若a=1,b=2,c=3,x=4,y=3,写出下各个表达式的值:写出下各个表达式的值:(1)a+bc&b=c(2)!ab&b!=c|x+y=3(3)!(x=a)&(y=b)&0010运算类型运算类型运算符运算符优先级优先级结合性结合性括号运算符括号运算符()()1 1从左至右从左至右逻辑非和按位取反逻辑非和按位取反!2 2从右至左从右至左算术运算算术运算*/%/%3 3

41、从左至右从左至右+-+-4 4从左至右从左至右左移、右移运算左移、右移运算5 5从左至右从左至右关系运算关系运算 =6 6从左至右从左至右=!=!=7 7从左至右从左至右位运算位运算&8 8从左至右从左至右 9 9从左至右从左至右|1010从左至右从左至右逻辑与逻辑与&1111从左至右从左至右逻辑或逻辑或|1212从左至右从左至右赋值运算与复合赋赋值运算与复合赋值运算值运算=、*=、/=/=、&=&=、=、|=|=、=1414从右至左从右至左例如:例如:(1)xy&mn 等效于等效于 (xy)&(mc 等效于等效于(!a)&(bc)5、位运算、位运算与操作与操作按位与操作符按位与操作符:&p格

42、式:格式:x&yp规则:对应位均为规则:对应位均为1时才为时才为1,否则为,否则为0 例如,例如,i=i&0 x0f;等同于等同于 i&=0 x0f;p主要用途:取主要用途:取(或保留或保留)1个数的某个数的某(些些)位,其余各位,其余各位置位置0。5、位运算、位运算或操作或操作按位或操作符按位或操作符:|p格式:格式:x|yp规则:对应位均为规则:对应位均为0时才为时才为0,否则为,否则为1 例如,例如,i=i|0 x0f;等同于等同于 i|=0 x0f;p主要用途:将主要用途:将1个数的某个数的某(些些)位置位置1,其余各位不变,其余各位不变5、位运算、位运算异或操作异或操作按位异或操作符

43、按位异或操作符:p格式:格式:xyp规则:对应位相同时为规则:对应位相同时为0,不同时为,不同时为1 例如,例如,i=i0 x0f;等同于等同于 i=0 x0f;p主要用途:使主要用途:使1个数的某个数的某(些些)位翻转位翻转(即原来为即原来为1的的位变为位变为0,为,为0的变为的变为1),其余各位不变。,其余各位不变。5、位运算、位运算按位取反操作按位取反操作按位取反操作符按位取反操作符:p格式:格式:xp规则:各位翻转,即原来为规则:各位翻转,即原来为1的位变成的位变成0,原来为,原来为0的位变成的位变成1 例如,例如,i=i;p主要用途:间接地构造一个数,以增强程序的可移主要用途:间接地

44、构造一个数,以增强程序的可移植性。植性。l左移运算符左移运算符“”的功能,的功能,是把是把“”左边的操作数左边的操作数的各二进制位全部左移若干位,移动的位数由的各二进制位全部左移若干位,移动的位数由“”右边的常数指定,右边的常数指定,高位丢弃,低位补高位丢弃,低位补0。l例如:例如:“a”的功能,的功能,是把是把“”左边的操作数左边的操作数的各二进制位全部右移若干位,移动的位数由的各二进制位全部右移若干位,移动的位数由“”右边的常数指定。进行右移运算时,右边的常数指定。进行右移运算时,如果是无符号数,如果是无符号数,则总是在其左端补则总是在其左端补“0”lB25、位运算、位运算6、C51的数据

45、类型的数据类型 C51的数据类型分为基本数据类型和组合数据类的数据类型分为基本数据类型和组合数据类型,情况与标准型,情况与标准C中的数据类型基本相同,但其中中的数据类型基本相同,但其中char型与型与short型相同,型相同,float型与型与double型相同,另型相同,另外,外,C51中还有专门针对于中还有专门针对于MCS-51单片机的特殊功单片机的特殊功能寄存器型和位类型。能寄存器型和位类型。一一字符型字符型char 有有signed char和和unsigned char之分,默认为之分,默认为signed char。它们的长度均为一个字节,用于存放一个它们的长度均为一个字节,用于存放

46、一个单字节的数据。单字节的数据。对于对于signed char,它用于定义带符号字节数据,其它用于定义带符号字节数据,其字节的最高位为符号位,字节的最高位为符号位,“0”表示正数,表示正数,“1”表示负数,表示负数,补码表示,所能表示的数值范围是补码表示,所能表示的数值范围是-128+127;对于对于unsigned char,它用于定义无符号字节数据或它用于定义无符号字节数据或字符,可以存放一个字节的无符号数,其取值范围为字符,可以存放一个字节的无符号数,其取值范围为0255。unsigned char可以用来存放无符号数,也可以可以用来存放无符号数,也可以存放西文字符,一个西文字符占一个字

47、节,在计算机内部存放西文字符,一个西文字符占一个字节,在计算机内部用用ASCII码存放。码存放。二二int整型整型 分分singed int和和unsigned int。默认为默认为signed int。它们的长度均为两个字节,用于存放一个双字节数据。它们的长度均为两个字节,用于存放一个双字节数据。对于对于signed int,用于存放两字节带符号数,补码表示,用于存放两字节带符号数,补码表示,数的范畴为数的范畴为-32768+32767。对于。对于unsigned int,用用于存放两字节无符号数,数的范围为于存放两字节无符号数,数的范围为065535。三三long长整型长整型 分分sing

48、ed long和和unsigned long。默认为默认为signed long。它们的长度均为四个字节,用于存放一个四字节它们的长度均为四个字节,用于存放一个四字节数据。对于数据。对于signed long,用于存放四字节带符号数,用于存放四字节带符号数,补码表示,数的范畴为补码表示,数的范畴为-2147483648+2147483647。对于对于unsigned long,用于存放四字节无符号数,数的用于存放四字节无符号数,数的范围为范围为04294967295。四四float浮点型浮点型 float型数据的长度为四个字节,格式符合型数据的长度为四个字节,格式符合IEEE-754标准的单精

49、度浮点型标准的单精度浮点型数据,包含指数和尾数两部分,最高位为符号位,数据,包含指数和尾数两部分,最高位为符号位,“1”表示负数,表示负数,“0”表示正表示正数,其次的数,其次的8位为阶码,最后的位为阶码,最后的23位为尾数的有效数位,由于尾数的整数部分隐位为尾数的有效数位,由于尾数的整数部分隐含为含为“1”,所以尾数的精度为,所以尾数的精度为24位。位。任何一个2进制的实数可以写成N=S*2P.p是阶码.S是尾数.单精度浮点数实例:对于内部存储数据(00111111 01100110 01100110 01100110)2:符号位(最左侧)S=0。这表示是个正数 指数(左侧第2-9位)E=(

50、01111110)2=(126)10,所以P=126-127=-1。尾数(最后的23位)M=(1100110 01100110 01100110)2,m=(1.M)2=(1.7999999523162841796875)10 该二进制小数转为10进制的计算方式为1+(1/2+1/4)+(1/32+1/64)+(1/512+1/1024)实际值 N=1.7999999523162841796875*2-1=0.89999997615814208984375(其实,这个数据是0.9的单精度浮点数的实际内部存储,可以看到有一定的误差)五五*指针型指针型 指针型本身就是一个变量,在这个变量中存放的指向

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

当前位置:首页 > 生活休闲 > 生活常识

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

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