单片机C语言基础.ppt_第1页
单片机C语言基础.ppt_第2页
单片机C语言基础.ppt_第3页
单片机C语言基础.ppt_第4页
单片机C语言基础.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

第二章C51知识 C语言是一种编译型程序设计语言 它兼顾了多种高级语言的特点 并具备汇编语言的功能 目前 使用C语言进行程序设计已经成为软件开发的一个主流 用C语言开发系统可以大大缩短开发周期 明显增强程序的可读性 便于改进 扩充和移植 而针对8051的C语言日趋成熟 成为了专业化的实用高级语言 C语言作为一种非常方便的语言而得到广泛的支持 很多硬件开发都用C语言编程 如 各种单片机 DSP ARM等 C语言程序本身不依赖于机器硬件系统 基本上不作修改就可将程序从不同的单片机中移植过来 C提供了很多数学函数并支持浮点运算 开发效率高 故可缩短开发时间 增加程序可读性和可维护性 C 51的特点 C 51与ASM 51相比 有如下优点 1 对单片机的指令系统不要求了解 仅要求对8051的存贮器结构有初步了解 2 寄存器分配 不同存贮器的寻址及数据类型等细节可由编译器管理 3 程序有规范的结构 可分成不同的函数 这种方式可使程序结构化 4 提供的库包含许多标准子程序 具有较强的数据处理能力 5 由于具有方便的模块化编程技术 使已编好程序可容易地移植 例子认识C程序 includesbitA5 P1 0 x04 intmain void 用户代码voiddelay 1s return0 voiddelay 1s 代码 一 主程序 程序入口 intmain void 用户代码return0 注 1 C程序模块都是以 开头 结尾 程序为函数 主函数 子函数 2 每一行必须有结束号 3 养成注释程序的习惯 注释该行 段落 注解一段 二 头文件 编程预处理 include注 定义一些通用引脚及函数 三 自定义函数 子函数 常用 重复引用的功能集成 可用任何文本编辑软件编写 最后保存扩展名为 C的程序源文件 其值可以改变的量称为变量 一个变量应该有一个名字 在内存中占据一定的存储单元 变量应该先定义后使用 要区分变量名和变量值是两个不同的概念 注 变量名a代表地址 编译系统自动分配 用户不可见 0 x40 一 C 51的变量类型 1 基本数据类型 类型 符号 关键字 数的表示范围 所占位数 整型 字符型 实型 有 无 signed int 16 32768 32767 signed short 16 32768 32767 signed long 32 2147483648 2147483647 16 unsignedint 0 65535 32 0 4294967295 unsignedlongint unsignedshortint 16 0 65535 有 float 32 3 4e 38 3 4e38 有 double 64 1 7e 308 1 7e308 有 char 8 128 127 无 unsignedchar 8 0 255 2 变量类型的定义 格式 变量类型 变量名 例如 inta b 定义a b为整型变更longsheng1 sheng2 长整型Floatc d 浮点 有小数 Doublee f 双精度chara 有符号字符型Unsignedcharb 无符号字符型 注 变量类型为规定的类型 变量的名称自由起 但通常要通俗 并要遵守如下规则 c语言变量命名 数字 字母 下划线 都可以为变量命名 做为变量名的开头不能为数字 如3a 是错的 而a 3或 a3是正确变量名不能为关键字 像if else printf等等都不能 标准C表1 标准C表2 C51扩展 3 C 51的数据类型扩充定义 sfr 特殊功能寄存器声明sfr16 sfr的16位数据声明sbit 特殊功能位声明bit 位变量声明 1 sfr特殊功能寄存器 这也是C51编译器的一种扩充数据类型 利用它可以访问8051单片机的所有内部特殊功能寄存器 sfr型数据占用一个内存单元 其取值范围0 255 2 sfr1616位特殊功能寄存器 它占用两个内存单元 取值范围是0 65535 3 sbit可寻址位 这也是C51编译器的一种扩充数据类型 利用它可以访8051单片机内部RAM中的可寻址位或特殊功能寄存器中的可寻址位 4 bit位标量 这是C51编译器的一种扩充数据类型 利用它可定义一个位标量 但不能定义位指针 也不能定义位数组 例 sfrSCON 0X98 sfr16T2 0 xCC sbitOV PSW 2 4 数据类型修饰词 1 data 固定指前面0 x00 0 x7f的128个RAM 可以用acc直接读写的 速度最快 生成的代码也最小 2 code定义的数据要放在ROM 程序存储区 里面 写入后就不能再更改 对应的还有data是存入RAM的意思 例如 chardataa a变量存在上述RAM中intdatadisp disp变量存在上述RAM中 例如 ucharcodeyima 把数码管位数据 因为不变 写入ROM 0 xeb 0 x88 0 xb3 0 xba 0 xd8 0 x7a 0 x7b 0 xa8 0 xfb 0 xfa 4 数据类型修饰词 3 4 数据类型修饰词 4 5 变量的赋值 inta b 定义a b为整型变量longsheng1 sheng2 长整型floatc d 浮点 有小数 doublee f 双精度charg 有符号字符型Unsignedcharh 无符号字符型 定义 赋值 a 12 a 0 xff a 0 x00 b 0 b 08 b 03 C 0 214 c 0 36 d 12e3 e 12e 12 g 10 G A h 200 注 A 为字符常量 为该字符的ASCII代码 附 C 51的包含的头文件 通常有 reg51 hreg52 hmath hctype hstdio hstdlib habsacc h常用有 reg51 hreg52 h 定义特殊功能寄存器和位寄存器 math h 定义常用数学运算 二 C 51的运算符1 算术运算符 加减乘除求余 说明 自加运算符 自减运算符 2 逻辑运算 将两个布尔量进行运算 结果为只有0或1的布尔量 3 关系运算 运算结果只有0或1的布尔量 4 位运算 位操作 结果还是一个数 注意与逻辑运算的区别 1 2 3 4 5 二 C 51流程控制 与标准C语言基本相同 if选择语言switch case多分支选择语言while循环语言for循环语言do while循环语言 1 if条件选择语句 1 单分支语句 inta b max max a if max b max b 2 双分支语句 main inta b max if a b max a elsemax b 3 多分支语句 依次判断表达式的值 当出现某个值为真时 则执行其对应的语句 然后跳到整个if语句之外继续执行程序 如果所有的表达式均为假 则执行语句n 1 然后继续执行后续程序 inta 10 If a 0 2 switch语句 switch 表达式 case常量表达式1 语句1 case常量表达式2 语句2 case常量表达式n 语句n default 语句n 1 格式 计算表达式的值 并逐个与其后的常量表达式值相比较 当表达式的值与某个常量表达式的值相等时 即执行其后的语句 然后不再进行判断 继续执行后面所有case后的语句 如表达式的值与所有case后的常量表达式均不相同时 则执行default后的语句 在使用switch语句时还应注意以下几点 在case后的各常量表达式的值不能相同 否则会出现错误 在case后 允许有多个语句 可以不用 括起来 各case和default子句的先后顺序可以变动 而不会影响程序执行结果 default子句可以省略不用 main floata b charc printf inputexpression a b n scanf f c f 例子 在使用switch语句时还应注意以下几点 1 在case后的各常量表达式的值不能相同 否则会出现错误 2 在case后 允许有多个语句 可以不用 括起来 3 各case和default子句的先后顺序可以变动 而不会影响程序执行结果 4 default子句可以省略不用 3 while语句 格式while 表达式 语句 while语句的语义是 计算表达式的值 当值为真 非0 时 执行循环体语句 作用 循环执行一段代码 例子 While 1 P0 0 xff delay1s P0 0 x00 delay1s While 1 delay1s P0 P0 inti 100 While i 0 delay1s P0 P0 i main inti sum 0 i 1 while i 100 sum sum i i printf d n sum 4 for语句 格式for 表达式1 表达式2 表达式3 语句 作用 循环执行一段代码 它的执行过程如下 1 先求解表达式1 2 求解表达式2 若其值为真 非0 则执行for语句中指定的内嵌语句 然后执行下面第3 步 若其值为假 0 则结束循环 转到第5 步 3 求解表达式3 4 转回上面第2 步继续执行 5 循环结束 执行for语句下面的一个语句 Sum 0 for i 1 i 100 i sum sum i 例子 inti for i 100 i 0 i 空语句 想想这段代码有什么用 附 for循环的嵌套main inti j k for i 0 i 2 i for j 0 j 2 j for k 0 k 2 k printf d d d n i j k do while语句 形式为 do 语句 while 表达式 作用 循环执行一段代码 这个循环与while循环的不同在于 它先执行循环中的语句 然后再判断表达式是否为真 如果为真则继续循环 如果为假 则终止循环 因此 do while循环至少要执行一次循环语句 main inti sum 0 i 1 do sum sum i i while i 100 printf d n sum 例子 6 操作语句 格式语句1 语句2 语句3 语义 先计算语句1 若为真 则计算 输出 语句2 否则输出语句3 例 intx y x 13 y x 5 1 0 Y输出什么值 7 循环体的退出 一 break语句 当break用于开关语句swit

温馨提示

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

评论

0/150

提交评论