版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.1认识C语言《单片机应用技术(C语言版)》3.1.1第一个C语言程序“//”是单行注释符号,通常用从该符号开始直到一行结束的内容来说明相应语句的意义,或者对重要的代码行、段落进行提示,方便程序的编写、调试及维护工作,提高程序的可读性。程序在编译时,不对这些注释内容做任何处理。C语言的另一种注释符号是“/**/”。在程序中可以使用这种成对注释符进行多行注释,注释内容从“/*”开始,到“*/”结束,中间的注释文字可以是多行文字。这两行是C语言的程序预处理部分:文件包含语句,表示把语句中指定文件的全部内容复制到此处,与当前的源程序文件链接成一个源文件。定义函数delay()。delay()函数的功能是延时,用于控制发光二极管的闪烁速度。定义主函数main()。main()函数是C语言中必不可少的主函数,也是程序开始执行的函数。3.1.2C语言的基本结构程是规矩和法则的意思,是指按照一定的结构、框架办事;序是指以时间为基准的先后关系,在时间上有先有后、有始有终。点亮LED让LED亮一会儿熄灭LED让它灭一会儿重复以上过程1个信号灯闪烁编写程序就是把我们想要单片机做的事情,用我们的语言,按照一定框架结构和时间顺序写出来。点亮LED让LED亮一会儿熄灭LED让它灭一会儿重复以上过程信号灯闪烁信号灯闪烁控制C语言程序
准备工作
预编译步骤1步骤2步骤3步骤4步骤5步骤6步骤7步骤8步骤9步骤10步骤11步骤12步骤13步骤14步骤15voidmain(){语句1;语句2;语句3;语句4;语句5;语句6;语句7;语句8;语句9;语句10;语句11;语句12;语句13;语句14;语句15;}
准备工作
预编译步骤1步骤2步骤3步骤4步骤5步骤6步骤7步骤8步骤9步骤10步骤11步骤12步骤13步骤14步骤15voidmain(){语句1;语句2;语句3;语句4;语句5;语句6;语句7;语句8;语句9;语句10;语句11;语句12;语句13;语句14;语句15;}函数头函数体
准备工作
预编译步骤1步骤2步骤3步骤4步骤5步骤6步骤7步骤8步骤9步骤10步骤11步骤12步骤13步骤14步骤15voidmain(){语句1;语句2;语句3;语句4;语句5;语句6;语句7;语句8;语句9;语句10;语句11;语句12;语句13;语句14;语句15;}函数头函数体主函数程序总是从主函数开始执行,到主函数结束;主函数名字main不能修改。
预编译voidmain(){语句1;语句2;语句3;语句4;语句5;语句6;语句7;语句8;语句9;语句10;语句11;语句12;语句13;语句14;语句15;}重复使用function1(){语句3;语句4;语句5;}
预编译voidmain(){语句1;语句2;function1();语句6;语句7;function1();语句11;语句12;语句13;语句14;语句15;}完成相对独立的一个功能function1(){语句3;语句4;语句5;}
预编译intmain(){语句1;语句2;function1();语句6;语句7;function1();语句11;语句12;语句13;语句14;语句15;}function2(){语句12;语句13;语句14;语句15;}完成相对独立的一个功能function1(){语句3;语句4;语句5;}
预编译intmain(){语句1;语句2;function1();语句6;语句7;function1();语句11;语句12;语句13;语句14;语句15;}function2(){语句12;语句13;语句14;语句15;}
预编译intmain(){语句1;语句2;function1();语句6;语句7;function1();function2();}C语言程序是以函数形式来组织程序结构的一个C语言的源程序是由一个或若干个函数组成的每个C程序都必须有,且仅有一个主函数main()
程序的执行总是从主函数开始,最后在主函数中结束整个程序程序执行顺序与函数的排列顺序无关信号灯闪烁控制C语言程序预编译子函数delay主函数//是单行注释符/*…*/是多行注释符语句以;作为结束符可以一条语句书写多行,也可以一行书写多个语句C语言大小写敏感3.1.3C语言的特点C语言由函数构成。函数包括标准函数和自定义函数,每个函数就是一个功能相对独立的模块。C语言还提供了多种结构化的控制语句,如顺序、条件、循环结构语句,满足程序设计结构化的要求。结构化语言C语言具有丰富的数据类型,便于实现各类复杂的数据结构,它还有与地址密切相关的指针及其运算符,直接访问内存地址,进行位(bit)一级的操作,能实现汇编语言的大部分功能,因此C语言被称为“高级语言中的低级语言”。
用C语言对51单片机开发应用程序,只要求开发者对单片机的存储器结构有初步了解,而不必十分熟悉处理器的指令集和运算过程,寄存器分配、存储器的寻址及数据类型等细节问题由编译器管理,不但减轻了开发者的负担,提高了效率,而且程序具有更好的可读性和可移植性。丰富的数据类型用C语言开发单片机应用系统程序,便于模块化程序设计。可采用开发小组来规划和完成项目,分工合作,灵活管理。基本上杜绝了因开发人员变化所造成的对项目进度、后期维护及升级的影响,从而保证了整个系统的品质、可靠性及可升级性。便于维护管理(1)不要求编程者详细了解单片机的指令系统,但需了解单片机的存储器结构。(2)寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理。(3)程序结构清晰,可读性强。(4)编译器提供了很多标准函数,具有较强的数据处理能力。C语言优点感谢您的观看Thanks
for
your
attention.
3.2C语言的基本语句《单片机应用技术(C语言版)》3.2.1表达式语句和复合语句1+1=2圆的面积:S=π*r²三斜求积术:
由运算符和运算对象组成具有特定含义运算结果一般是一个数值
由运算符和运算对象组成,具有特定含义,运算结果必定是一个值的式子,就是表达式
表达式举例:1,π,1/4,r,a,b,c
1+1=2圆的面积:S=π*r²三斜求积术:
信号灯闪烁控制C语言程序i----自减运算符LED=0LED=1=赋值符,把式子左边表达式的值赋给右边
S=π*r*rS=sqrt((
c*c*a*a-pow((c*c+a*a-b*b)/2,2))/4)算术表达式LED=0赋值表达式a==b关系表达式3>5&&a>=b逻辑表达式a|0x0f位运算表达式a=3*5,a*4逗号表达式a?b++:c++条件表达式C语言中的表达式非常丰富,在程序中无处不在,就像我们身体中的血液一样,所以有人也把C语言称为表达式语言,各种表达式具体的描述方式,在使用的时候还会再学习。表达式语句:表达式加上分号信号灯闪烁控制C语言程序复合语句:是指把多个语句用花括号括起来信号灯闪烁控制C语言程序在程序中应把复合语句看成是单条语句,而不是多条语句。复合语句在程序运行时,{}中的各行单语句是依次顺序执行的。在C语言的函数中,函数体就是一个复合语句。空语句:什么也不做,占用时间,用于延时信号灯闪烁控制C语言程序3.2.2选择语句选择结构程序条件判断事件1事件2假(N)真(Y)选择结构程序对给定的条件进行判断,并根据判断结果选择执行的程序,称为选择结构程序。单分支选择双分支选择多分支选择选择结构程序条件判断事件1事件2真(Y)假(N)双分支结构选择结构程序条件判断事件1单分支结构真(Y)假(N)选择结构程序多分支结构if语句if语句是C语言的选择程序结构控制语句。
if语句可以完成单分支选择、双分支选择和多分支选择结构控制。if语句的功能模型
如果(满足某个条件)
就{
执行某个动作
}
如果(今天是周一)
就{
早晨1、2节上课
}if语句的语法if(表达式){
语句组;}if语句例程if(m==0){delay(1200);
if(k){ w=0x01;}}“表达式”可以是任意表达式,只要表达式的值
非0
“真” 0“假”if语句例程if(m==0){delay(1200);
if(k){ w=0x01;}}“表达式”必须用()括起来;“语句组”必须用{}括起来。if语句例程if(m==0){delay(1200);
if(k){ w=0x01;}}花括号“{}”里面的语句组如果只有一条语句,可以省略花括号。If-else语句的语法if(表达式){
语句组1;}else{
语句组2;}if-else语句的执行过程if(K==0){w=0x01;P1=~w; }elseP1=0x00;真否则——假ifelseif语句ll
if(表达式1){语句组1;}elseif(表达式2){语句组2;}
……elseif(表达式n){语句组n;}else{语句组n+1;}ifelseif语句ll
实例已知:a=9,b=4,求P1的数值if(a<3){P1=0x01;b=10;
}elseif(a>b){P1=0x02;}elseP1=0x03;假不执行真执行选择结构程序多分支结构If-else-if语句switch语句switch(表达式){
case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法switch(i)
{case1:P1=0x00;break;
case2:P1=0x55;break;
case3:P1=0x0f;break;
case4:P1=0xf0;break;
default:break;}switch(表达式){
case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法switch(表达式){
case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法注意,这里是冒号“:”,并不是分号“;”switch(表达式){
case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法每一个case后的常量表达式必须是不同的值以保证分支的唯一性。switch(表达式){
case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法每一个case语句后都要跟一个break用来退出switch语句。switch(表达式){
case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法default总是放在最后,这时default后不需要break语句。default不是必须,如果没有default,当switch后面圆括号中表达式的值与所有case后面的常量表达式的值都不相等时,则不执行任何一个分支直接退出switch语句。switch(表达式){
case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法在switch-case语句中,多个case可以共用一条执行语句,如:case'A':case'B':case'c':printf(">60\n");break;switch(表达式){
case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法如果在case后面包含多条执行语句时,不需要像if语句那样加大括号,进入某个case后,会自动顺序执行本case后面的所有执行语句。.练习已知:a=9,b=4,求P1的数值if(a<3){i=2;b=10;
}elseif(a>b)i=1;elsei=3;switch(i){case1:P1=0x00;break; case2:P1=0x55;break; case3:P1=0x0f;break; case4:P1=0xf0;break; default:break;}假不执行3.2.3循环语句1+2+3+4+5+6+……+100=?和和和……和……重复了99次加法运算循环结构程序循环结构程序实现一种有规律的重复的程序,称为循环结构程序。i>100?Y开始i=1;s=0;s=s+i;i=i+1;结束N1+2+3+4+5+6+……+100=?循环初值设置重复执行的程序段——循环体循环结束条件循环结构程序实现一种有规律的重复的程序,称为循环结构程序。whiledowhileforwhile(表达式){语句组;}while语句的语法“当型”循环while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}while(表达式){语句组;}1+2+3+4+5+6+……+100=?while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}while(表达式){语句组;}1+2+3+4+5+6+……+100=?while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?循环初值设置必须放在循环之外。while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?表达式可以是任意表达式,“非0”为真,“0”为假。while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?当表达式为常数时,形成无限循环,例如:while(1){……}因为单片机开始运行后是不能停下来的,所以嵌入式程序中都采用无限循环结构。while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?while(1);称为停机语句,执行原地踏步操作。一般用于程序调试。while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?While()语句中,如果表达式的结果一开始就为“假”,则循环体一次也不执行。while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?循环体一般是一个复合语句,需用{}括起来。while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?循环体中应有使循环结束的语句。否则会出现不希望的无限循环–––“死”循环。while语句的语法i=0;s=0;
while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?循环体中应有使循环结束的语句。否则会出现不希望的无限循环–––“死”循环。循环结构程序实现一种有规律的重复的程序,称为循环结构程序。whiledowhilefordo{语句组;}while(表达式);do-while语句的语法“直到型”循环i>100?Y开始i=1;s=0;s=s+i;i=i+1;结束N1+2+3+4+5+6+……+100=?i=0;s=0;
do{s=s+i;i++;}while(i<=100);i=0;s=0;
do{s=s+i;i++;}while(i<=100);do{语句组;}while(表达式);1+2+3+4+5+6+……+100=?do-while语句的语法i=0;s=0;
do{s=s+i;i++;}while(i<=100);do{语句组;}while(表达式);1+2+3+4+5+6+……+100=?do-while语句的语法i=0;s=0;
do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?循环初值设置必须放在循环之外。do-while语句的语法i=0;s=0;
do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?表达式可以是任意表达式,“非0”为真,“0”为假。do-while语句的语法while语句的语法i=0;s=0;
do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?如果表达式的结果一开始就为“假”,则循环体也要执行一次。i=0;s=0;
do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?表达式后面一定要有分号“;”。do-while语句的语法i=0;s=0;
do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?循环体一般是一个复合语句,需用{}括起来。do-while语句的语法i=0;s=0;
do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?循环体中应有使循环结束的语句。否则会出现不希望的无限循环–––“死”循环。do-while语句的语法do-while语句的语法i=0;s=0;
do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?循环体中应有使循环结束的语句。否则会出现不希望的无限循环–––“死”循环。while与do-while语句比较while语句dowhile语句先判断,后执行先执行,后判断循环体可能一次也不执行循环体至少执行一次循环结构程序实现一种有规律的重复的程序,称为循环结构程序。whiledowhileforfor语句while语句1+2+3+4+5+6+……+100=?循环初值设置重复执行的程序段——循环体修改循环变量循环结束条件判断i=1;s=0;
while(i<=100){s=s+i;i++;}i<=100?Y开始i=1;s=0;s=s+i;i=i+1;结束N1+2+3+4+5+6+……+100=?i=1;s=0;
while(i<=100){s=s+i;i++;}s=0;for(i=1;i<=100;i++){s=s+i;}1+2+3+4+5+6+……+100=?i=1;s=0;
while(i<=100){s=s+i;i++;}s=0;for(i=1;i<=100;i++){s=s+i;}for(表达式1;表达式2;表达式3){语句组;}for语句的语法表达式1:循环变量赋初值i=1;表达式2:循环条件判断i<=100;表达式3:修改循环变量i++;s=0;for(i=1;i<=100;i++){s=s+i;}for(表达式1;表达式2;表达式3){语句组;}for语句的语法表达式2Y表达式1;语句组表达式3N1+2+3+4+5+6+……+100=?s=0;for(i=1;i<=100;i++){s=s+i;}for语句的语法s=0;i=1;for(;i<=100;i++){s=s+i;}s=0;i=1;for(;i<=100;){s=s+i;i++;}s=0;for(i=1;;i++){s=s+i;if(i<=100)break;}for语句中的三个表达式都是可选项,可以省略,但必须保留“;”1+2+3+4+5+6+……+100=?s=0;for(i=1;i<=100;i++){s=s+i;}for语句的语法for(;;){
语句组;}for语句中的三个表达式都省略,但必须保留“;”,无限循环while(1){
语句组;}1+2+3+4+5+6+……+100=?s=0;for(i=1;i<=100;i++){s=s+i;}for语句的语法for(s=0,i=1;i<=100;i++){s=s+i;}for语句表达式1也可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式循环的嵌套一个循环(称为“外循环”)的循环体内包含另一个循环(称为“内循环”)——循环的嵌套循环的嵌套三种循环语句while、do-while、for可以互相嵌套。循环的嵌套while(){
循环体;}while(){循环体
}do{
循环体;}while();do{循环体}while();for(;;){
循环体;}for(;;){循环体}循环的嵌套while(){
循环体;}for(;;){循环体
}do{
循环体;}while();while(){循环体}for(;;){
循环体;}while(){循环体}C语言的基本语句表达式语句If语句Switch语句while语句Dowhile语句For语句break语句continue语句switch(表达式){
case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}break语句的用法1s=0;for(i=1;;i++){s=s+i;if(i<=100)break;}break语句的用法2s=0;for(i=1;;i++){s=s+i;if(i<=100)break;}break语句的用法2在循环嵌套中,一个break语句只能向外跳一层。voidmain(){inti=0,sum;sum=0;for(i=1;i<=20;i++){
if(i%5==0)continue;//若i能整除5,即执行continue语句 sum=sum+i;
}
}continue语句的用法break语句和continue语句结束整个循环。结束本次循环。break语句continue语句感谢您的观看Thanks
for
your
attention.
3.3C语言数据与运算《单片机应用技术(C语言版)》3.3.1数据类型
室外温度:-10.5π=3.1415926半径:r=2.5显示数据:0xfe,0xfd,0xfb…0x7f身高:175延时参数:20000体重:61中国人口:1367820000海拔:-100底下车库:-3无符号字符型(unsignedchar):0~255无符号字符型(unsignedchar):0~255有符号字符型(signedchar或char):-128~+127无符号字符型(unsignedchar):0~255有符号字符型(signedchar或char):-128~+127无符号整型(unsignedint):0~65535无符号字符型(unsignedchar):0~255有符号字符型(signedchar或char):-128~+127无符号整型(unsignedint):0~65535有符号整型(signedint或int):-32768~+32767无符号字符型(unsignedchar):0~255有符号字符型(signedchar或char):-128~+127无符号整型(unsignedint):0~65535有符号整型(signedint或int):-32768~+32767无符号长整型(unsignedlong):0~4294967295无符号字符型(unsignedchar):0~255有符号字符型(signedchar或char):-128~+127无符号整型(unsignedint):0~65535有符号整型(signedint或int):-32768~+32767无符号长整型(unsignedlong):0~4294967295有符号长整型(signedlong或long):-2147483648~+21474837无符号字符型(unsignedchar):0~255有符号字符型(signedchar或char):-128~+127无符号整型(unsignedint):0~65535有符号整型(signedint或int):-32768~+32767无符号长整型(unsignedlong):0~4294967295有符号长整型(signedlong或long):-2147483648~+21474837浮点型(float):±1.175494E-38~±3.402823E+38
室外温度:-10.5π=3.1415926半径:r=2.5显示数据:0xfe,0xfd,0xfb…0x7f身高:175延时参数:20000体重:61中国人口:1367820000海拔:-1000底下车库:-3数据类型长度值域unsignedchar无符号字符型1B0~255signedchar有符号字符型-128~+127unsignedint无符号整型2B0~65535signedint有符号整型-32768~+32767unsignedlong无符号长整型4B0~4294967295signedlong有符号长整型-2147483648~+2147483647float浮点型4B±1.175494E-38~±3.402823E+38*指针型1~3B对象的地址sfr特殊功能寄存器1B0~255sfr1616位特殊功能寄存器2B0~65535bit位类型1b0或1sbit可寻址位0或1C51编译器所支持的数据类型3.3.2常量和变量姓名性别出生日期工作单位职务住址身高体重血型张三男1993-05-01学校学生宿舍21.87135.5B整型浮点型位类型1表示男,0表示女姓名性别出生日期工作单位职务住址身高体重血型张三11993-05-01学校学生宿舍21.87135.5B整型浮点型位类型1表示男,0表示女字符型字符型字符型可变不变不变不变不变可变可变可变可变姓名性别出生日期工作单位职务住址身高体重血型可变不变不变不变不变可变可变可变可变性别出生日期血型不变姓名工作单位职务住址身高体重可变姓名性别出生日期工作单位职务住址身高体重血型可变不变不变不变不变可变可变可变可变性别出生日期血型不变姓名工作单位职务住址身高体重可变常量变量常量是指程序执行期间其值固定,不能改变的量。数据格式示例十进制88、-192十六进制0x58、-0xc0长整型88L、0x58L、o130L整型常量举例流水灯程序数据格式示例十进制88、-192十六进制0x58、-0xc0长整型88L、0x58L、o130L整型常量举例浮点常量举例举例数据格式示例小数0.888、345.3指数8.88e-1、3.453e2数据格式示例英文单引号:’’‘A’、’9’ASCII码65、57字符常量举例ASCII:AmericanStandardCodeforInformationInterchange字符串常量举例数据格式示例说明双引号括起来”china”’c’、’h’、’i’、’n’、’a’、’\0’”A”
’A’、’\0’””空字符串,’\0’每个字符串的尾部都有一个’\0’作为结束符值域数据类型0或1位类型bit位类型常量信号灯闪烁控制C语言程序常量的定义整型常量浮点型常量字符型常量字符串常量位常量性别出生日期血型不变姓名工作单位职务住址身高体重可变常量变量30.8℃变量相当于一个存放数据的容器玻璃杯保温杯酒盅类型不同名字不同内容不同变量的类型变量名变量的值变量类型不同名字不同内容不同变量类型:float变量名:temperature30.8℃变量的值floattemperature;//定义浮点型变量temperature,存放温度值floattemperature,height,weight;//定义浮点型变量temperature,存放温度值
//定义浮点型变量height,存放身高//定义浮点型变量weight,存放体重变量类型变量列表,逗号相隔temperature=30.8;//初值height=178.5;weight=135.5;floattemperature=30.8,height=178.5,weight=135.5;//定义浮点型变量temperature,存放温度值,初值30.8
//定义浮点型变量height,存放身高,初值178.5//定义浮点型变量weight,存放体重,初值135.5unsignedinti,count=1000;//定义整型变量charled=0x7f;
//定义字符型变量bitflag=0;
//定义位变量………………存储器unsignedinti,count=1000;//定义整型变量charled=0x7f;
//定义字符型变量bitflag=0;
//定义位变量count………………iledflag10000x7f00unsignedinti,count=1000;//定义整型变量charled=0x7f;
//定义字符型变量bitflag=0;
//定义位变量存储器led=20000;//整型数赋值给字符变量i=3.1415926;//浮点数赋值给整型变量led=32;//20000-256*78=32i=3;//浮点数赋值给整型变量信号灯闪烁控制C语言程序流水灯程序内部变量(局部变量):在函数内部定义的变量。作用域仅限于函数内。不同函数的内部变量是可以重名的。指定效果流水灯程序变量是程序中存放临时数据的场所;变量需先定义,后使用;编译器按照变量类型,为变量分配存储空间;不同类型的变量分配的存储空间也不一样;在程序执行过程中不断变化,变量中存放的总是最新的值。流水灯程序流水灯程序流水灯程序流水灯程序#define<宏名>
<字符串>#definePI3.1415926
流水灯程序无符号整型数unsignedint
无符号字符型unsignedchar#defineuintunsignedint
#defineucharunsignedchar宏定义一般是放在程序的预编译部分,其作用域就是从宏定义命令起到源程序结束,如果中间要终止其作用域,可以使用#undef命令。宏定义只是纯粹的替换和展开。宏定义不是说明或语句,所以在行末不用加分号,如果加上了分号,替换时连分号也一起替换。
宏名函数名变量名标识符——用来命名程序中的数据或者实体的名字。流水灯程序▲用户标识符不能和C语言关键字重名。▲C语言的标识符主要由英文字母、数字或下划线构成,但开头字符一定是字母或者下划线。a$sumStudent_name_temperatureint2names▲C语言的标识符主要由英文字母、数字或下划线构成,但开头字符一定是字母或者下划线。a 合法$sum 非法Student_name 合法_temperature 合法int 非法2names 非法▲C语言的标识符主要由英文字母、数字或下划线构成,但开头字符一定是字母或者下划线。a 合法
风格晦涩$sum 非法Student_name 合法见名知意_temperature 合法
见名知意int 非法2names 非法▲建议最短的名字,最丰富的含义——见名知意。流水灯程序uint:unsignedint的缩写uchar:unsignedchar的缩写LED:发光二极管的控制接口TIME:流水灯的延时时间delay:延时i,j,k:不重要的中间数据▲用户标识符不能和C语言关键字重名。▲C语言的标识符主要由英文字母、数字或下划线构成,但开头字符一定是字母或者下划线。▲建议最短的名字,最丰富的含义——见名知意。▲建议符号常量一般用大写。▲建议比较长的名字最好用下划线隔开。3.3.3运算符和表达式常用运算符:算术运算符关系运算符逻辑运算符位运算符运算符名运
算
符算术运算符+
*/%++
关系运算符><==>=<=!=逻辑运算符!&&||位运算符<<>>~&|^赋值运算符=条件运算符?:逗号运算符,指针运算符*&求字节数运算符sizeof强制类型转换运算符(类型)下标运算符[]函数调用运算符()运算符名称功
能+加法求两个数的和,例如8+9=17
减法求两个数的差,例如20
9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1
自减1变量自动减1算术运算符22.0/4=5.522/4=5运算符名称功
能+加法求两个数的和,例如8+9=17
减法求两个数的差,例如20
9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1
自减1变量自动减1算术运算符运算符名称功
能+加法求两个数的和,例如8+9=17
减法求两个数的差,例如20
9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1
自减1变量自动减1算术运算符取余运算的两个操作数必须是整数。取余运算有什么用处呢?我们来看一个应用,如果我们需要把一个整数在数码管或者液晶上显示出来的话,那就需要把一个整数的每位拆分开来,一位一位进行显示,例如,要显示25这个数,我们就需要把25这个数的十位和个位拆分开来,分别是2和5,那用什么运算能实现这个结果呢?2525运算符名称功
能+加法求两个数的和,例如8+9=17
减法求两个数的差,例如20
9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1
自减1变量自动减1算术运算符252525/10=225%10=5运算符名称功
能+加法求两个数的和,例如8+9=17
减法求两个数的差,例如20
9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1
自减1变量自动减1算术运算符378137813781/1000=33781/100%10=73781%100/10=83781%10=1运算符名称功
能+加法求两个数的和,例如8+9=17
减法求两个数的差,例如20
9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1
自减1变量自动减1算术运算符30000ii--?i指定效果流水灯程序30000ii--29999i指定效果流水灯程序0ii++?i指定效果流水灯程序0ii++1ii++2ii++3i指定效果流水灯程序i=3;j=i++;k=++i;i=3;j=i++;//后置运算,先使用i的值,再做++运算,j=3,i=4
//j=i;i++;k=++i;i=3;j=i++;//后置运算,先使用i的值,再做++运算,j=3,i=4
//j=i;i++;k=++i;//前置运算,先进行++运算,再使用i的值,i=5,k=5
//i++;k=i;建议尽量避免++、--和其它运算用在一起,以防出错;单独使用的++i和i++,结果都是把i的值增1。圆的面积公式:S=πr²S=PI*r*r;用算术运算符连接起来的式子,就叫算术表达式。大于:>小于:<大于等于:≥小于等于:≤不等于
:≠等于:=数学比较符号大于:>小于:<大于等于:>=小于等于:<=不等于
:!=等于:==关系运算符关系表达式:用关系运算符连接起来的式子假定a=5;b=3;a>b的结果是什么呢?真假关系表达式:用关系运算符连接起来的式子假定a=5;b=3;a>b的结果是什么呢?真1假0真1a==b假0a!=b真1sbitS1=P1^0;S1==0真1表示开关拨到了位置3假0表示开关拨到了位置1S1!=1S1==1真1表示开关拨到了位置3假0表示开关拨到了位置1S1!=0a==b>ca==(b>c)>,<,>=,<=优先于==,!=逻辑与:&&逻辑或:||逻辑非:!逻辑运算符真真真逻辑与:&&表达式1&&表达式2&&=真&&=假假真&&=假假&&=假假假逻辑或:||表达式1||表达式2真真真||=真||=假真=假=假假假||||真真逻辑非:!!表达式真!=假!=假真真真真逻辑与:&&逻辑或:||逻辑非:!逻辑运算符表达式1&&表达式2&&=真&&=假假真&&=假假&&=假假假表达式1||表达式2真真真||=真||=假真=假=假假假||||真真!表达式真!=假!=假真逻辑与:&&逻辑或:||逻辑非:!逻辑运算符表达式1&&表达式2表达式1||表达式2!表达式6≤age<18age>=6age<18&&逻辑与:&&逻辑或:||逻辑非:!逻辑运算符表达式1&&表达式2表达式1||表达式2!表达式身高>180车子数>=1房子数>=1长相==帅身高>180车子数>=1房子数>=1长相==帅&&&&&&嫁给他身高>180车子数>=1房子数>=1长相==帅||||||嫁给他!优先级别最高,其次是&&,最低是||!>算术运算符>关系运算符>&&>||逻辑表达式:用逻辑运算符连接起来的式子位运算在二进制位的级别上进行的一系列运算。按位与运算:&运算法则:有0出0,全1出1aba&b000010100111x&0=0//x代表0或者1x&1=x//x代表0或者1按位或运算:|运算法则:有1出1,全0出0aba|b000011101111x|0=x//x代表0或者1x|1=1//x代表0或者1按位异或运算:^运算法则:相同为0,不同为1aba^b000011101110x^0=x
//x代表0或者1x^1=取反
//x代表0或者1按位取反运算:~运算法则:把1变0,把0变1a~a0110x^0=x
//x代表0或者1x^1=取反
//x代表0或者1按位与&:按位或|:按位异或^:按位取反~:按位与&:将一个二进制数的指定位清0按位或|:将一个二进制数的指定位置1按位异或^:将一个二进制数的指定位取反按位取反~:将一个二进制数的所有位都取反按位与运算符:&逻辑与运算符:&&按位或运算符:|逻辑或运算符:||左移运算:<<a<<ba=182;转换成二进制形式011011001D7D6D5D4D3D2D1D0111110000a<<b=01101100左移运算:<<a<<ba=182;转换成二进制形式,b=1解散回家丢掉左移运算:<<a<<ba=182;转换成二进制形式,b=401100000a<<b=01100000D7D6D5D4D3D2D1D01111100000001011丢掉左移运算:<<运算法则操作数左移若干位后,高位丢弃,低位补0。左移运算:<<运算法则:操作数左移若干位后,高位丢弃,低位补0。右移运算:>>运算法则:操作数右移若干位后,低位丢弃,高位补0。a=0xa2;a>>4=0x0a
b=0x5f;b<<4=0xf0c=0xfa;0x0a|0xf0=0xfac=(a>>4)|(b<<4)把a中的高4位和b中的低4位取出来,得到一个新的数c=
0xfa,怎么做呢?P1<<=1;//把P1口的内容左移一位再赋值给P1a>>=4;//把a的内容右移4位再赋值给a变量i=i+1a=a-5x=x*(y+7)r=r%7i+=1
a-=5x*=y-7r%=7加法+=减法-=乘法*=除法/=取余%=逻辑与&=逻辑或|=逻辑异或^=逻辑非~=左移<<=右移
>>=算术运算复合赋值符位运算复合赋值符赋值运算符:=变量(寄存器名或位名称)=表达式复合赋值符感谢您的观看Thanks
for
your
attention.
3.4C语言的函数《单片机应用技术(C语言版)》3.4.1函数的分类和定义C51的库函数寄存器库函数REGXXX.H一般输入/输出函数STDIO.H内部函数INTRINS.H字符函数CTYPE.H字符串函数STRING.H数学函数MATH.H标准函数STDLIB.H绝对地址访问函数ABSACC.H定义了51单片机的所有SFR和相应的位C51的库函数寄存器库函数REGXXX.H一般输入/输出函数STDIO.H内部函数INTRINS.H字符函数CTYPE.H字符串函数STRING.H数学函数MATH.H标准函数STDLIB.H绝对地址访问函数ABSACC.H操作51单片机的串口C51的库函数寄存器库函数REGXXX.H一般输入/输出函数STDIO.H内部函数INTRINS.H字符函数CTYPE.H字符串函数STRING.H数学函数MATH.H标准函数STDLIB.H绝对地址访问函数ABSACC.H51单片机的空操作、变量的左移/右移库函数的调用
#include<reg51.h>//包含寄存器库函数头文件,调用51单片机SFR
#include<intrins.h>//包含内部函数库头文件,调用左移、右移函数voiddelay(unsignedinti)
//定义延时函数
{unsignedintk;
for(k=0;k<i;k++);}
voidmain()//主函数
{
P1=0x7F;
//调用P1端口寄存器变量
while(1)//无限循环
{
P1=_cror_(P1,1);//调用左移函数,将P1的二进制数值循环左移一位
delay(5000);//延时
}}使用函数时必须先声明再使用使用库函数时,必须在源程序的开始处使用预处理命令#include将相应的头文件包含进来函数类型函数名(形式参数列表){局部变量声明;
函数体语句;return语句;}函数返回值的类型返回函数的返回值用户自定义函数//求三个整数的最大值intmax(inta,intb,intc){
intz;
if(a>b)z=a;
elsez=b;
if(c>z)z=c;
returnz;}
函数类型函数名形式参数列表
return(z);函数体
void函数名(形式参数列表){局部变量声明;
函数体语句;return语句;}函数类型是空类型,没有返回值。函数类型函数名(void){局部变量声明;
函数体语句;return语句;}没有形式参数。
void函数名(void){局部变量声明;
函数体语句;}函数类型是空类型,没有返回值。没有形式参数。信号灯闪烁控制C语言程序3.4.2函数调用C51的函数调用原则:先定义(或声明),后调用
#include<reg51.h>//包含寄存器库函数头文件,调用51单片机SFR
#include<intrins.h>//包含内部函数库头文件,调用左移、右移函数voiddelay(unsignedinti)//定义延时函数
{unsignedintk;
for(k=0;k<i;k++);}
voidmain()//主函数
{
P1=0x7F;//调用P1端口寄存器变量
while(1)//无限循环
{
P1=_cror_(P1,1);//调用左移函数,将P1的二进制数值循环左移一位
delay(5000);//延时
}}要使用库函数,必须先在程序开始处使用#include预处理命令,进行库函数使用声明C51的函数调用原则:先定义(或声明),后调用
#include<reg51.h>//包含寄存器库函数头文件,调用51单片机SFR
#include<intrins.h>//包含内部函数库头文件,调用左移、右移函数voiddelay(unsignedinti)//定义延时函数
{unsignedintk;
for(k=0;k<i;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 康复推拿概述
- 2026年中国不锈钢雕花门市场调查研究报告
- 2026年中国不锈钢喷嘴软管市场调查研究报告
- 2026年中国PP-R管配件市场调查研究报告
- 2026年中国IC硅片市场调查研究报告
- 2026年中国CCD摄像机市场调查研究报告
- 2026年贵州住院医师-贵州住院医师医学检验科历年参考题库含答案解析
- 2026年艺术设计行业技能考试-广告设计师考试历年参考题库含答案解析
- 2026年科普知识生活常识知识竞赛-地球科普知识竞赛历年参考题库含答案解析
- 2026年硕士在职联考-硕士学位研究生入学资格考试(GCT)历年参考题库含答案解析
- 透析患者怎么分层次管理?荣科血液净化智能管理系统用标签实现精准分级
- Unit 4 Healthy habits (Period 1)(课件)-2026-2027学年人教PEP版英语五年级上册
- 2026年新疆招录辅警考试题库(含答案)
- 2026年秋季七年级数学上册教学计划(北师大版)
- 测绘工程院测绘外业生产安全工作手册(标准版)
- 小学教师师德师风管理制度
- 市政管道清淤工程方案
- 《传感器与检测技术》课件 第四章 电容式传感器
- SHL 德勤在线测评真题
- 2026年高考全国二卷英语考试题目及答案
- 2026年山西省汉字听写大赛试题
评论
0/150
提交评论