资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二章,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,程序,#include,sbit A5=P10 x04;,int main(void),/,用户代码,void delay_1s(),;,return 0;,void delay_1s(),/,代码,一、主程序(程序入口),int main(void),/,用户代码,return 0;,注:,1,、,C,程序模块都是以“,”开头“,”结尾,程序为,函数,主函数、子函数,2,、每一行必须有结束号“;”,3,、养成注释程序的习惯,“,/,”注释该行,“,/*-,段落,-*/,”注解一段,二、头文件(编程预处理),#include,注:定义一些通用引脚及函数,三、自定义函数(子函数),常用、重复引用的功能集成,可用任何文本编辑软件编写,最后保存扩展名为,.C,的程序源文件,其值可以改变的量称为,变量,。,一个变量应该有一个名字,在内存中占据,一定的存储单元。变量,应该先定义后使用,。,要区分,变量名和变量值,是两个不同的概念。,a=3,变量,3,存储值,存储单元,地址,a,注:变量名,a,代表地址,编译系统自动分配,用户不可见,0 x40,一、,C,51,的变量类型,1,、基本数据类型,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,(signed)int,16,-3276832767,(signed)short,16,-3276832767,(signed)long,32,-21474836482147483647,16,unsigned int,065535,32,04294967295,unsigned long int,unsigned short int,16,065535,有,float,32,3.4e-383.4e38,有,double,64,1.7e-3081.7e308,有,char,8,-128127,无,unsigned char,8,0255,2,、变量类型的定义,格式:变量类型,+,变量名,例如:,int a,b;/,定义,a,b,为整型变更,long sheng1,sheng2;/,长整型,Float c,d;/,浮点(有小数),Double e,f;/,双精度,char a ;/,有符号字符型,Unsigned char b;,无符号字符型,注:变量类型为规定的类型;变量的名称自由起,但通常要通俗,并要遵守如下规则,c,语言变量命名:,数字、字母、下划线,都可以为变量命名。,做为变量名的开头不能为数字,如,3a_,是错的,而,a_3,或,_a3,是正确,变量名不能为关键字,像,ifelseprintf,等等都不能,标准,C,表,1,标准,C,表,2,C51,扩展,3,、,C,51,的数据类型扩充定义,sfr:,特殊功能寄存器声明,sfr16:sfr,的16位数据声明,sbit:,特殊功能位声明,bit,:,位变量声明,1,sfr,特殊功能寄存器。这也是,C 51,编译器的一种扩充数据类型,利用它可以访问,8051,单片机的所有内部特殊功能寄存器。,sfr,型数据占用一个内存单元,其取值范围,0,255,。,2,sfr16 16,位特殊功能寄存器。它占用两个内存单元,取值范围是,0,65535,。,3,sbit,可寻址位。这也是,C51,编译器的一种扩充数据类型,利用它可以访,8051,单片机内部,RAM,中的可寻址位或特殊功能寄存器中的可寻址位。,4.bit,位标量。这是,C 51,编译器的一种扩充数据类型,利用它可定义一个位标量,但,不能定义位指针,也不能定义位数组,。,例:,sfr SCON=0X98;,sfr16 T2=0 xCC;,sbit OV=PSW2,4,、数据类型修饰词,1,)、,data:,固定指前面,0 x00-0 x7f,的,128,个,RAM,,可以用,acc,直接读写的,速度最快,生成的代码也最小,2,)、,code,定义的数据要放在,ROM,(程序存储区)里面,写入后就不能再更改,对应的还有,data,是存入,RAM,的意思。,例如:,char data,a,;/a,变量存在上述,RAM,中,int data,disp,;/disp,变量存在上述,RAM,中,例如:,uchar code yima=,/,把数码管位数据(因为不变)写入,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,、变量的赋值,int a,b;/,定义,a,b,为整型变量,long sheng1,sheng2;/,长整型,float c,d;/,浮点(有小数),double e,f;/,双精度,char g ;/,有符号字符型,Unsigned char h;,无符号字符型,定义,赋值,a,12,;,a=,0 x,ff;a=,0 x,00;,b=0;b=,0,8;b=,0,3;,C=0.214;c=-0.36 ;,d=12e3;,e=12e-12;,g=10;,G=A;,h=200;,注:,A,为字符常量,为该字符的,ASCII,代码,附,C-51,的包含的头文件,通常有,:,reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absacc.h,常用有,:,reg51.h reg52.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,)、单分支语句,int a,b,max;,max=a;,if(maxb),max=a;,else,max=b;,3,)、多分支语句,依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个,if,语句之外继续执行程序。如果所有的表达式均为假,则执行语句,n+1,。然后继续执行后续程序。,int a=10;,If(a0&a=2&a-5&a=8&a0),delay1s();,P0=P0;,i-;,main(),int i,sum=0;,i=1;,while(i=100),sum=sum+i;,i+;,printf(%dn,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;i0;i-),/,空语句,想想这段代码有什么用,附:,for,循环的嵌套,main(),int i,j,k;,for(i=0;i2;i+),for(j=0;j2;j+),for(k=0;k2;k+),printf(“%d%d%dn,i,j,k);,、,do-while,语句,形式为,:,do,语句,while(,表达式,),作用:,循环,执行一段代码,这个循环与,while,循环的不同在于,:,它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while,循环至少要执行一次循环语句,main(),int i,sum=0;,i=1;,do,sum=sum+i;,i+;,while(i5?1:0;,Y,输出什么值?,7,、循环体的退出,(一)、,break,语句,、当,break,用于开关语句,switch,中时,可使程序跳出,switch,而执行,switch,以后的语句,、当,break,语句用于,do-while,、,for,、,while,循环语句中时,可使程序终止循环而执行循环后面的语句,通常,break,语句总是与,if,语句联在一起。即满足条件时便跳出循环。,(二)、,continue,语句,continue,语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。,continue,语句只用在,for,、,while,、,do-while,等循环体中,常与,if,条件语句一起使用,用来加速循环,
展开阅读全文