联系方式:单片机开发第四讲:单片机C51语言基础1-2北京源智天下科技有限公司联系方式:课程安排•单片机C51语言概述•标识符和关键字•数据类型•分隔符•const修饰符•变量作用域•运算符•表达式1-3北京源智天下科技有限公司联系方式:语言概述•单片机C51语言是由C语言继承而来的。•和C语言不同的是,C51语言运行于单片机平台,而C语言则运行于普通的桌面平台。•C51语言具有C语言结构清晰的优点,便于学习,同时具有汇编语言的硬件操作能力。•对于具有C语言编程基础的读者,能够轻松地掌握单片机C51语言的程序设计。1-4北京源智天下科技有限公司联系方式:语言的主要特点•单片机C51语言兼备高级语言与低级语言的优点。•语法结构和标准C语言基本一致,语言简洁,便于学习。•运行于单片机平台,支持的微处理器种类繁多,可移植性好。对于兼容的8051系列单片机,只要将一个硬件型号下的程序稍加修改,甚至不加改变,就可移植到另一个不同型号的单片机中运行。•具有高级语言的特点,尽量减少底层硬件寄存器的操作。•单片机C51语言提供了完备的数据类型、运算符及函数供使用。•C51语言是一种结构化程序设计语言,可以使用一对花括号“{}”将一系列语句组合成一个复合语句,程序结构清晰明了。•C51语言代码执行的效率方面十分接近汇编语言,且比汇编语言的程序易于理解,便于代码共享。1-5北京源智天下科技有限公司联系方式:“Helloworld”程序1#includereg51.h//头文件2#includestdio.h3voidmain(void)//主函数4{5while(1)//主循环6{7printf(Helloworld!\r\n);//字符串输出8}9}1-6北京源智天下科技有限公司联系方式:良好的编程规范•完备和详尽的程序注释–用“//”符号开头来注释一行,如“//变量声明”。–用“/*”符号开头,并以“*/”符号结束。采用这种方法,可以对C51源程序中的任何部分进行注释,如“/*声明整型变量count*/”。•整齐的代码书写格式–if、do、while等块结构语句中的“{”和“}”要配对对齐,这样便于理解该结构的起始点和结束点。–为了程序理解的方便,最好将每个语句单独写在一行,并加以注释。如果相连的语句具有相近的功能,则可以放置在一行。–代码书写时,可以通过适当的空格以及Tab键来实现代码对齐,这样代码整齐美观,便于阅读。–对于源程序文件不同结构部分之间要留有空行来区分。例如,头文件声明、自定义函数声明、main()函数以及自定义函数之间均要空一行。•简洁清晰的命名1-7北京源智天下科技有限公司联系方式:标识符和关键字•标识符是用来表示源程序中自定义对象名称的符号。其中的自定义对象可以是常量、变量、数组、结构、语句标号以及函数等。•在C51语言中,标识符可以由字母(a~z,A~Z)、数字(0~9)和下划线“_”组成,最多可支持32个字符。•C51标识符的定义不是随意的,需要符合一定的规则。–标识符的第一个字符必须是字母或者下划线,不能为数字。–C51的标识符区分大小写,例如“ch1”和“Ch1”表示两个不同的标识符。–用户自定义的标识符不能与系统保留的关键字重复。1-8北京源智天下科技有限公司联系方式:关键字•关键字是C51编译器保留的一些特殊标识符,具有特定的含义和用法。•单片机C51程序语言继承了ANSIC标准定义的32个关键字,同时又结合单片机硬件的特点扩展了一些关键字。•详细的C51关键字可以参阅书中列表。1-9北京源智天下科技有限公司联系方式:数据类型•在C51语言中,每个变量或者常量在使用前都必须指明数据类型。1-10北京源智天下科技有限公司联系方式:变量和常量•变量和常量都是用户自定义使用的数据,不同的是,变量在程序执行过程中可以更改数值,而常量则不可以。•C51常量可以直接使用,但对于变量,则需要首先进行声明。变量声明后,C51编译器在单片机内存中单独划分一定的存储单元,用来存放该变量的值。char'a'、'\n'、'3'//字符型常量int45、123、-110//整型常量unsignedint10010、457、7//无符号整型常量longint35510、-78//长整型常量float115.23、3.14e-3//浮点型常量常量inti,j;//整型变量charch;//字符型变量shortintshi;//短整型变量unsignedintut;//无符号整型变量floatfset,st;//浮点型变量变量1-11北京源智天下科技有限公司联系方式:整型数据•整型常量也称为整型常数,可以在程序中直接使用。C51语言支持整型常量的十进制、八进制和十六进制表示。–十进制整型常量,以非0开始的数字来表示,例如124、-34等。–八进制整型常量,以0开始的数字来表示,例如07、012等。–十六进制整型常量,以0x或者0X开始的数字和字母(A~F,a~f),例如0x1A、0xFF、0XC0等。•在C51语言中,整型变量按修饰符的不同,可以分为如下几种:–unsignedshortint:无符号短整型,简写为unsignedint,字长为2字节共16位二进制数,数据的范围是0~65535。–signedshortint:有符号短整型,简写为short或int,字长为2字节共16位二进制数,数据的范围是-32768~32767。–unsignedlongint:无符号长整型,简写为unsignedlong,字长为4字节共32位二进制数,数据的范围是0~4294967295。–signedlongint:有符号长整型,简写为long,字长为4字节共32位二进制数,数据的范围是-2147483648~2147483647。1-12北京源智天下科技有限公司联系方式:字符型数据•字符型数据用于表示单个字符。•在C51中进一步可以细分为字符型常量、转义字符和字符型变量。•字符型常量是指用一对单引号括起来的单个字符。其中单引号只起定界作用,并不表示字符本身,例如‘A’、‘5’、‘!’等。•字符型常量可以在程序中直接使用。•在单片机内部,字符是以ASCII码的形式保存的。因此,也可以使用ASCII码值来表示字符,例如0x41表示字符’A’、0x35表示字符'5'、0x21表示字符'!'等。1-13北京源智天下科技有限公司联系方式:转义字符•转义字符是一种比较特殊的字符,用于表示不可打印或者某些特殊的字符。转义字符用反斜杠“\”后面跟一个字符或一个八进制或十六进制数表示。1-14北京源智天下科技有限公司联系方式:使用转义字符时的注意事项•转义字符中只能使用小写字母来表示,例如“\T”是错误的转义字符。•在C51语言中,每个转义字符只能看作一个字符。•不可打印字符必须用转义字符来表示,例如响铃、换行等。•“\v”垂直制表和“\f”换页符在屏幕显示时没有任何影响,但是在打印机输出时,会影响到打印机的操作。•使用转义字符“\ddd”可以表示任意字符。其中,“\ddd”为斜杠后面跟字符所对应的三位八进制ASCII码值。•使用转义字符“\xhh”可以表示任意字符。其中,“\x”后面跟字符所对应的两位十六进制ASCII码值。1-15北京源智天下科技有限公司联系方式:字符型变量•字符型变量是保存字符的变量类型。在C51语言中,可以定义两种类型的字符型变量:–有符号字符变量(char):有符号字符型变量的取值范围为-128~127。–无符号字符变量(unsignedchar):无符号字符型变量的取值范围是0~255。在单片机中,立即寻址方式的寻址空间是程序存储器,也就是说立即寻址方式所操作的立即数是存储在指令字节中的。•在程序中,字符型变量通常和字符型常量一起使用。字符型常量和字符型变量也可以根据其ASCII码值来按照整型数据进行操作。1-16北京源智天下科技有限公司联系方式:浮点型数据•浮点型数据是用于表示包含小数点的非整型数据类型。在C51中进一步可以细分为浮点型常量和浮点型变量。•浮点型常量由整数部分、尾数部分和指数部分组成,其值表示为十进制形式。例如13.5、1.2e5、-4.5E-2等等。•一般来说,所有的浮点型常量均默认为float型。•在浮点型常量的指数部分,字母E或e之前必须有数字,表示形式为“数字e±数字”。另外,浮点型常量中E或e后面指数必须为整数,例如“e2.1”、“e3”等都是不合法的指数形式。•在C51语言中,如果浮点型常量的绝对值小于1,则其小数点前面的零可以省略。例如,0.15可以简写为.15,-0.026e-2可以简写为-.026e-2。1-17北京源智天下科技有限公司联系方式:浮点型变量•浮点型变量用于保存浮点型数据。•C51语言中支持float、double和longdouble类型的变量。•由于单片机的资源不同于PC机,因此,C51语言中不具体区分这三种类型。也就是说,这三种浮点类型有相同的精度和取值范围,都将按照float类型对待。•浮点型变量字长为4个字节,共32位二进制数,浮点型变量的取值范围为3.4x10-38~3.4x10+38。1-18北京源智天下科技有限公司联系方式:分隔符•分隔符用于区分或者定界C51程序中不同的数据对象。分隔符广泛应用于各种语句中,可以细分为单分隔符和组合分隔符。•单分隔符是指除字母、数字、下画线以外的单个ASCII字符,如+、-、*、/、!、|、、、=、.、,、:、;、‘、#等。•典型的单分隔符的使用示例如下:–用“;”进行隔离语句,例如inti,j,k;–用“,”进行隔离,例如charch1,ch2;–用“*”做指针,例如char*pter;–用“#”做预处理伪指令,例如#definePI3.1415926;–用“^”标识特殊寄存器的位,例如sbitP10=P1^0。1-19北京源智天下科技有限公司联系方式:组合分隔符•组合分隔符是由两个或者两个以上特定字符组合而使用,例如=、!=、=、{、}、[、]、(、)等。典型的组合分隔符的使用示例如下:–用“[]”对数组说明,例如charch[]=''Thisisanewstring!'';–用“()”进行隔离,例如s=Fun(r);–用“{}”进行隔离复合语句,例如for{i=0;i200;i++};1-20北京源智天下科技有限公司联系方式:修饰符•const修饰符用于定义符号常量,一般采用基本数据类型前加const来表示。•程序在编译时,符号常量将其视为一个常量,而不被分配内存空间。当在程序代码中遇到该符号常量时,将用其定义时的初值来代替。•因此,在声明符号常量时,必须对其进行初始化赋值,除非该变量是用extern修饰的全局变量。•在程序中,const修饰符常用于防止程序运行时某些值被意外修改的场合。•另外,通过const修饰符可以方便对于程序中经常使用的数值进行统一修改,便于调试