第3章 单片机C51语言程序设计基础.ppt
《第3章 单片机C51语言程序设计基础.ppt》由会员分享,可在线阅读,更多相关《第3章 单片机C51语言程序设计基础.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 单片机C51语言程序设计基础单片机C51语言既具有汇编语言对操作硬件的功能,又兼有高级编程语言的许多优点。在现代的单片机程序设计中,单片机C51语言得到了广泛的采用。本章主要介绍了包括C51程序的基本结构,以及C51程序设计的基础知识,包括标识符、关键字、数据类型、表达式和运算符等。熟练掌握这些知识,将为下面进一步学习打好基础。3.1 C51程序的基本结构单片机C51语言继承了C语言的特点,其程序结构与一般C语言的程序结构没有差别。C51源程序文件的扩展名为“.c”,如Test.c、Function.c等。每个C51源程序中包含一个名为“main()”的主函数,C51程序的执行总是从m
2、ain()函数开始的。当主函数中所有语句执行完毕,则程序执行结束。Keil Vision3项目结构示意图 3.2 C51编程规范及注意事项在学习任何一种编程语言的时候,按照一定的规范培养良好的编程习惯很重要。良好的编程规范可以帮助开发人员理清思路、方便整理代码,同时也便于他人阅读理解以促进代码的交流。在进行C51语言程序设计时,应该注意一下几方面的编程规范。3.2.1 注释任何编程语言都支持注释语句。注释语句只对代码起到功能描述的作用,在实际的编译链接过程中不起作用。C51语言中可以通过两种方式来表示注释内容:用“/”符号开头来注释一行,如“/变量声明”。用“/*”符号开头,并以“*/”符号结
3、束来对C51源程序中的任何部分进行注释,如“/*声明整型变量ch*/”。3.2.2 命名在进行程序设计时,经常需要自定义一些函数或者变量。一般来说,只要符合C51命名规范即可通过编译。但是,为了便于源程序的理解和交流,在进行命名时应注意如下几点:自定义函数或者变量的名称最好能反映该函数或变量的功能用途。因此,需要采用有意义的单词或者字母组合来表示。例如,MAX表示最大值、MIN表示最小值等。变量名通常加上表示数据类型的前缀,如“ucSendData”的前缀“uc”表示unsigned char。在命名时不要和系统保留的标识符以及关键字产生冲突或者歧义。3.2.3 格式为了程序阅读的方便,在进行
4、C51程序设计时,在程序结构以及语句书写格式方面应注意以下几点:虽然C51语言对main()函数放置的位置没有限定,但为了程序阅读的方便,最好将其放置在所有自定义函数的最前面,即依次是头文件声明、自定义函数以及全局变量声明、main()函数、自定义函数。C51语句可以写在一行上也可以写在多行上。为了程序理解的方便,最好将每个语句单独写在一行,并加以注释。有时某几个相连的语句相近或者共同执行某个功能则可以放置在一行。对于源程序文件不同结构部分之间要留有空行。例如,头文件声明、自定义函数声明、main()函数以及自定义函数之间均要空一行来明显区分不同结构。对于if、while等块结构语句中的“”和
5、“”要配对对齐,以便于程序阅读时能够理解该结构的起始和结束。源代码安排时可以通过适当的空格以及Tab键来实现代码对齐。3.3 C51的标识符与关键字标识符和关键字是一种编程语言最基本的组成部分,C51语言同样支持自定义的标识符以及系统保留的关键字。在进行C51程序设计时,需要了解标识符和关键字的使用规则。3.3.1 标识符标识符常用来声明某个对象的名称,如变量和常量的声明、数组和结构的声明、自定义函数的声明以及数据类型的声明等。示例如下。int count;void Function1();在上面的例子中,count为整型变量的标识符,Function1为自定义函数的标识符。在C51语言中,标
6、识符可以由字母、数字(09)和下划线“_”组成,最多可支持32个字符。并且,C51标识符第一个字符必须是字母或者下划线“_”。例如“ut1”、“ch_1”等,都是正确的。而“5count”则是错误的标识符。另外,C51的标识符区分大小写,例如“count1”和“COUNT1”代表两个不同的标识符。3.3.2 关键字关键字是C51语言重要的组成部分,是C51编译器已定义保留的专用特殊标识符,有时也称为保留字。这些关键字通常有固定的名称和功能,如int、float、if、for、do、while、case等。3.4 C51的变量类型数据类型是C51语言最基本的组成部分。在C51中,每个变量在使用之
7、前必须定义其数据类型。C51语言中的数据类型分为基本数据类型和聚合数据类型,这里首先介绍基本数据类型。3.4.1 C51的数据类型C51的基本数据类型有整型(int)、浮点型(float)、字符型(char)、无值型(void)。在基本数据类型中,除void类型外,其前面均可以有各种修饰符。修饰符用来改变基本类型的意义,以便更准确地适应各种情况的需求。常用的修饰符有signed(有符号)、unsigned(无符号)、long(长型符)、short(短型符)。在C51语言中的所有数据类型的字长和取值范围,如表所示。表3.2C51语言的数据类型3.4.2 整型变量整型变量是整数类型的数据。整型变量
8、是最常用的数据类型。整型变量的定义格式是“类型说明符 变量标识符,变量标识符”。示例如下:inta,b;/定义a、b为短整型变量longc,d;/定义c、d为长整型变量其中,类型说明符与变量标识符之间至少有一个空格。最后一个变量标识符必须以“;”结尾。整型变量的前面可以加上不同的修饰符,整型变量的类型如表所示。表整型变量的类型类型简写形式字长(bit)取值范围unsignedshortint(无符号短整型)unsignedint8065535signedshortint(有符号短整型)short或int8-3276832767signedlongint(有符号长整型)unsignedlong3
9、2-21474836482147483649unsignedlongint(无符号长整型)long32042949672963.4.3 浮点型变量浮点型变量是用于表示包含小数点的数据类型。浮点型变量的一般定义格式是“类型说明符 变量标识符,变量标识符”。示例如下:float a,b;/定义a、b为单精度浮点型变量double c,d;/定义c、d为双精度浮点型变量同整型变量一样,浮点型变量也可以同时定义多个。C51支持三种浮点型变量类型,即float类型、double类型和long double类型。但是在C51中不具体区分这三种类型,它们都被当作float类型对待。因此,这三种浮点类型的精度
10、和取值范围相同。浮点类型变量的字长为4个字节,共32位二进制数,取值范围为3.4x10-383.4x10+38。浮点型变量的示例程序如下:#include/头文件void main()/主函数floata;/定义a为单精度浮点型变量double b;/定义b为双精度浮点型变量a=8976.1538;/赋值b=6950.2692;printf(a=%fnb=%fn,a,b);/打印输出结果3.4.4 字符型变量在信息的表示和传递中,经常用到字符以及文字的表示。字符型变量就是用来存放单个字符的变量类型。字符型变量的定义格式是“类型说明符 变量标识符,变量标识符”。示例如下:char a:/定义a为
11、有符号字符变量unsigned char b;/定义b为无符号字符变量在C51中,可以定义两种类型的字符型变量:有符号字符变量char和无符号字符变量unsigned char。在C51中,字符型变量在操作时将按整型变量处理。字符是以ASCII码方式表示的,其字长为1个字节,所以有符号字符型变量的取值范围为-128127,无符号字符型变量的取值范围是0255。如果某个变量被定义成char,则表明该变量是有符号的,即它将转换成有符号的整型变量。3.4.5 指针型变量指针型变量是指向变量所存放地址的数据类型。在C51中,指针型变量的定义格式是“类型说明符 变量标识符,变量标识符”。示例如下:int
12、*i;/定义整型指针变量float*f;/定义浮点型指针变量char*c;/定义字符型指针变量struct*stu;/定义结构型指针变量union*uni;/定义联合指针变量3.4.6 无值型变量无值型变量是一个特殊的类型,其字节长度为0。无值型变量的定义格式是“类型说明符 变量标识符,变量标识符”。示例如下:void*buf;/buf被定义为无值型指针在C51中,无值型变量主要用于以下两个方面:定义一个同一类型的指针,该指针可根据需要动态分配内存。在自定义函数时,明确地表示这个函数不返回任何值。程序示例如下:#include/头文件void Fun1(int a)/定义一个无返回值的函数pr
13、intf(the number is%d,a);/输出void main()/主函数int i;/定义变量i=12;/赋值Fun1(i);/调用函数 3.5 C51的常量类型常量也C51中常用的数据形式。与变量的表示相比,常量的表示要相对简单,但是同样要注意表示的规范,否则会导致程序出错。C51中的常量有整型常量、浮点型常量、字符型常量和转义字符四种类型。下面分别对其进行介绍。3.5.1 整型常量整型数据包括整型变量和整型常量两种,整型变量的定义前面已经详细介绍。整型常量及整型常数可以表示十进制、八进制、十六进制的整数值。根据表示的数的进制不同进行区分,整型常量的表示如表所示。整型常量的表示整
14、型常量类型表示形式示例十进制数以非0开始的数来表示220,-560,45900八进制数以0开始的数来表示06,0106,0578十六进制数以0X或0 x开始的数来表示0X0D,0XFF,0 x4e3.5.2 浮点型常量浮点型常量也称为实型常量,只可以以十进制来表示。一般来说,浮点型常量的值由整数部分、尾数部分和指数部分组成。在不加说明的情况下,浮点型常量通常为正值。如果需要表示负值,则在常量前使用负号,如18.47,-45.63,-4.2e-16,8.165。在C51中,所有浮点常量都被默认为float型。对于绝对值小于1的浮点型常量,其小数点前面的零可以省略。例如,0.68可写为.68,-0
15、.0314E-4可写为-.0314E-4。在编译环境中,默认的输出格式为浮点数时,最多只保留小数点后六位,不够的后面补零。在浮点型常量中不得出现任何空白符号。字母E或e之前必须有数字,其表示形式为“数字e数字”,且浮点型常量中E或e后面的指数必须是整数,例如“e2.3”、“e-2.5”等都是不合法的指数形式。3.5.3 字符型常量字符型常量用来表示单个字符,其用一对单引号括起来。其中单引号只起定界作用,并不表示字符本身,例如F,5,?。在C51中,字符常量的单引号中的字符不能是单引号()或反斜杠()。如果需要使用这两个字符,则需要采用转义字符来表示,这将在后面介绍。在C51中,字符是按其所对应
16、的ASCII码值来存储的,一个字符占一个字节。因此也可用该字符的ASCII码值来表示该字符,例如,十进制数65表示大写字母A,十六进制数0 x5d表示符号,八进制数0110表示大写字母B等。另外,格式控制符是无法在程序中显式地表示的。因此,这些格式控制字符不能用符号表示,但其可以用ASCII码值来表示。例如,十进制数13表示回车符,八进制数033表示Esc,十六进制数0 x0A表示换行符等。3.5.4 转义字符转义字符用于表示ASCII码字符集中的格式控制字符和特定功能字符,这些字符都是不可打印的。例如,用于表示字符常量的单引号(),用于表示字符串常量的双引号()和反斜杠()等。转义字符是C5
17、1语言中一种特殊的字符表示形式,其用反斜杠“”后面加一个字符或一个八进制或十六进制数表示,转义字符的表示如表所示。转义字符转义字符含义ASCII码值(十进制)a响铃(BEL)007b退格(BS)008f换页(FF)012n换行(LF)010r回车(CR)013t水平制表(HT)009v垂直制表(VT)011反斜杠092?问号字符063单引号字符039双引号字符0340空字符(NULL)000ddd任意字符三位八进制xhh任意字符二位十六进制3.6 变量作用域变量作用域是程序中变量起作用的范围。由于C51中可以包含多个函数和程序文件,因此使用变量时,除要首先定义该变量外,还要注意变量的有效作用范
18、围,即该变量的作用域。变量作用域即变量的作用范围,可以是作用于一个函数,或一个程序文件,甚至整个工程里的所有文件都可用。一般而言,按照变量的存储类型,变量分为自动变量、全局变量、静态变量和寄存器变量四种类型。下面将分别介绍其作用域范围。3.6.1 变量作用域的基本规则在C51语言中,任何以花括号括起来的一段程序称为一个块结构,通常称为复合语句。最典型的块结构是函数或者for、if、do和while等语句。C51中规定,在块结构中进行定义的变量,其有效使用范围只在该块结构内部,示例如下:#include/头文件void main()/主函数int i;/在main函数中定义整型变量i=15;/变
19、量赋值/块结构int t;/在块结构中定义整型变量t=2;/变量赋值printf(i=%d,i);/输出变量i,正确printf(t=%d,t);/输出变量t,错误 3.6.2 自动变量自动变量一般在是函数的内部或者程序块中时使用,其是以关键字auto标识的变量类型。其定义格式为“auto 类型说明符 变量标识符,变量标识符”。自动型变量的作用域范围是函数或者程序块的内部。在编译C51程序时,自动型变量根据变量类型动态分配存储空间。在程序执行到该函数时,根据变量类型为其自动分配存储空间,当该函数执行完毕后,立即取消该变量的存储空间,即该自动型变量失效。这样在该函数内部定义的变量,就不能在该函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 单片机C51语言程序设计基础 单片机 C51 语言程序设计 基础
限制150内