第4章6-7单片机的C语言_第1页
第4章6-7单片机的C语言_第2页
第4章6-7单片机的C语言_第3页
第4章6-7单片机的C语言_第4页
第4章6-7单片机的C语言_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

4 6函数 4 6 1函数的分类及定义 C语言程序由函数组成从用户使用角度划分 函数分为库函数和用户定义函数库函数是编译系统为用户设计的一系列标准函数 用户只需调用 无需编写这些函数 如前面所用到的头文件reg51 h等 有的头文件中包括一系列函数 要使用其中的函数必须先使用 包含语句 然后才能调用 用户自定义函数是用户根据任务编写的函数 从参数形式上函数分为无参函数和有参函数 无参函数 函数中无参数定义 有参函数 函数中定义形式参数 在调用时 调用函数用实际参数代替形式参数 调用完返回结果给调用函数 4 6 2函数的定义 无参函数的定义 返回值类型函数名 函数体语句 如果函数没有返回值 可以将返回值类型设为void函数以 开始 以 结束 有参函数的定义1 返回值类型函数名 形式参数表列 形式参数类型说明 函数体语句 return 返回形参名 有参函数的定义2 返回值类型函数名 类型说明形式参数表列 函数体语句 return 返回形参名 4 6 3 函数的调用 函数调用的形式为 函数名 实际参数表列 对于无参函数当然不存在实际参数表列 实参和形参的数目相等类型一致 函数的调用方式有三种 函数调用语句 即把被调函数名作为调用函数的一个语句 如fun1 被调函数作为表达式的运算对象 如rett 2 get a b 此时拿函数中的a b应为实参 其以返回值参予式中的运算 被调函数作为另一个数的实际参数 如m max a get a b 函数get a b 作为max 的一个实际参数被调用 4 6 4对被调函数的说明 如果被调函数出现在主调函数之后 在主调函数前应对被调函数作以说明 形式为 返回值类型被调函数名 形参表列 如 intfun1 a b 函数说明 main 主函数 intd u 3 v 2 d 2 fun1 u v intfun1 a b inta b intc c a b return c 如 intfun1 a b inta b intc c a b return c main intd u 3 v 2 d 2 fun1 u v 此例中被调函数在主调函数前 不用说明 4 7单片机的C语言编程实例 由于C51编译器是针对单片机的 因此ANSIC中的scanf和printf等对PC机的输入 输出语句无效 运算的数据可以通过变量置入或取出 这时C51会自动安排使用的存贮单元 也可以用户自行通过具体的内存地址置入数据或从特定地址取出数据 4 7 2 顺序程序的设计 例1 完成19805 24503的编程 分析 两个乘数比较大 其积更大 采用unsignedlong类型 设乘积存放在外部数据存贮器0号开始的单元 程序如下 main unsignedlongxdata p 设定指针p unsignedlonga 19805 设置a的类型 unsignedlongb 24503 c 设置b和积c为unsignedlong类型 并赋初值 p 0 设地址指向0号单元 c a b p c 积存入外部RAM0号单元 上机通过软件仿真调试 在变量观察窗口看到运算结果c 485281915 即为乘积的十进制数 观察XDATA区 外部RAM 的0000H 0003H单元分别为1CECD07B 即存放的为485281915的十六进制数 观察DATA区 0405060708090A0B0C0D0E0F 1CECD07B00004D5D00005FB7C变量 积 a变量b变量可见定义为unsignedlong类型 给每个变量分配四个单元 如果定义类型不对 将得不到正确的结果 如果未定义变量类型 默认为内部RAM 如a b c变量 例4 6片内RAM20H单元存放着一个0 05H的数 用查表法 求出该数的平方值放入内部RAM21H单元 main charx p charcodetab 6 0 1 4 9 16 25 p 0 x20 x tab p p p x 查表法 在程序存贮器建立一张表 在C语言中表格定义为数组 数组的使用如同变量一样 要先进行定义 说明数组名 维数 数据类型和存贮类型 在定义数组的同时还可以给数组各元素赋初值 4 7 3 循环程序的设计 C语言的循环语句有以下几种形式1 while 表达式 语句 其中表达式为循环条件 语句为循环体 当表达式值为真 值为1 重复执行 语句 Y N 2 do 语句 while 表达式 表达式为真执行循环体 语句 直至表达式为假 退出循环执行下一个语句 Y N 3 for 表达式1 表达式2 表达式3 语句 循环体语句 求解表达式1 表达式2为真 求解表达式3 语句可只一条以 结尾 可以多条组成复合语句 复合语句必须用 括起 也以没有语句 通常用于等待中断 或查询 Y N 例4 8 分析下列程序的执行结果 main intsum 0 i do sum i i while i 10 本程序完成0 1 2 10的累加 执行后sum 55 main intsum 0 i for i 0 i 10 i sum i 改用for语句编程 4 7 4 分支程序的设计 C语言的分支选择语句有以下3种形式 1 If 表达式 语句 句中表达式为真执行语句 否则执行下一条语句 当花括号中的语句不只一条 花括号不能省 2 If 表达式 语句1 else 语句2 句中表达式为真执行语句1 否则执行语句2再执行下一条语句 见下面流程图 If语句可以嵌套 If语句流程 If else语句流程 例1 片内RAM的20H单元存放一个有符号数x 函数y与x有如下关系式 设y存放于21H单元 xx 0 y 20Hx 0 x 5x 0程序如下 main Signedcharx p y p 0 x20 y 0 x21 for x p if x 0 y x if x 0 y x 5 if x 0 y 0 x20 程序中为观察不同数的执行结果 采用了死循环语句for 上机调试时退出死循环可用Ctrl C 3 Switch case语句该语句常用于多分支转移 格式如下 switch 表达式 case常量表达式1 语句1 break case常量表达式2 语句2 break case常量表达式n 语句n break default 语句n 1 说明 先进行表达式的运算 当表达式的值与某一case后面的常量表达式相等 就执行它后面的语句 当case语句后有break语句时 执行完这一case语句后 跳出switch语句 当case后面无break语句 程序将执行下一条case语句 都不匹配 就执行default后面的语句 如果无default语句就退出switch语句 default的次序不影响执行的结果 也可无此语句 例4 9 有两个数a和b 根据R3的内容转向不同子程序r3 0 执行子程序pr0 完成两数相加 r3 1 执行子程序pr1 完成两数相减 r3 2 执行子程序pr2 完成两数相乘 r3 3 执行子程序pr3 完成两数相除 分析 C语言中的子程序即为函数 因此需编四个处理函数 在C51编译器中通过头文件reg51 h可以识别特殊功能寄存器 但不能识别R0 R7通用寄存器 因此R0 R7只有通过绝对地址访问识别 程序如下 include definer3DBYTE 0 x03 intc c1 a b Pr0 c a b pr1 c a b pr2 c a b

温馨提示

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

评论

0/150

提交评论