




已阅读5页,还剩71页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章单片机C语言 本章重点 C语言基本语法 51单片机 语言特点 单片机 语言是标准 语言的一个子集 但又有扩充 它有如下特点 标准 语言是一种在操作系统平台上运行的编译语言 它可以调用操作系统的底层功能C51是一种在裸机上运行的C语言编译器 语言程序举例 例5 1 includemain TMOD 0 x20 SCON 0 x55 TR 1 TH1 0XFD TL1 0XFD printf 中国 您好 n 函数调用语句 C程序特点 必须有一个main函数main函数是程序入口include 文件包含命令 通常用于包含函数的头文件头文件 h 包含函数原型注释 多行注释 单行注释 C程序特点 C程序特点 格式化输出函数printf 一般格式 printf 格式字符串 输出项1 输出项2 格式字符串 0m n格式字符 格式说明开始 是否左对齐0 空位是否填0m 指定输出项输出后占的字符数n 指定小数位数 格式字符 d 十进制整数x或X 十六进制整数o 八进制整数u 无符号十进制整数c 单个字符s 字符串e或E 指数形式f 小数形式 C程序特点 语句以分号 结束 定义函数体或代码块所有可执行代码必须放在函数体中 5 2字符标志符关键字 5 2 1 语言的字符集1 字母小写字母a z 大写字母A Z2 数字0 9共10个3 空白符空格符 制表符 换行符等统称为空白符 空白符只在字符常量和字符串常量中起作用在其它地方出现时 只起间隔作用 编译程序将其忽略 5 2 2 语言词汇 1 标识符标识符 变量名 函数名 标号库函数的函数名由系统定义用户自定义标识符只能是字母 数字 下划线组成的字符串 且第一个字符必须是字母或下划线 在使用标识符时还必须注意以下几点 不限制长度区分大小写 2 关键字 1 类型说明符 2 语句定义符 3 预处理命令字3 运算符4 分隔符5 常量6 注释符 5 3数据类型 5 3 1 语言的数据类型变量必须先说明 后使用对变量的说明可以包括三个方面 数据类型 存储类型 作用域 语言数据类型可分为 基本数据类型构造数据类型指针类型空类型 表5 2KeilCx51的数据类型 1 整型量 整型量包括整型常量 整型变量 整型常量整型常数有八进制 十六进制和十进制 八进制整常数前缀为0开头 十六进制整常数前缀为0X或0 x 十进制整常数无前缀 整型变量的说明说明形式为 类型说明符变量名标识符 例如 inta b c a b c为整型变量longx y x y为长整型变量unsignedintp q p q为无符号整型说明 多个变量之间用逗号分开语句以分号 结束一般在函数开始部分说明变量 2 实型量 实型常量实型也称为浮点型 实型常量也称为实数或者浮点数 十进制数形式0 00 255 789300 0 指数形式2 1E5 等于2 1 105 3 7E 2 等于3 7 10 2 实型常数不分 双精度 都按双精度double型处理 实型变量实型变量分为两类 单精度型和双精度型 其类型说明符为 float单精度说明符double双精度说明符C51中单精度型占4个字节 6位有效数字双精度型占8个字节 10位有效数字 3 字符型量 字符常量字符常量是用单引号括起来的一个字符 转义字符转义字符是一种特殊的字符常量 转义字符以反斜线 开头 后跟一个或几个字符 常用的转义字符如表5 3所示 5 3常用的转义字符及其含义 字符变量chara b 允许对整型变量赋以字符值 也允许对字符变量赋以整型值 在输出时 允许把字符变量按整型量输出 也允许把整型量按字符量输出 整型量为二字节量 字符量为单字节量 当整型量按字符型量处理时 只有低八位字节参与处理 例5 7 main chara b a 120 b 121 printf c c n d d n a b a b 字符串常量 字符串常量是由一对双引号括起的字符序列 例如 CHINA 12 5 字符串常量和字符常量不同 有以下区别 字符常量由单引号括起来 字符串常量由双引号括起来 字符常量只能是单个字符 字符串常量则可以含一个或多个字符 可以把一个字符常量赋予一个字符变量 但不能把一个字符串常量赋予一个字符变量 语言中用字符数组来存放字符串常量 字符常量占一个字节的存储空间 字符串常量占的存储空间的字节数等于字符串中字节数加1 增加的一个字节中存放字符 0 ASCII码为0 这是字符串结束的标志 例如 字符串 Cprogram 在内存中所占的字节为 Cprogram 0 字符常量 a 和字符串常量 a 虽然都只有一个字符 但在内存中的情况是不同的 a 在内存中占一个字节 可表示为 a a 在内存中占二个字节 可表示为 a 0 符号常量 符号常量定义形式 define标识符常量 例5 8 definePI3 14159voidmain floats r s r定义为实数r 5 5 rs PI r r PI r r sprintf s f n s 5 3 3 C51编译器扩展数据类型 1 bit位变量bit位变量的值是0或1 占一位 2 sfr特殊功能寄存器sfr占一个字节 分配的内存RAM的地址为0X80 0XFF 值域为0X00 0XFF 用于访问51单片机内部的特殊功能寄存器 例如 sffP1 0 x90 定义P1为P1端口地址P1 255 对P1端口的所有引脚置高电平 3 sfrl616位特殊功能寄存器sfrl6用于定义存在于80C51单片机内部RAM的16位特殊功能寄存器 通过名字或地址引用的sfrl6地址必须大于80H 4 sbit可寻址位sbit是C51中的一种扩充数据类型 利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位 5 4变量的初值和类型转换5 4 1变量赋初值在程序中经常需要对变量赋初值 以便使用变量 程序中可有多种方法为变量提供初值 在变量说明中赋初值的方法称为初始化 这种方法的一般形式为 类型说明符变量1 值1 变量2 值2 例如 inta b c 5 floatx 3 2 y 3f z 0 75 charch1 K ch2 P 应注意 在说明中不允许连续赋值 如a b c 5是不合法的 例5 9 voidmain inta 3 b c 5 a 3 c 5b a c b a cprintf a d b d c d n a b c 显示程序运行结果 5 4 2变量类型的转换 1 自动类型转换规则 若参与运算量的类型不同 则先转换成同一类型 然后进行运算 转换按数据长度增加的方向进行 以保证精度不降低 所有的浮点运算都是以双精度进行 赋值以等号左侧类型为准 例5 10 voidmain floatPI 3 14159 ints r 5 s r r PI printf s d n s 2 强制类型转换其一般形式为 类型说明符 表达式 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型 例如 float a把a转换为实型 int x y 把x y的结果转换为整型 在使用强制转换时应注意以下问题 类型说明符和表达式都必须加括号 单个变量可以不加括号 无论是强制转换或是自动转换 都只是为了本次运算的需要而对变量的数据长度进行的临时性转换 而不改变数据说明时对该变量定义的类型 例5 11 main floatf 5 75 printf int f d f f n int f f floatf 5 75 printf int f d f f n int f f 5 5变量的存储种类和存储器类型 C51对变量的进行定义的格式如下 存储种类 数据类型 存储器类型 变量其中 存储种类和存储器类型是可选项 5 5 1存储种类 存储种类是指变量在程序执行过程中的作用范围 变量的存储种类有四种自动 auto 外部 extern 静态 static 寄存器 register 5 5 2存储器类型 定义变量时 除了说明存储种类外 还允许说明变量的存储器类型 存储器类型和存储种类是完全不同的概念 存储器类型指明该变量所处的单片机的内存空间 C51编译器可识别以下存储器类型 如表5 5所示 表5 5C51编译器可识别的存储器类型 5 5 3 存储模式 C51编泽器允许采用三种存储模式 小编译模式SMALL 紧凑编译模式COMPACT 大编译模式LARGE 5 6运算符 表达式 5 6 1基本运算符和表达式1 运算符的种类 语言的运算符可分为以下几类 算术运算符 关系运算符 逻辑运算符用于逻辑运算 包括与 或 非 等 位操作运算符二进制位进行运算 包括位与 位或 位非 位异或 左移 等 赋值运算符用于赋值运算 分为简单赋值 复合算术赋值 和复合位运算赋值 等 5 6运算符 表达式 6 条件运算符 逗号运算符用于把若干表达式组合成一个表达式 指针运算符用于取内容 和取地址 二种运算 求字节数运算符用于计算数据类型所占的字节数 sizeof 特殊运算符有括号 下标 成员 等几种 2 优先级和结合性 自左至右的结合方向就称为 左结合性 自右至左的结合方向称为 右结合性 最典型的右结合性运算符是赋值运算符 如x y z 由于 的右结合性 应先执行y z再执行x y z 运算 语言运算符中有不少为右结合性 应注意区别 以避免理解错误 3 算术运算符和算术表达式基本的算术运算符 加法运算符 减法运算符 乘法运算符 除法运算符 除法参与运算量均为整型时 结果也为整型 舍去小数 如果运算量中有一个是实型 则结果为双精度实型 求余运算符 模运算符 双目运算 具有左结合性 要求参与运算的量均为整型 求余运算的结果等于两数相除后的余数 4 自增 自减 运算符 ii自增1后再参与其它运算 ii自减1后再参与其它运算 i i参与运算后 i的值再自增1 i i参与运算后 i的值再自减1 例5 13voidmain inti 8 printf d n i printf d n i printf d n i printf d n i printf d n i printf d n i 6 赋值运算符和赋值表达式 简单赋值运算符记为 由 连接的式子称为赋值表达式 其一般形式为 变量 表达式 例如 x a bw sin a sin b a b c 5 具体规定如下 实型赋予整型 舍去小数部分 整型赋予实型 数值不变 但将以浮点形式存放 即增加小数部分 小数部分的值为0 字符型赋予整型 由于字符型为一个字节 而整型为二个字节 故将字符的ASCII码值放到整型量的低八位中 高八位为0 整型赋予字符型 只把低八位赋予字符量 7 复合赋值符及表达式 复合赋值符 例如 a 5等价于a a 5x y 7等价于x x y 7 r p等价于r r p 8 逗号运算符和逗号表达式 一般形式为 表达式1 表达式2其求值过程是分别求两个表达式的值 并以表达式2的值作为整个逗号表达式的值 voidmain inta 2 b 4 c 6 x y y x a b b c printf y d x d y x 9 位操作运算符 按位 与 运算 按位 或 运算 b3 b1 b2b1 00011001 0 x1B b2 01001101 0 x4D b3 01011101 或0 x5D 即b3 93按位 异或 运算 b3 b1 b3b1 00011001 0 x1B b2 01001101 0 x4D b3 01010100 0 x54 即b3 84 4 按位取反运算符 w2 w1 w2为w1二进制按位取反 例如 unsignedintw1 0122457 w2 二进制表示 8进制表示 w11010010100101111 0122457 w20101101011010000 0055320 5 左移运算符 左移运算符 是双目运算符 其功能把 左边的运算数的各二进位全部左移若干位 由 右边的数指定移动的位数 高位丢弃 低位补0 例如 a 4把a的各二进位向左移动4位 如a 00000011 十进制3 左移4位后为00110000 十进制48 6 右移动运算符 右移运算符 是双目运算符 功能是把 左边的运算数的各二进位全部右移若干位 由 右边的数指定移动的位数 例如 设a 15 a 2表示把000001111右移为00000011应该说明的是 对于有符号数 在右移时 符号为将随同移动 当为正数时 最高位补0 而为负数时 符号为为1 最高位是补0或是补1取决于编译系统的规定 TurboC和很多系统规定为补1 5 7C51设计的基本语句 5 7 1表达式语句在表达式后面加入分号 就构成表达式语句 空语句 仅由一个分号 组成 5 7 2复合语句 有若干条语句组合而成的语句叫复合语句 复合语句之间用 分隔 而它内部的各条语句还是需要以分号 结束 符合语句的一般形式为 局部变量定义 语句1 语句2 语句n 例5 17 复合语句及其局部变量的应用 incluidemain 主函数体开始inta b c m d 定义变量 a b c m da 1 b 2 c 3 d 4 printf nX d d d d a b c d 复合语句1intb m 定义局部变量b m 它们仅在复合语句1中有效b 8 m 100 printf nY d d d d a b c d m 复合语句2intc n 定义局部变量c n 它们仅在复合语句2有效c 9 n 150 printf nZ d d d d d d a b c d m 复合语句2结束printf nY d d d d d a b c d m 复合语句1结束printf n 5 7 3条件语句 1 if 条件表达式 语句2 if 条件表达式 语句1else语句23 if 条件表达式1 语句1elseif 条件表达式2 语句2elseif 条件表达式3 语句3elseif 条件表达式m 语句nelse语句m 例5 18 例5 18 条件语句的使用 一求一元二次方程根的程序 include includemain floata b c x1 x2 floatr s a 2 0 b 3 0 c 4 0 r b b 4 0 a c if r 0 0 s sqrt r x1 b s 2 0 a x2 b s 2 0 a printf real x1 15 7f x2 15 7f n x1 x2 elseif r 0 0 printf double x1 x2 15 7f n b 2 0 a else x1 b 2 0 a printf complex Re 15 7f Im 15 7f n x1 x2 while 1 5 7 4开关语句 开关语句是实现多方向条件分支的语句 其关键字是switch 它的一般形式如下 Switch 表达式 case常量表达式1 语句1 break case常量表达式2 语句2 break case常量表达式3 语句3 break case常量表达式n 语句n break default 语句 例5 19 此程序按照输入的年份year和月份month 计算该月有多少天 程序需要判断该年是否为闰年 闰年的2月有29天 平年2月只有28天 闰年的条件是 年份数yca 能被4整除 但不能被100整除 或者年份数year能被400整除 这个条件可以用逻辑关系式来表达 year 4 0 year 100 0 year 400 0 includemain intyear month len pintf Enteryear 5 7 5循环语句 循环语句有while do while for和goto1 while语句while语句用到实现 当型 循环结构 其一般形式如下 while 表达式 语句 当表达式为非0值 真 时 执行while语句中的内嵌语句 其特点是 先判断表达式 后执行语句 例5 20 用while语句的计算自然数1 100的累加和 includemain inti s 0 i 1 while i 100 s s i i printf 1 2 100 d n s while 1 2 do while语句 do while语句用来实现 直到型 循环 特点是先执行循环体 然后判断循环条件是否成立 其一般形式如下 do循环体语句while 表达式 2 do while语句 例5 21 用do while计算自然数1 2 100 includemain inti s 0 i 1 do s s i i while I 100 printf 1 2 100 d n s 3 for语句 for语句的一般形式为 for 表达式l 表达式2 表达式3 语句 执行过程 先求解表达式1 求解表达式2 其值为真 则执行for语句中指定的内嵌语句 循环体 然后执行第 3 步 如果为假 则结束循环 求解表达式3 转回上面的第 2 步继续执行 For语句典型的应用是这样一种形式 for 循环变量初值 循环条件 循环变量增值 语句如果变量初值在for语句前面赋值 则for语句中的表达式1应省略 其后的分号不能省略表达式2也可省略 同样不能省略其后的分号表达式3也可以省略 但此时编程者应该另外设法保证循环能正常结束 表达式1 2和3都可以省略 即形成如for 的形式 它的作用相当于是while 1 构成一个无限循环的过程 例5 22 用for语句构成的循环计算自然数1 100的累加和 includemain inti s 0 for i 1 i 100 i s s i printf 1 2 100 d n s while 1 4 goto语句 goto语句是一个无条件转向语句 它的一般形式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年污水检测试题及答案
- 2025年重庆市车管所事业单位招聘考试模拟试题及答案解析
- 2025年科学道德与学术规范知识竞赛决赛题库(含答案)
- 教学课件题目怎么写模板
- 车辆管理课件
- 车辆理论知识课件
- 制作课件属于教学成果吗
- 金属密封件表面抛光技术考核试卷及答案
- 化纤织物抗泛渍日晒色牢度工艺考核试卷及答案
- 2025年呼吸内科实习生出科考试试题及答案
- 一线班组质量奖申报材料
- 蜜雪冰城加盟合同(2025年版)
- 消毒供应质量控制指标(2024年版)
- ACS合并消化道出血治疗策略
- 数字化转型视角下H公司订单管理优化策略研究
- 精益管理看板
- 汽车产品初期流动管理计划
- 《战略资源稀土》课件
- 《过程审核讲义》课件
- 中医内科学虚劳培训课件
- DB41T 2086-2020 加油加气站内电动汽车充电设施建设技术规范
评论
0/150
提交评论