补充单片机C语言程序设计

上传人:平*** 文档编号:47598878 上传时间:2018-07-03 格式:PPT 页数:82 大小:220.14KB
返回 下载 相关 举报
补充单片机C语言程序设计_第1页
第1页 / 共82页
补充单片机C语言程序设计_第2页
第2页 / 共82页
补充单片机C语言程序设计_第3页
第3页 / 共82页
补充单片机C语言程序设计_第4页
第4页 / 共82页
补充单片机C语言程序设计_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《补充单片机C语言程序设计》由会员分享,可在线阅读,更多相关《补充单片机C语言程序设计(82页珍藏版)》请在金锄头文库上搜索。

1、单片机C语言程序设计C语言的特点及程序结构一C语言的特点1语言简洁、紧凑,使用方便、灵活。2运算符丰富。 3数据结构丰富。具有现代化语言的各种数据结构。4可进行结构化程序设计。 5可以直接对计算机硬件进行操作。 6生成的目标代码质量高,程序执行效率高。7可移植性好。功能函数主函数功能函数功能函数1 fun1()函数体 主函数 main()主函数体 功能函数2 fun2()函数体 C语言程序结构一般如下: 预处理命令 include 大于 = 大于等于 3,结果为真(1),而10= =100,结果为假(0)。 注意:关系运算符等于“= =”是由两个“=”组成。四、逻辑运算符 C51有3种逻辑运算

2、符: | 逻辑或while(!RI); /当接收中断标志位RI为0则等待,当接收中断标志位 为1则结束等待。 c=SBUF; RI=0; return(c); 二、复合语句复合语句是由若干条语句组合而成的一种语句,在C51中,用一 个大括号“”将若干条语句括在一起就形成了一个复合语句,复合语句 最后不需要以分号“;”结束,但它内部的各条语句仍需以分号“;”结束 。复合语句的一般形式为: 局部变量定义; 语句l; 语句2; 复合语句在执行时,其中的各条单语句按顺序依次执行,整个 复合语句在语法上等价于一条单语句,因此在C51中可以将复合语句视 为一条单语句。通常复合语句出现在函数中,实际上,函数

3、的执行部分 (即函数体)就是一个复合语句;复合语句中的单语句一般是可执行语 句,此外还可以是变量的定义语句(说明变量的数据类型)。在复合语 句内部语句所定义的变量,称为该复合语句中的局部变量,它仅在当前 这个复合语句中有效。利用复合语句将多条单语句组合在起,以及在 复合语句中进行局部变量定义是C51语言的一个重要特征。C51的输入输出在C51语言中,它本身不提供输入和输出语句,输入和输出操作是由函 数来实现的。在C51的标准函数库中提供了一个名为“stdio.h”的一般I/O 函数库,它当中定义了C51中的输入和输出函数。当对输入和输出函数 使用时,须先用预处理命令“#include ”将该函

4、数库包含到文 件中。在C51的一般I/O函数库中定义的I/O函数都是通过串行接口实现, 在使用I/O函数之前,应先对MCS-51单片机的串行接口进行初始化。选择 串口工作于方式2(8位自动重载方式),波特率由定时器/计数器1溢出率 决定。例如,设系统时钟为12MHZ,波特率为2400,则初始化程序如下 : SCON=0x52; TMOD=0X20; TH1=0xf3; TR1=1;格式字符数据类型输出格式 dint带带符号十进进制数uint无符号十进进制数 oint无符号八进进制数 xint无符号十六进进制数,用“af”表示 Xint无符号十六进进制数,用“AF”表示 ffloat带带符号十进

5、进制数浮点数,形式为为-dddd.dddd e,Efloat带带符号十进进制数浮点数,形式为为-d.ddddEdd g,Gfloat自动选择动选择 e或f格式中更紧紧凑的一种输输出格式 cchar单单个字符 s指针针指向一个带结带结 束符的字符串 p指针针带带存储储器批示符和偏移量的指针针,形式为为M:aaaa 其中,M可分别为别为 :C(code),D(data),I(idata), P(pdata) 如M为为a,则则表示的是指针针偏移量格式字符数据类类型输输出格式 dint指针针带带符号十进进制数 uint指针针无符号十进进制数 oint指针针无符号八进进制数 xint指针针无符号十六进进

6、制数 f,e,Efloat指针针浮点数 cchar指针针字符 sstring指针针字符串C51程序基本结构与相关语句C51的基本结构一顺序结构顺顺序结结构是最基本、 最简单简单 的结结构,在这这 种结结构中,程序由低 地址到高地址依次执执 行,图给图给 出顺顺序结结构 流程图图,程序先执执行A 操作,然后再执执行B操 作。AB顺顺序结结构流程图图选择结构可使程序根据不同的情况,选择执行不同的 分支,在选择结构中,程序先都对一个条件进行判断。当条 件成立,即条件语句为“真”时,执行一个分支,当条件不成 立时,即条件语句为“假”时,执行另一个分支。如图4.4, 当条件S成立时,执行分支A,当条件P

