第3章 C51程序设计基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选择语句
基本if语句的格式如下: if (表达式) { 语句组; } if语句执行过程:当“表达式”的结果为“真”时,执 行其后的“语句组”,否则跳过该语句组,继续执行下 面的语句。
表达式 真(非0) 假(0)
语句组
选择语句
if语句中的“表达式”通常为逻辑表达式或关系表达式, 也可以是任何其他的表达式或类型数据,只要表达式的 值非0即为“真”。以下语句都是合法的: if(3){……} if(x=8){……} if(P3_0){……} 在if语句中,“表达式”必须用括号括起来。 在if语句中,花括号“{ }”里面的语句组如果只有一条 语句,可以省略花括号。如“if (P3_0==0) P1_0=0;”语 句,但是为了提高程序的可读性和防止程序书写错误, 建议读者在任何情况下,都加上花括号。
C程序基本结构
认识C语言
一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独 立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行 总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列 顺序如何,最后在主函数中结束整个程序。 C语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。 C语言程序使用“;”作为语句的结束符,一条语句可以多行书写,也
-32768~+32767 0~4294967295
signed long
float * Bit sfr sfr16
有符号长整型
浮点型 指针型
四字节
四字节 1~3字节
-2147483648~+2147483647
±1.175494E-38~±3.402823E+38 对象的地址 0或1 0~255 0~65535
位运算
与操作
按位与操作符 :& 格式:x&y 规则:对应位均为1时才为1,否则为0 例如, i=i&0x0f; 等同于 i&=0x0f; 主要用途:取(或保留)1个数的某(些)位,其余各位 置0。
位运算
或操作
按位或操作符: | 格式:x|y 规则:对应位均为0时才为0,否则为1 例如, i=i|0x0f; 等同于 i|=0x0f; 主要用途:将1个数的某(些)位置1,其余各位不变
第3章 C51程序设计基础
教学内容 认识C51语言 C51数据类型 C51运算符 C51程序结构 C51函数
C51数组
认识C语言
C语言程序以函数形式组织程序结构,C程序中的函数与其他语言中 所描述的“子程序”或“过程”的概念是一样的。
C程序
预编译命令
主函数
函数1
„ „
函数i
函数定义
函数体
位运算
Fra Baidu bibliotek
左移运算符“<<”的功能,是把“<<”左边的操作数 的各二进制位全部左移若干位,移动的位数由“<<” 右边的常数指定,高位丢弃,低位补0。例如: “a<<4”是指把a的各二进制位向左移动4位。如 a=00000011B(十进制数3),左移4位后为 00110000B(十进制数48)。 右移运算符“>>”的功能,是把“>>”左边的操作数 的各二进制位全部右移若干位,移动的位数由“>>” 右边的常数指定。进行右移运算时,如果是无符号数, 则总是在其左端补“0”
选择语句
if-else语句的一般格式如下: if (表达式) { 语句组1; } else { 语句组2; } if-else语句执行过程:当“表达式”的结果为“真”时,执行其后的“语 句组1”,否则执行“语句组2”
真(非0)
表达式
假(0)
语句组1
语句组2
选择语句
if-else-if语句是由 if else 语句组成的嵌套,用来实现多个条件分支的选择, 其一般格式如下: if (表达式1) { 语句组1; } else if (表达式2) { 语句组2; } … else if (表达式n) { 语句组n; } else { 语句组n+1; }
选择语句
表达式1 真(非0) 假(0) 表达式2 真(非0) 假(0) 表达式„ 真(非0) 假(0) 表达式n 真(非0)
语句组1
语句组2
语句组„
语句组n
语句组n+1
选择语句
多分支选择的switch语句, 其一般形式如下: switch(表达式) { case常量表达式1: 语句组1;break; case常量表达式2: 语句组2;break; …… case常量表达式n: 语句组n;break; default : 语句组n+1; } 该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达 式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应 该常量表达式后的语句组,再执行break语句,跳出switch语句的执行,继 续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同, 则执行default后的语句组。
例如: 逻辑与 (1) x<y&& m<n 逻辑或 (2) a= =b || c= =d 赋值运算与复合赋 值运算 (3) !a && b>c
| &&
等效于 (x<y) 12 && (m<n) || 从左至右 (a= =b)14 || (c= 从右至左 =d) = 等效于 +=、-=、 *=、/=、%=、&=、 等效于 (!a) ^=、 |=、<<=、 >>= && (b>c)
表达式语句和复合语句
把多个语句用大括号{}括起来,组合在一起形成具有 一定功能的模块,这种由若干条语句组合而成的语句块 称为复合语句。在程序中应把复合语句看成是单条语句, 而不是多条语句。 复合语句在程序运行时,{}中的各行单语句是依次顺 序执行的。在C语言的函数中,函数体就是一个复合语 句。
0
0 0
运算类型
括号运算符 逻辑非和按位取反 算术运算 *
运算符
() ! / + >> > >= ~ %
优先级
1 2 3 4 5 6
结合性
从左至右 从右至左 从左至右 从左至右 从左至右 从左至右
左移、右移运算 关系运算 <
<< <=
==
位运算 & ^
!=
7
8 9 10 11
从左至右
从左至右 从左至右 从左至右 从左至右
可以一行书写多条语句。
认识C语言
结构化语言 丰富的数据类型 便于维护管理 与汇编语言相比,C语言的优点如下: 不要求编程者详细了解单片机的指令系统,但需了 解单片机的存储器结构; 寄存器分配、不同存储器的寻址及数据类型等细节 可由编译器管理; 结构清晰,程序可读性强; 编译器提供了很多标准库函数,具有较强的数据处 理能力。
赋值语句的作用是把某个常量或变量或 表达式的值赋值给另一个变量。
符号为‘=’。这里并不是等于的意思, 只是赋值,等于用‘==’表示。 赋值语句左边必须是变量或寄存器,且 必须先定义。 常量不能出现左边。
赋值运算符和赋值表达式
简单的赋值运算符:
=
复合的赋值运算符
i+=2 等价于 i = i + 2 a-= *= b*= + 5 等价于 a = a * (b + 5) + =、 、 x% 等价于 x = x%3 、%= 、= /=3
位类型 特殊功能寄存器
16位特殊功能寄存器
位 单字节 双字节
sbit
可寻址位
位
0或1
常量和变量
常量的值在程序执行期间是不能发生变化的;
变量的值在程序执行期间可以发生变化。
常量
常量的值在程序执行期间是不能发生变化的。
整型常量可以表示为十进制数、十六进制数或八进制数等,例如: 十进制数12,-60等; 十六进制数以0x开头,如0x14、-0x1B等;
算术运算符
+(加法运算) -(减法运算) * (乘法运算符) /(除法运算符) % (求余运算符,或称模运算符)如: ++ (变量自加1) -- (变量自减1)
4 % 2 =0
注
意
两个整数相除结果为整数,如8/5的结果为1,舍去小数部分。 如果参加运算的两个数中有一个数为实数,则结果是实型。 求余运算要求%两侧都是整型数据。
表达式语句和复合语句
表达式语句是最基本的C语言语句。表达式语句由表 达式加上分号“;”组成,其一般形式如下: 表达式; 执行表达式语句就是计算表达式的值。 在 C 语言中有一个特殊的表达式语句,称为空语句。 空语句中只有一个分号“;”,程序执行空语句时需要 占用一条指令的执行时间,但是什么也不做。在C51程 序中常常把空语句作为循环体,用于消耗CPU时间等待 事件发生的场合。
认识C语言
C51数据类型
数据类型
unsigned char signed char
名称
无符号字符型 有符号字符型
长度
单字节 单字节
值域
0~255 -128~+127
unsigned int
signed int unsigned long
无符号整型
有符号整型 无符号长整型
双字节
双字节 四字节
0~65535
关系运算符
关系运算符 优先级
高
<
<=
>
>=
== !=
低
关系表达式
用关系运算符将两个表达式(可以是算术表达 式、关系表达式、赋值表达式或逻辑表达式) 连接起来的式子,称为关系表达式。 关系表达式的值为逻辑值“真”或“假”,以 1代表“真”,以0代表“假”。 例如: (1)关系表达式“8==4”的值为 ,表达式的 值为 。 (2) 关系表达式“5>0”的值为 ,表达式的 值为 。
void delay(unsigned int i) { unsigned int k; for(k=0;k<i;k++) ; }
//延时函数2
C51运算符
1. 赋值运算符 2. 算术运算符和算术表达式 3. 关系运算符和关系表达 4. 逻辑运算符和逻辑表达式
分隔符 为分号
赋值运算符
逻辑运算符及其优先级
逻辑运算符 ! (逻辑非) 优先级
&& (逻辑与) || (逻辑或)
注意:逻辑运算符与位操作运算符的区别。
逻辑表达式
用逻辑运算符将一个或多个表达式连接起来, 进行逻辑运算的式子。 逻辑量的真判断——非0 逻辑量的假判断——0
若a=1,b=2,c=3,x=4,y=3,写出下各个表达式的值: (1)a+b>c&&b==c (2)!a<b&&b!=c||x+y<=3 (3)!(x=a)&&(y=b)&&0
位运算
异或操作
按位异或操作符:^ 格式:x^y 规则:对应位相同时为0,不同时为1 例如, i=i^0x0f; 等同于 i^=0x0f; 主要用途:使1个数的某(些)位翻转(即原来为1的位 变为0,为0的变为1),其余各位不变。
位运算
按位取反操作
按位取反操作符:~ 格式:~x 规则:各位翻转,即原来为1的位变成0,原来为0 的位变成1 例如, i=~i; 主要用途:间接地构造一个数,以增强程序的可移 植性。
八进制数以字母o开头,如o14、o17等。
浮点型常量可分为十进制表示形式和指数表示形式两种,如0.888、 3345.345、125e3、-3.0e-3。 字符型常量是用单引号括起来的单一字符,如‘a’、‘9’等。 字符串型常量是用双引号括起来的一串字符,如“test”、“OK”等。 位类型的值是一个二进制数。如1或0。
练习
1 .若x = 10, 则!X的值为真或假? 2. 若a = 3, b = 2, 则if(a&b)的值为真或假? 3. 5 && 0 ||8的值为?
4. 5 > 3 && 4 || 8 < 4 的结果为?
C51程序结构
C语言程序的执行部分由语句组成。C语言提供了丰富 的程序控制语句,按照结构化程序设计的基本结构:顺 序结构、选择结构和循环结构,组成各种复杂程序。这 些语句主要包括表达式语句、复合语句、选择语句和循 环语句等。
自增、自减运算
自增运算符(++)和自减运算符(--): (1)前置运算──++变量、--变量 即先增减、后运算。 (2)后置运算──变量++、变量-- 即先运算、后增减。
实战演练:请说明程序运行完后x,y,z,m,n的值分别是多 少? main() { int x=6,y,z,m,n; y=++x; z=x--; m=y/z; n=y%z; }
变量
变量是一种在程序执行过程中其值能不断变化的量。 一个变量由变量名和变量值组成,变量名是存储单元 地址的符号表示,而变量的值就是该单元存放的内容。 变量必须先定义后使用,用标识符作为变量名,并指 出所用的数据类型和存储模式,这样编译系统才能为变 量分配相应的存储空间。
变量
void delay(unsigned char i) //延时函数1 { unsigned char j,k; for(k=0;k<i;k++) for(j=0;j<255;j++); } =================================================