1、C C语言体系结构是函数结构语言体系结构是函数结构 Embedded C Structure/*This program was produced by theCodeWizardAVR V1.24.7e StandardChip type :ATmega16Program type :ApplicationClock frequency :8.000000 MHzMemory model :SmallExternal SRAM size :0Data Stack size :256*/LED controller program注释部分:由注释部分:由“/*/”配对配对括起来的部分括起来的部
2、分内容,可以包内容,可以包括多行。括多行。注释部分:由注释部分:由“/”引导的一行内容。引导的一行内容。C C语言体系结构是函数结构语言体系结构是函数结构 Embedded C Structure#include#include/Declare your global variables herevoid main(void).void function(void).预编译命令:文预编译命令:文件包含指令件包含指令函数头函数头函数体函数体主函数主函数main():C程序程序总是总是从从main()函数开始执行。而函数开始执行。而不论其在程序中的位置如何不论其在程序中的位置如何。当主函数执行完毕
3、时,亦。当主函数执行完毕时,亦即程序执行完毕。即程序执行完毕。定义了一些与定义了一些与I/0接口有关的接口有关的特定变量,他们对应单片机内特定变量,他们对应单片机内部的特殊功能寄存器,用大写部的特殊功能寄存器,用大写字母书写。字母书写。C C语言结构风格特点语言结构风格特点 Embedded C Structure Character1.习惯用小写字母,习惯用小写字母,大小写敏感大小写敏感2.一行上可以写几条语句,一条语句也可以一行上可以写几条语句,一条语句也可以写在几行上。写在几行上。可使用空行和空格可使用空行和空格3.C程序由语句组成,程序由语句组成,用用“;”作为语句终止作为语句终止符符
4、4.书写上注意使用缩进格式。书写上注意使用缩进格式。5.程序由一个或多个函数组成程序由一个或多个函数组成,必须有且只能必须有且只能有一个主函数有一个主函数main()6.程序执行程序执行从从main开始,在开始,在main中结束中结束,其它函数通过嵌套调用得以执行。其它函数通过嵌套调用得以执行。7.允许使用注释。允许使用注释。C C语言的注释格式为:语言的注释格式为:/*/技巧技巧:为避免遗漏必须:为避免遗漏必须配对使用的符号配对使用的符号,例,例如注释符号如注释符号/*/、函数体的起止、函数体的起止标识符(花括号标识符(花括号 )、圆括号()等)、圆括号()等等。等。void main(vo
5、id)/Port A initialization.DDRA=0 xFF;PORTA=0 xFF;.while(1)/Place your code here PORTA=0 xFF;delay_ms(500);变量与变量名变量与变量名 Variable Concept and Variable Identifier变量:程序运行过程中其值可以改变的量,系统为程序中变量:程序运行过程中其值可以改变的量,系统为程序中的每一个变量开辟一个存储单元。的每一个变量开辟一个存储单元。变量的两个要素:变量的两个要素:变量名和变量值变量名和变量值变量命名遵循变量命名遵循标识符标识符命名规则,命名规则,在程序
6、中,通过变量名来在程序中,通过变量名来引用变量的值引用变量的值。标识符:用来标识变量名、符号常量名、数组名、函数名标识符:用来标识变量名、符号常量名、数组名、函数名、文件名的有效字符序列。、文件名的有效字符序列。标识符定义的注意事项:标识符定义的注意事项:字母(或下划线)开头,后跟字母、数字和下划线组成。字母(或下划线)开头,后跟字母、数字和下划线组成。不能和系统使用的名字(不能和系统使用的名字(关键字关键字)冲突。)冲突。长度无统一规定,许多系统取长度无统一规定,许多系统取8 8个字符。但目前并不如此。个字符。但目前并不如此。编程技巧:使用见名知意的字符串命名变量标识符。编程技巧:使用见名知
7、意的字符串命名变量标识符。C C语言的基本数据类型以及变量的定义语言的基本数据类型以及变量的定义 Variable Define 基本数据类型:整型、实型、字符型基本数据类型:整型、实型、字符型 C程序中用到的每一个变量都要指定它们所属的数据类型。程序中用到的每一个变量都要指定它们所属的数据类型。其其原因原因在于:不同类型的数据在内存中占据在于:不同类型的数据在内存中占据不同长度的存储不同长度的存储区区,而且采用,而且采用不同的表示方式不同的表示方式。一个数据类型。一个数据类型对应着一个值对应着一个值的范围的范围并且并且对应一组允许的操作对应一组允许的操作。所有的变量一定要所有的变量一定要“先
8、定义、后使用先定义、后使用”:Int a,b,c;/*指定指定a,b,c为整型变量为整型变量*/float x,y;/*指定指定x,y为单精度实型变量为单精度实型变量*/double z;/*指定指定z为双精度实型变量为双精度实型变量*/char c1,c2;/*指定指定c1,c2为字符型变量为字符型变量*/变量的内存存储情况变量的内存存储情况 Variable Range常量常量 Constant常量:常量:1.1.整型常量整型常量2.2.实型常量实型常量3.3.字符型常量字符型常量4.4.字符串常量字符串常量5.5.符号常量符号常量6.flash6.flash常量常量整型常量三种形式表示:
9、整型常量三种形式表示:十进制:如十进制:如 123 60 0八进制:以八进制:以0开始,如开始,如 0123十六进制:以十六进制:以0 x开始,如开始,如0 x123实型常量小数形式:实型常量小数形式:如如 123.0 .123 0.0 12.5指数形式:指数形式:如如123e2 123E2字符常量字符常量:单引号括起来的一个字符。如:单引号括起来的一个字符。如:a a 字符常量的值是一个数字值。如字符常字符常量的值是一个数字值。如字符常量量 0 0 ,其,其ASCIIASCII为为4848,所以存储的,所以存储的实际值为实际值为4848。字符常量可以象整数一样参与运算。字符常量可以象整数一样
10、参与运算。字符串常量:字符串常量:双引号括起来的字符序列。双引号括起来的字符序列。如如“Hi,AVR,0等等字符串在存储时末尾被自动加上字符串在存储时末尾被自动加上 字符字符0字符常量与只包含一个字符的字字符常量与只包含一个字符的字 符串常量的区别符串常量的区别符号常量符号常量:用一个标识符代表一个常量用一个标识符代表一个常量#define PI 3.14159#define PI 3.14159转义字符:转义字符:转义字符功能转义字符功能 ASCII记号记号 转义字符转义字符 功功 能能 ASCII记号记号 a 响铃响铃 BEL 反斜杠字反斜杠字?b 退格退格 BS 单引号字符单引号字符 f
11、 走纸换页走纸换页 FF “双引号字符双引号字符 n 换行换行 NL?问号问号?r 回车回车 CR ooo13位位8进制数进制数 ooo t 横向跳格横向跳格 HT xhh12位位16进制数进制数 hh v 纵向跳格纵向跳格 VTFLASH常量:常量:存储在程序存储区的常量存储在程序存储区的常量Flash char”hi,avr”;算术运算符算术运算符 Arithmetic OperationC语言提供了如下算术运算符:语言提供了如下算术运算符:(加法运算)(加法运算)(减法运算)(减法运算)*(乘法运算符)(乘法运算符)(除法运算符)(除法运算符)%(求余运算符,或称模运算符)(求余运算符,
12、或称模运算符)如:如:4%24%20 0说明:说明:两个整数相除结果为整数,如两个整数相除结果为整数,如8/5的结果为的结果为1,舍去小数部分。,舍去小数部分。如果参加运算的两个数中有一个数为实数,则结果是实型。如果参加运算的两个数中有一个数为实数,则结果是实型。求余运算要求求余运算要求%两侧都是整型数据。两侧都是整型数据。赋值运算符和赋值表达式赋值运算符和赋值表达式Evaluation Operation&Evaluation Express简单的赋值运算符:简单的赋值运算符:复合的赋值运算符复合的赋值运算符=+=、-=、*=、%=、/=i+=2 等价于 i=i+2 a*=b+5 等价于 a
13、=a*(b+5)x%=3 等价于 x=x%3void main(void)/Port A initialization.DDRA=0 xFF;PORTA=0 xFF;.while(1)/Place your code here PORTA=0 xFF;delay_ms(100);PORTA=0 x00;delay_ms(100);C C程序的三种基本结构程序的三种基本结构 C C程序采用结构化的程序设计方法,程序由若干个程序采用结构化的程序设计方法,程序由若干个基本结构组成。每一个基本结构可以包含一个或若干基本结构组成。每一个基本结构可以包含一个或若干个语句。主要有三种结构:个语句。主要有三种
14、结构:顺序结构顺序结构:程序按照语句顺序进行执行。:程序按照语句顺序进行执行。循环结构循环结构:当型循环结构:当型循环结构:“先判断,再操作先判断,再操作”直到型循环结构:直到型循环结构:“先操作,再判断先操作,再判断”1.1.选择(分支)结构:选择(分支)结构:whilewhile语句训练语句训练Cycle Structure Programmingwhilewhile语句用来实现语句用来实现“当型当型”循环,循环,执行过程:首先判断表达式,执行过程:首先判断表达式,当表达式的值为真(非当表达式的值为真(非0 0)时,)时,反复执行循环体。为假(反复执行循环体。为假(0 0)时)时执行循环体
15、外面的语句。执行循环体外面的语句。循环体循环体循环继续的条循环继续的条件表达式件表达式下一条语句下一条语句非非0(真)(真)0(假)(假)循环体语句组循环体语句组while执行过程执行过程格式:格式:while(循环继续的条件表达式)(循环继续的条件表达式)语句组语句组;花括号不花括号不能丢掉!能丢掉!请问:下述程序实现了什么功能?请问:下述程序实现了什么功能?main()main()int i,sum=0;int i,sum=0;while(i=10)while(i=10)sum=sum+i;sum=sum+i;i+;i+;do-whiledo-while语句语句Cycle Structur
16、e Programmingdo-while语句用来实现语句用来实现“直到型直到型”循环循环执行过程:先执行过程:先无条件无条件执行一次循环体,执行一次循环体,然后判断条件表达式,当表达式的值然后判断条件表达式,当表达式的值为真(非为真(非0)时,返回执行循环体直)时,返回执行循环体直到条件表达式为假(到条件表达式为假(0)为止。)为止。绝对不能少分号!绝对不能少分号!循环体循环体格式:格式:dodo 循环体语句组;循环体语句组;while(while(循环继续条件循环继续条件);花括号不花括号不能丢掉!能丢掉!循环继续的条循环继续的条件表达式件表达式下一条语句下一条语句非非0(真)(真)0(假
17、)(假)循环体语句组循环体语句组请问:下述程序实现了什么功能?请问:下述程序实现了什么功能?main()main()int i=0,sum=0;int i=0,sum=0;do do sum=sum+i;sum=sum+i;i=i+1;i=i+1;while(i=100);while(i=100);自增、自减运算自增、自减运算Increment Decrement Operators实战演练:请说明程序运行完后实战演练:请说明程序运行完后x,y,zx,y,z的值分别是多少?的值分别是多少?main()main()int x=6,y,z;int x=6,y,z;y=+x;y=+x;z=x-;z=
18、x-;自增运算符(自增运算符(+)和自减运算符()和自减运算符(-):):(1 1)前置运算前置运算变量、变量变量、变量 即先增减、后运算。即先增减、后运算。(2 2)后置运算后置运算变量、变量变量、变量 即先运算、后增减。即先运算、后增减。循环继续条件循环继续条件for的下一条语句的下一条语句非非0(真)(真)0(假)(假)循环体语句组循环体语句组循环变量赋初值循环变量赋初值循环变量增值循环变量增值forfor语句循环执行过程语句循环执行过程只求解一次只求解一次要执行若干次,要执行若干次,具体次数由具体次数由“循循环继续条件环继续条件”决决定定for语句不仅可用于语句不仅可用于循环次数已经确
19、定循环次数已经确定的情况,也可用于的情况,也可用于循环次数虽不确定,循环次数虽不确定,但给出了循环继续但给出了循环继续条件的情况,它完条件的情况,它完全可以代替全可以代替while语语句和句和do-while语句。语句。for(for(循环变量赋初值循环变量赋初值;循环继续条件循环继续条件;循环变量增值循环变量增值 )循环体语句组;循环体语句组;总循环次数已确定总循环次数已确定的情况下,可采用的情况下,可采用forfor语句形式为:语句形式为:forfor语句的一般形式:语句的一般形式:for(for(循环变量赋初值循环变量赋初值;循环继续条件循环继续条件;循环变量增值循环变量增值 )循环体语
20、句组;循环体语句组;分隔符分隔符为分号为分号forfor语句语句Cycle Structure Programming请问:下述程序实现了什么功能?请问:下述程序实现了什么功能?main()main()int i,y=0;int i,y=0;for(i=1;i=10;i+)for(i=1;i=10;i+)y=y+i;y=y+i;总循环次数已确定总循环次数已确定的情况下,可采用的情况下,可采用forfor语句形式为:语句形式为:forfor语句的一般形式:语句的一般形式:for(for(循环变量赋初值循环变量赋初值;循环继续条件循环继续条件;循环变量增值循环变量增值 )循环体语句组;循环体语句组
21、;分隔符分隔符为分号为分号forfor语句语句Cycle Structure Programming1、运用、运用while()循环方式,实现数码管从循环方式,实现数码管从0显示到显示到3,并循环,并循环3次的功能。每个数字显示间隔次的功能。每个数字显示间隔0.5秒。秒。2、运用、运用do while()循环,实现数码管从循环,实现数码管从4显示到显示到6,并循环,并循环4次的功能。每个数字显示间隔次的功能。每个数字显示间隔0.5秒。秒。3、运用、运用for()循环,实现数码管从循环,实现数码管从7显示到显示到9,并,并循环循环5次的功能。每个数字显示间隔次的功能。每个数字显示间隔0.5秒。秒
22、。上机编程练习:上机编程练习:If 语句 简单形式:简单形式:标准形式:标准形式:ifif(条件表达式)(条件表达式)ifif(条件表达式)(条件表达式)语句组语句组1 1;语句组;语句组;else else 语句组语句组2 2;表达式表达式非非 0 真真0 假假语句组语句组1表达式表达式非非 0 真真0 假假语句组语句组1语句组语句组2不可以同时不可以同时执行两者执行两者!复合语句复合语句请问:下述程序执行完后请问:下述程序执行完后x,y,z分别是什么值?分别是什么值?main()int i,x=0,y=1,z=2;if(x=0)y=y+1;if(y=2)z =3;请问:下述程序执行完后请问
23、:下述程序执行完后x,y,z分别是什么值?分别是什么值?main()int i,x=0,y=1,z=2;if(x=0)y=y+1;else z =3;一种if语句的常用多分支形式 if(if(表达式表达式1)1)语句组语句组1 1;else if(else if(表达式表达式2)2)语句组语句组2 2;else if(else if(表达式表达式3)3)语句组语句组3 3;else else 语句组语句组n n;执行特点执行特点:顺序判断每个:顺序判断每个ifif语句括号中的表达式,直到语句括号中的表达式,直到遇到一个满足条件的表达式时,执行其后面的相应语句遇到一个满足条件的表达式时,执行其后面的相应语句后后(接下来的(接下来的ifif语句将被跳过而不再进行判断)语句将被跳过而不再进行判断)就结束就结束整个整个ifif嵌套语句的执行。嵌套语句的执行。注意:注意:elseelse总是与它前面最接近它而又没有和其它总是与它前面最接近它而又没有和其它elseelse语句配对的语句配对的ifif语句配对。书写格式上要注意有层次感。语句配对。书写格式上要注意有层次感。if-else if语句的流程图