1.3.3.1 C语言特点
C语言是一种结构化语言,按模块化组织程序,具备丰富的运算符和数据类型,可以直接访问内存地址,进行位(bit)操作,实现了对硬件的编程操作,既有高级语言的功能,也有低级语言的优势。
1)一个C语言源程序可以由一个或多个源文件组成。
2)每个源文件可由一个或多个函数组成。
3)一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
4)源程序中可以有预处理命令,预处理命令通常放在源文件或源程序的最前面。
5)每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。
6)标识符,关键字之间必须至少加一个空格以示间隔。若有明显的间隔符,也可不再加空格来间隔。
7)特别强调:
➢除非注释(用//开头只能注释一行,用/**/则被包含的所有内容都视为注释,否则务必在英文状态下输入字符。
➢C语言严格区分大小写,请务必保持大小写一致性!
➢无论是函数还是变量都必须先声明后使用!
➢请务必习惯性使用Tab键,合理编排程序,使其美观、方便阅读。
1.3.3.2 C51基本程序框架
特别声明:此处介绍的程序框架用于适应初学者,当用户学习到一定阶段,对编程有了一定认识和把握后,可以尽情发挥C语言的强大功能!
1.include
include是预处理命令之一,表示文件包含,是指将一个源文件的全部内容包含到另外一个文件中去,成为其中一部分。#include<reg51.h>将51单片机片内的资源(主要是一些SFR)都包含进来,这样用户就可以任意支配片内资源。强调一下:C语言是严格区分大小写的!打开reg51.h(后缀名为h的表示头文件),P1口定义为sfrP1=0x90;因此我们可以直接对P1进行操作。
想一想
如果将“sfr P1=0x90;”中的“P1”写成小写的“p1”,会发生情况呢?(www.xing528.com)
2.define
define也是预处理命令之一,表示预定义,定义的一般形式是#define标识符字符串,其含义是出现标识符的地方均用字符串来替代。
想一想
如果在#define uint unsignedint后面加一个“;”当你在定义变量,如uint temp时会出现什么情况?
3.变量
变量就是数值可以改变的量,在程序运行中,其值可以改变;相反地,常量就是在程序执行过程中其值不会改变的量。定义变量时一定要注意数据类型及其表示数的范围,以免发生溢出,比如常见的unsigned char的范围0~255,unsigned int的范围是0~65535。
想一想
假设你要编写一个循环次数为300次的程序,如果将变量i定义为unsigned char类型,循环语句for(i=0;i<300;i++)能否顺利实现预期目标呢?为什么?【请读者务必十万分注意变量的数据类型!】
变量定义的一般格式为
数据类型变量名表;
数据类型指明了变量所属的数据类型,影响到占据的存储器字节数和变量的表示范围。变量名用户自己定义,但千万不能和关键词重复,否则编译时会出错!用户可以在定义变量时同时进行初始化,同一类型多个变量之间用逗号隔开,比如:
unsigned char i,j,k=0;//这里定义了三个变量i,j,k,其中k同时初始化为0,其他未初始化。
4.void
void是关键词,具有特殊含义,用户必须严格遵守其含义和用法。此处,main前面的void表示该函数无返回值,main括号中的void表示执行main主函数不需要从外面传递参数。函数定义的一般格式为
其中类型标识符表示该函数执行后返回的值的数据类型,如果该函数无返回值,可以写成void;函数名就是函数的名称,用户自己定义;如果没有形式参数,可以写成void,也可以留空。
所谓形式参数,就是该参数“有名无实”,比如安排大扫除,需要三个同学,分别是A、B、C,在函数体中A、B、C分别完成某项工作,但这只是“形式”,只有真正进行大扫除了(相当于该函数被调用了),A、B、C才会具体指定某位同学(这时候相当于实际参数)。
5.while
while是一种循环语句。C语言有三种结构,分别是顺序、分支、循环。顺序就是从头顺序执行到结束,从上午起床,我们顺序做着一些事情,直到晚上睡觉。分支简单说就是先判断,然后选择,早餐时是喝牛奶还是豆浆呢?循环就是依据一定的条件,在重复执行着,好比周一到周五,我们学习着、工作着;到周末就休息。请注意,在逻辑中,1表示真,0表示假,while(1)中的1为真,因此while(1)实际上就是一个永远成立的循环,称为死循环,单片机在不断执行while(1)里面的内容。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。