AVR单片机C语言编程.ppt
《AVR单片机C语言编程.ppt》由会员分享,可在线阅读,更多相关《AVR单片机C语言编程.ppt(99页珍藏版)》请在三一办公上搜索。
1、机电系统控制电路设计,张志安,南京理工大学,机电系统控制电路设计,2,2023/7/5,1 C语言基础2 数据类型、运算符和表达式3 程序控制语句4 函数及其调用5 编译预处理6 数组及指针,AVR单片机C语言编程基础,机电系统控制电路设计,3,2023/7/5,1 C语言基础,例子 1,机电系统控制电路设计,4,2023/7/5,例子 2,1 C语言基础,机电系统控制电路设计,5,2023/7/5,1 C语言基础,例子 3,机电系统控制电路设计,6,2023/7/5,1 C语言基础,/*给定半径,求圆的面积*/#define PI 3.14159/*编译预处理宏替换*/#include/*编
2、译预处理文件包含*/#include/*编译预处理文件包含*/main()/*主函数*/float r,s;/*定义变量r、s类型为单精度实型*/r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/printf(半径R=%f 时,面积S=%f n,r,s);/*输出结果*/,例 4 求圆面积程序 area.c,机电系统控制电路设计,7,2023/7/5,关于编译预处理(宏定义),1 C语言基础,#define PI 3.14159-不带参数#define S(a,b)a*b-带参数#define 宏定义命令 PI 符号常量(宏名,最好用大写,以区别一般变量)3.14
3、159 宏体(可以是一个表达式,如3+4)作用:用简单符号代表宏体部份内容(编译时会先自动替换)意义:直观/多次使用/便于修改注意:#define 可出现在程序的任一位置(作用范围:由此行到程序末尾)宏定义不是C语句,不必在行未加分号,否则会连分号一起置换。,机电系统控制电路设计,8,2023/7/5,1 C语言基础,#include stdio.h“头文件”(标准前导文件)C语言是一种“装配式”语言,许多常规的工作如输入、输出、数学函数等,往往事先由人做成各种“程序模块”(库函数),存放在各种所谓“头文件”(.h)中。使用时只需进行以下处理#include“头文件名”或#include 在程
4、序的执行部分调用该库函数:函数名(参数)文件包含的作用,就是根据需要把相应的某个“头文件”的内容在编译时先整体嵌入所编的程序中。用户也可以将自己设计的程序模块等做成“头文件”,供其他程序“包含”。,关于编译预处理(文件包含),机电系统控制电路设计,9,2023/7/5,1 C语言基础,标识符被#define 命令定义过#ifdef 标识符程序段1#else程序段2#endif,关于编译预处理(条件编译),标识符未被#define 命令定义过#ifndef 标识符程序段1#else程序段2#endif,#if 表达式-表达式真执行程序段1,假执行程序段2程序段1#else程序段2#endif,机
5、电系统控制电路设计,10,2023/7/5,1 C语言基础,关于主函数 main(),C语言是一种函数式语言,它的一个函数实际上就是一个功能模块C程序的基本组成是函数。一个C程序是由一个固定名称为main的主函数和若干个其他函数(可没有)组成。一个C程序必须有一个、也只能有一个主函数。主函数在程序中的位置可以任意,但程序执行时总是从主函数开始,在主函数内结束。主函数可以调用其他各种函数(包括用户自己编写的),但其他函数不能调用主函数。,机电系统控制电路设计,11,2023/7/5,主函数的一般形式:,main()说明部分程序段(定义数据类型)执行部分程序段(给出操作指令),说明部分(简单程序可
6、能没有此部分):float r,s;/*定义变量r、s类型为单精度实型*/int a,b;/*定义变量a、b类型为整型*/执行部份:输入、赋值、计算、控制、输出等:r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/printf(半径R=%f 时,面积S=%f n,r,s);/*输出结果*/,1 C语言基础,机电系统控制电路设计,12,2023/7/5,其他函数,标准库函数只能调用。使用方法:先“包含”,即将该函数所在头文件包含在程序中。后调用。调用方式:函数名(参数),例:#include#include main()s=PI*pow(r,2);printf(“半
7、径R=%f 时,面积S=%fn”,r,s);说明:pow(x,y)求xy(math.h中的标准数学函数)printf();(stdio.h中的标准输出函数),1 C语言基础,机电系统控制电路设计,13,2023/7/5,其他函数,自编(定义)函数:先定义(规定函数类型、函数名和函数功能)后调用(使用所定义的函数实现其功能)定义函数:函数类型 函数名(形式参数)(函数体)调用函数:函数名(参数),求三个数的平均值float average(float x,float y,float z)/*定义函数average()*/float aver;aver=(x+y+z)/3;return(aver)
8、;main()/*主函数*/float a,b,c,ave;a=3.5;b=4.6;c=7.9;ave=average(a,b,c);/*调用自定义函数average()*/printf(average=%f,ave);,1 C语言基础,机电系统控制电路设计,14,2023/7/5,关于语句:数据类型定义语句,语句形式 变量类型关键字 变量名;float r,s;定义r、s为单精度实型变量 int r,s;定义r、s为整型变量【注意】在C语言程序中,所有变量都要先定义后使用,否则就会出现编译错误提示,如:Error:Undefined symbol a in function main Let
9、s try,变量类型关键字 字符型(描述文字性的数据)char 数值型:整型(在机内是准确表示的)int 实型(在机内一般是近似表示的)float(有效数字6位)double(有效数字16位),变量名 C语言标识符(变量名、符号常量名、函数名等)命名:组成:字母、数字、下划线 开头:字母、下划线 长度:32字符【注意】大小写为不同字符(变量名一般小写,符号常量 名一般大写),还要注意不得与关键字同名。,1 C语言基础,机电系统控制电路设计,15,2023/7/5,关于语句:赋值语句,作用:使变量获得具体的运算值。语句形式 变量名=表达式(常量、变量、函数、算式及其混合);r=1.0;/*变量r
10、赋初值*/s=PI*pow(r,2);/*计算圆面积s*/变量赋初值亦可在数据类型定义时进行:float r=1.0,s;把变量声明语句与赋值结合在一起的语句,术语上称为“初始化语句”。,1 C语言基础,机电系统控制电路设计,16,2023/7/5,关于语句:输出语句,作用:将运算结果送到显示器屏幕显示出来语句形式 printf();printf(半径R=%f 时,面积S=%fn,r,s);printf(“Hello,everyone!”);【注意】C语言本身没有输入、输出语句,其功能要借用有关函数来实现。%f 格式字符串 n 控制字符(转义字符)n表示回车换行 引号中的其他部分照原样输出,1
11、 C语言基础,机电系统控制电路设计,17,2023/7/5,关于格式字符串,表示该处将用printf语句引号外对应表达式的值替换后输出 例:若 r=1,s=3.14 printf(“半径R=%f 时,面积S=%fn”,r,s);输出结果:半径R=1 时,面积S=3.140000常用格式字符串:字符型:%c 单字符%s 字符串 数值型:%d 整数(十进制)%f 实数(小数形式,默认为6位小数),例一 int x=5;f loat y=3;printf(a=%d,b=%f,c=%s,x,y,abcdefg);,输出结果:a=5,b=3.000000,c=abcdefg,例二 int x=5;f l
12、oat y=3;printf(a=%d,b=%f,c=%s,x+2,y*3,123defg);,输出结果:a=7,b=9.000000,c=123defg,1 C语言基础,机电系统控制电路设计,18,2023/7/5,C语言程序的基本结构,一个C程序是由一个固定名称为main的主函数和若干个其他函数(可缺省)组成。其基本结构一般形式如右图所示。,1 C语言基础,返回,机电系统控制电路设计,19,2023/7/5,2 数据类型、运算符和表达式,机电系统控制电路设计,20,2023/7/5,2 数据类型、运算符和表达式,机电系统控制电路设计,21,2023/7/5,2 数据类型、运算符和表达式,可
13、知对不同数据类型占用的存储空间:charshort=intlong=floatdouble,如求某一类型数据所占存储字节数,可用运算符:,sizeof(类型关键字),Example:main()printf(“char:%d字节n”,sizeof(char);printf(“float:%d字节n”,sizeof(float);,结果显示:char:1字节float:4字节,机电系统控制电路设计,22,2023/7/5,2 数据类型、运算符和表达式,常量,整型常量 十进制数 12-123 八进制数 012-012 十六进制数 0 x12-0 x12实型常量 十进制形式 123.45 2.0 1
14、23.(必有小数点)指数形式 2.45e-4 1.13E3(e或E前为数,后为整数)实型常量本身无单或双精度,其机内精度取决于赋给那类变量字符常量/字符串常量,机电系统控制电路设计,23,2023/7/5,2 数据类型、运算符和表达式,变量,注意:变量必须先定义后使用变量名必须符合标识符命名规则,例:b=(a=3+5)a=b=c=d=3+5(结果均为8)例:int a=b=c=d=3+5(语法错误,除非b,c,d定义过)正确:int a,b=a=3+5;例:c=3+(a=5)*6 结果:c=33,a=5(一个语句可以有几个赋值运算),机电系统控制电路设计,24,2023/7/5,2 数据类型、
15、运算符和表达式,运算符,算术运算符+*/%(取余数模)+,+(自加运算符)-(自减运算符)用法:+1-1 运算a、前缀形式 int i=5;x=+i;y=i;(x=6,i=6,y=6)int i=5;+i;y=i;(i=6,y=6)b、后缀形式 int i=5;x=i+;y=i;(x=5,i=6,y=6)int i=5;i+;y=i;(i=6,y=6),机电系统控制电路设计,25,2023/7/5,2 数据类型、运算符和表达式,运算符,自反算术赋值运算符(复合的赋值运算符)+=-=*=/=,解法:将b*=看作b=b*(),其余类推 例:c=b*=a+3 相当于(1)a+3(2)b=b*(a+3
16、)(3)c=b 例:若 i、j 的初值分别为3和4,则执行 j+=i-=1 后i、j 的值为多少?,解题步骤:i=i-1=3-1=2 j=j+i=4+2=6结果:i=2,j=6,机电系统控制电路设计,26,2023/7/5,2 数据类型、运算符和表达式,运算符,关系运算(比较运算)=!=关系表达式:含有关系运算符的表达式 特别注意 aXb 之类算式的正确写法:a=x&x=b(错误写法:a=X=b),【例一】main()int m=5;if(m+5)printf(“m5”);else printf(“m=%d”,m-);printf(“m=%d”,m-);,运算结果:m=6,m=5,【例二】ma
17、in()int m=5;if(+m5)printf(“m5”);else printf(“m=%d”,m-);printf(“m=%d”,m-);,运算结果:m5,机电系统控制电路设计,27,2023/7/5,2 数据类型、运算符和表达式,运算符,逻辑运算&(与运算符)运算符两边均为真时,结果为真|(或运算符)运算符两边均为假时,结果为假!(非运算符)将运算符右边真假倒置 逻辑运算符的任一端如果为非0数,则视为“真”,为0则视为假。【例】printf(“%d”,!3+5)结果为5 printf(“%d”,!0+5)结果为6注意:!优先于关系运算符,与+、-同级。,【例一】main()int a
18、=1,b=2,m=2,n=2;(m=ab),运行结果:n=2,【例二】main()int a=1,b=2,m=2,n=2;(m=ba),运行结果:n=3,原因:在&和|的左边如果能判断出结果,则右边不再作运算。结论:在逻辑表达式的求解中,并不是所有的逻辑运算符都会被执行。只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,机电系统控制电路设计,28,2023/7/5,2 数据类型、运算符和表达式,运算符,条件运算?:(三元运算符,即需连接三个运算量)一般形式:e1?e2:e3(e1为条件表达式,e2,e3为任意类型表达式)功能:如果e10(为真),运算结果为e2的值。如果e1
19、=0(为假),则取e3的值。,【例】分别令x=3,x=0,x=-5,求运行结果。main()int x,y;printf(“Input x=”);scanf(“%d”,结果:x=3,y=1x=0,y=0 x=-5,y=-1,机电系统控制电路设计,29,2023/7/5,2 数据类型、运算符和表达式,运算符,位操作运算符&(与AND)|(或OR)(异或XOR)(非NOT)(右移),机电系统控制电路设计,30,2023/7/5,2 数据类型、运算符和表达式,运算符的优先级,返回,机电系统控制电路设计,31,2023/7/5,3 程序控制语句,条件控制语句,if语句,1、简单if语句if(表达式)程
20、序段 下面程序的功能是:如果输入的数据大于等于60,则输出You are passed!:scanf(“%d”,机电系统控制电路设计,32,2023/7/5,3 程序控制语句,条件控制语句,2、if-else语句if(表达式)程序段 else 程序段,如果输入的数据大于等于60,则输出 You are passed!否则输出You failed!scanf(“%d”,if语句,机电系统控制电路设计,33,2023/7/5,3 程序控制语句,条件控制语句,#include main()int x,y=100,z=0;x=180;if(xy)/交换x和y z=x;x=y;y=z;rintf(x=%
21、d,y=%dn,x,y);,#include main()int x,y=100,z=0;x=180;if(xy)z=x;x=y;y=z;rintf(x=%d,y=%dn,x,y);,运行结果:x=180,y=100,运行结果:x=100,y=0,if语句,机电系统控制电路设计,34,2023/7/5,3 程序控制语句,条件控制语句,第3种if语句if(表达式1)语句1;else if(表达式2)语句2;else if(表达式n)语句n;else 语句n+1;,if(x0,if语句,机电系统控制电路设计,35,2023/7/5,3 程序控制语句,条件控制语句,switch语句,switch(变
22、量或表达式P)case 常量表达式C1:程序段S1 break;case 常量表达式C2:程序段S2 break;.case 常量表达式Cn:程序段Sn break;default:程序段Sn+1 break;,机电系统控制电路设计,36,2023/7/5,#include main()char ch;printf(input the mark(A,B,C,D,E or F);scanf(%c,3 程序控制语句,条件控制语句,switch语句,运行结果:input the mark(A,B,C,D,E or F)D 70,机电系统控制电路设计,37,2023/7/5,break子句可以省略,但
23、是否省略break子句,要根据算法的逻辑而定。因为没有了break语句,switch语句会被执行到语句结束。,3 程序控制语句,条件控制语句,switch语句,char ch=N;switch(ch)case Y:printf(Yesn);break;case N:printf(Non);break;case A:printf(Alln);break;,char ch=N;switch(ch)case Y:printf(Yesn);break;case N:printf(Non);case A:printf(Alln);break;,输出:No,输出:No All,机电系统控制电路设计,38,
24、2023/7/5,3 程序控制语句,循环控制语句,while语句,while语句的形式:while(表达式P)程序段S,int a;long sum;/sum should be long type sum=0;a=1;while(a=100)sum+=a;a+;printf(1+2+.+%d=%ldn,100,sum);,while语句的例子:计算1+2+3+100的值,通常情况下,程序中会利用一个变量来控制while语句的表达式P的值,这个变量被称为循环控制变量。在执行while语句之前,循环控制变量必须初始化,否则执行的结果将是不可预知的。上面的程序重新编写,其运行结果将是不可预知的,因
25、为a未初始化:,int a;long sum;/sum should be long type sum=0;/a should be initialized here while(a=100)sum+=a;a+;printf(1+2+.+%d=%ldn,100,sum);,机电系统控制电路设计,39,2023/7/5,3 程序控制语句,循环控制语句,while语句,有关while语句的几点说明,1、要在while语句的某处(表达式P或循环体内)改变循环控制变量的值,否则极易构成死循环。下面的while语句便是死循环:,x=2;while(x10)/死循环,因为x的值没有变化,永远小于10 su
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVR 单片机 语言 编程

链接地址:https://www.31ppt.com/p-5416242.html