7、不成立时,执行分支 B。二选择结构条件P语句A语句B成立不成 立在C51中,实现选择结构的语句为if/else,if/else if语句。另外在 C51中还支持多分支结构,多分支结构既可以通过if和else if语句嵌套 实现,可用swith/case语句实现。在程序处理过程中,有 时需要某一段程序重复执行多 次,这时就需要循环结构来实 现,循环结构就是能够使程序 段重复执行的结构。循环结构 又分为两种:当(while)型 循环结构和直到(do.while )型循环结构。 (1)当型循环结构 当型循环结构如图4-3,当条 件P成立(为“真”)时,重复 执行语句A,当条件不成立( 为“假”)时才

8、停止重复,执行 后面的程序。三循环结构条件P语句A成立不成 立当型循环结构 (2)直到型循环结构 直到型循环结构如图4-4, 先执行语句A,再判断条件P ,当条件成立(为“真”)时 ,再重复执行语句A,直到 条件不成立(为“假”)时才 停止重复,执行后面的程序 。条件P语句A成立不成 立图4.6 直到型循环结构构成循环结构的语句主要有:while、do while、for、goto等。二、 if语句 if语句是C51中的一个基本条件选择语句,它通常有三种格式: (1)if (表达式) 语句; (2)if (表达式) 语句1; else 语句2; (3)if (表达式1) 语句1; else i

9、f (表达式2) (语句2;) else if (表达式3) (语句3;) else if (表达式n-1) (语句n-1;) else 语句n【例】 if语句的用法。 (1)if (x!=y) printf(“x=%d,y=%dn”,x,y); 执行上面语句时,如果x不等于y,则输出x的值和y的值。 (2)if (xy) max=x; else max=y; 执行上面语句时,如x大于y成立,则把x送给最大值变量max,如x大 于y不成立,则把y送给最大值变量max。使max变量得到x、y中的大数 。 (3)if (score=90) printf(“Your result is an An”

10、); else if (score=80) printf(“Your result is an Bn”); else if (score=70) printf(“Your result is an Cn”); else if (score=60) printf(“Your result is an Dn”); else printf(“Your result is an En”); 执行上面语句后,能够根据分数score分别打出A、B、C、D、E五个 等级。三、 switch/case语句if语句通过嵌套可以实现多分支结构,但结构复杂。switch是C51 中提供的专门处理多分支结构的多分支选

11、择语句。它的格式如下: switch (表达式) case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; case 常量表达式n:语句n;break; default:语句n+1; 说明如下: (1)switch后面括号内的表达式,可以是整型或字符型表达式。 (2)当该表达式的值与某一“case”后面的常量表达式的值相等时 ,就执行该“case”后面的语句,然后遇到break语句退出switch语句 。若表达式的值与所有case后的常量表达式的值都不相同,则执行 default后面的语句,然后退出switch结构。 (3)每一个case常量表达式的值必须不同

12、否则会出现自相矛盾的 现象。(4)case语句和default语句的出现次序对执行过程没有影响。 (5)每个case语句后面可以有“break”,也可以没有。有break语句, 执行到break则退出switch结构,若没有,则会顺次执行后面的语句,直 到遇到break或结束。 (6)每一个case语句后面可以带一个语句,也可以带多个语句,还可 以不带。语句可以用花括号括起,也可以不括。 (7)多个case可以共用一组执行语句。 【例4-14】 switch/case语句的用法。 对学生成绩划分为AD,对应不同的百分制分数,要求根据不同的等级 打印出它的对应百分数。可以通过下面的switch/

13、case语句实现。 switch(grade) case A;printf(”90100n”);break; case B;printf(”8090n”);break; case C;printf(”7080n”);break; case D;printf(”6070n”);break; case E;printf(” /包含特殊功能寄存器库 #include /包含I/O函数库 void main(void) /主函数 int i,s=0; /定义整型变量x和y i=1; SCON=0x52; /串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; while (i /包含特殊

14、功能寄存器库 #include /包含I/O函数库 void main(void) /主函数 int i,s=0; /定义整型变量x和y i=1; SCON=0x52; /串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; do /累加1100之和在s中 s=s+i; i+; while (i /包含特殊功能寄存器库 #include /包含I/O函数库 void main(void) /主函数 int i,s=0; /定义整型变量x和y SCON=0x52; /串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; for (i=1;i100) break; pr

15、intf(“%fn”,area); 八、 break和continue语句continue语句用在循环结构中,用于结束本次循环,跳过循环 体中continue下面尚未执行的语句,直接进行下一次是否执行循环的 判定。continue语句和break语句的区别在于:continue语句只是结 束本次循环而不是终止整个循环;break语句则是结束循环,不再进行 条件判断。 【例4-20】 输出100200间不能被3整除的数。 for (i=100;iy?x:y; return(z); 也可以用成这样: int max(x,y) int x,y; int z; z=xy?x:y; return(z); 函数的嵌套与递归一函数的嵌套在一个函数的调用过程中调用另一个函数。C51编译器 通常依靠堆栈来进行参数传递,堆栈设在片内RAM中, 而片内RAM的空间有限,因而嵌套的深度比较有限,一 般在几层以内。如果层数过多,就会导致堆栈空间不够 而出错。 【例4-25】 函数的嵌套调用 #include /包含特殊功能寄存器库 #include /包含I/O函数库 extern serial_initial(); int max(int a,

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

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号