《项目二 流水灯系统设计ppt课件(完整版).ppt》由会员分享,可在线阅读,更多相关《项目二 流水灯系统设计ppt课件(完整版).ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、项目二项目二 流水灯系统设计流水灯系统设计ppt课件(完整课件(完整版)版)单单 片片 机机 应应 用用 技技 术术 项目二项目二 流水灯系统设计流水灯系统设计2.1 单片机的单片机的C语言语言2.2 C51的数据与运算的数据与运算2.3 C51 流程控制语句流程控制语句2.4 C语言的函数语言的函数2.5 数组的概念数组的概念2.1 单片机的单片机的C语言语言1.C语言的特点语言的特点p结构化语言p丰富的数据类型p便于维护管理p与汇编语言相比,C语言的优点如下:不要求编程者详细了解单片机的指令系统,但需了解单片机的存储器结构;寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理;结构清
2、晰,程序可读性强;编译器提供了很多标准库函数,具有较强的数据处理能力。2.C语言的结构语言的结构 C语言程序以函数形式组织程序结构,C程序中的函数与其他语言中所描述的“子程序”或“过程”的概念是一样的。 C程序基本结构2.1 单片机的单片机的C语言语言p一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列顺序如何,最后在主函数中结束整个程序。pC语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。pC语言程序使用“;”作为语句的结束符
3、,一条语句可以多行书写,也可以一行书写多条语句。2.1 单片机的单片机的C语言语言分隔符分隔符为分号为分号2.2 C语言数据与运算语言数据与运算 1.C51的数据与数据类型的数据与数据类型 2. 常量与变量常量与变量 3. C51的数据存储类型与的数据存储类型与8051存储器结构存储器结构 4. 8051特殊功能寄存器(特殊功能寄存器(SFR)及其)及其C51定义定义 5.位变量(位变量(BIT)及其)及其C51定义定义 6.C51运算符表达式及其规则运算符表达式及其规则一一.数据与数据类型数据与数据类型数据数据具有一定格式的数字或数值叫做数据具有一定格式的数字或数值叫做数据数据类型数据类型数
4、据的不同格式叫做数据类型数据的不同格式叫做数据类型 单片机编程中所使用的是单片机编程中所使用的是C51语言,与语言,与ANSI C基本基本相同,只是在某些方面进行了扩展。简单的说,相同,只是在某些方面进行了扩展。简单的说,C51语语言是在言是在ANSI C标准的基础上标准的基础上扩展了数据类型和关键字扩展了数据类型和关键字。C51编译器中编译器中int 和和short 相同,相同,float 和和double 相同。相同。 在在ANSI C标准标准C 语言中基本的数据类型为语言中基本的数据类型为char、int、short、long、float 和和double,2.2 C语言数据与运算语言数
5、据与运算 KEIL uVision2 C51 编译器所支持的数据类型编译器所支持的数据类型数据类型数据类型长长 度度值值 域域unsigned char单字节单字节0255signed char单字节单字节-128+127unsigned int双字节双字节065535signed int双字节双字节-32768+32767unsigned long四字节四字节04294967295signed long四字节四字节-2147483648+2147483647float四字节四字节1.175494E-383.402823E+38*13 字节字节对象的地址对象的地址bit位位0 或或 1sfr单
6、字节单字节0255sfr16双字节双字节065535sbit位位0 或或 1。默认值为默认值为signed 类类型型2.2 C语言数据与运算语言数据与运算 C C5151的数据类型扩充定义的数据类型扩充定义sfr:sfr:特殊功能寄存器特殊功能寄存器声明声明sfr16:sfr16:sfrsfr的的1616位数据声明位数据声明sbit:sbit:特殊功能位声明特殊功能位声明bitbit: :位变量声明位变量声明2.2 C语言数据与运算语言数据与运算 1.sfr 特殊功能寄存器特殊功能寄存器 sfr 是一种扩充数据类型,是一种扩充数据类型,占用一个内存单元(占用一个内存单元(1个字节),个字节),
7、值域为值域为0255。利用它可以访问利用它可以访问51单片单片机内部的所有机内部的所有特殊功能寄存器特殊功能寄存器。sfr 特殊功能寄存器名特殊功能寄存器名= 特殊功能寄存器地址常数特殊功能寄存器地址常数; sfr P0= 0 x80; sfr IE=0 xA8H;#include 2.2 C语言数据与运算语言数据与运算 2.sfr16 16 位特殊功能寄存器位特殊功能寄存器 sfr16 占用两个内存单元,值域为占用两个内存单元,值域为065535。sfr16和和sfr 一样用于操作特殊功能寄存器,一样用于操作特殊功能寄存器,所不同的是它用于操所不同的是它用于操作占两个字节的寄存器。作占两个字
8、节的寄存器。sfr16 特殊功能寄存器名特殊功能寄存器名= 特殊功能寄存器地址常数特殊功能寄存器地址常数; 用用sfr16定义定义16位特殊功能寄存器时,等号后面是它位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物理低位地址之上。的低位地址,高位地址一定要位于物理低位地址之上。 sfr 16 T2 = 0 xCC;2.2 C语言数据与运算语言数据与运算 sbit 也是也是C51 中的一种扩充数据类型,中的一种扩充数据类型,利用它可以利用它可以访问芯片内部的访问芯片内部的RAM 中的中的可寻址位可寻址位或或特殊功能寄存器特殊功能寄存器中的可寻址位中的可寻址位。3.sbit 可寻址
9、位可寻址位(1)sbit 位变量名位地址位变量名位地址 sbit P1_1 = 0 x91;这样是把位的绝对地址赋给位变量。同这样是把位的绝对地址赋给位变量。同sfr一样一样sbit的位地址必须位的位地址必须位于于80H-FFH之间。之间。(2)sbit 位变量名特殊功能寄存器名位变量名特殊功能寄存器名位位置位位置 sfrP1 = 0 x90;sbit P1_1 = P1 1; /先定义一个特殊功能寄存器名再指定位变先定义一个特殊功能寄存器名再指定位变量名所在的位置。量名所在的位置。 当可寻址位位于特殊功能寄存器中时可采用这种方法当可寻址位位于特殊功能寄存器中时可采用这种方法,例如例如sbit
10、 OV = PSW2; (3)sbit 位变量名字节地址位变量名字节地址位位置位位置sbit P1_1 = 0 x90 1; 2.2 C语言数据与运算语言数据与运算 二二.常量与变量常量与变量常量是在程序运行过程中常量是在程序运行过程中不能改变值不能改变值的量,如固定的数据表,字库等。的量,如固定的数据表,字库等。 1. 常量常量(1) 整型常量可以表示为十进制如整型常量可以表示为十进制如123,0,89等。十六进制则以等。十六进制则以0 x开头如开头如0 x34,-0 x3B等。等。 (2) 浮点型常量可分为十进制和指数表示形式。十进制由数字和小浮点型常量可分为十进制和指数表示形式。十进制由
11、数字和小数点组成,如数点组成,如0.888,3345.345,0.0等。等。 (3) 字符型常量是单引号内的字符,如字符型常量是单引号内的字符,如A,B等等 (4) 字符串型常量由双引号内的字符组成,如字符串型常量由双引号内的字符组成,如“TEST,OK等。等。 (5) 位标量,它的值是一个二进制。位标量,它的值是一个二进制。 常量的数据类型只有整型、浮点型、字符型、字符串型和位型。常量的数据类型只有整型、浮点型、字符型、字符串型和位型。2.2 C语言数据与运算语言数据与运算 常量定义的几种方式常量定义的几种方式#define False 0 x0#define True 0 x1/这里定义这
12、里定义False为为0,True为为1在程序中用到在程序中用到False编译时自动用编译时自动用0替换,同理替换,同理True替换为替换为1 (1)用预定义语句可以定义常量)用预定义语句可以定义常量unsigned int code a=100; /这一句用这一句用 code 把把 a 定义在定义在程序存储器中并赋值程序存储器中并赋值(2)用)用code 定义定义2.2 C语言数据与运算语言数据与运算 const unsigned int c=100; /用用 const 定义定义 c 为无符号为无符号 int 常量并赋值常量并赋值 。(3)用)用const 定义定义 以上以上2,3两句它们的
13、值都保存在程序存储器中,而两句它们的值都保存在程序存储器中,而程序程序存储器存储器在运行中是不允许被修改的。在运行中是不允许被修改的。2.2 C语言数据与运算语言数据与运算 2. 变量变量 变量就是一种在程序执行过程中其值能变量就是一种在程序执行过程中其值能不断变化不断变化的量。变量的定义能使用所有的量。变量的定义能使用所有c51编译器支持的数据类编译器支持的数据类型型 。 定义一个变量的格式定义一个变量的格式存储种类存储种类数据类型数据类型存储器类型存储器类型变量名表变量名表 dataunsigned charsmalla ;2.2 C语言数据与运算语言数据与运算 存储器类型说明Data(0
14、0H-7FH)直接访问内部数据存储器(128字节),访问速度最快Bdata (20H-2FH)可位寻址内部数据存储器(16字节),允许位与字节混合访问xdata外部数据存储器(64KB),用MOVX DPTR指令访问code程序存储器(64KB),用MOVC A+DPTR指令访问 数据类型数据类型和和变量名表变量名表是必要的,其它都是可选项。是必要的,其它都是可选项。unsigned chara ;2.2 C语言数据与运算语言数据与运算 三三.C51的数据存储类型与的数据存储类型与8051存储器结构存储器结构1.C511.C51的数据存储类型的数据存储类型类型关键字长度说明data直接访问内部
15、数据存储器(128字节),访问速度最快bdata 可位寻址内部数据存储器(16字节),允许位与字节混合访问idata间接寻址片内数据存储器,可访问片内全部RAM地址空间(256字节)pdata分页寻址片外数据存储区(256字节),由MOVXR0访问xdata外部数据存储器(64KB),用MOVX DPTR指令访问code程序存储器(64KB),用MOVC A+DPTR指令访问单片机存储类型及与单片机存储类型及与80518051存储空间的对应关系存储空间的对应关系2.2 C语言数据与运算语言数据与运算 变量的存储类型定义举例:变量的存储类型定义举例:char data pulse;/data存储
16、类型存储类型,该变量被定位在该变量被定位在8051片内数据存储区片内数据存储区 中(地址:中(地址:00H07H)。)。bit bdata flag; /bdata存储类型,该变量被定位在存储类型,该变量被定位在8051片内数据存储片内数据存储 区中的可位寻址区(地址:区中的可位寻址区(地址:20H2FH)。)。float idata x,y,z; / idata存储类型,该变量被定位在存储类型,该变量被定位在8051片内数据存片内数据存 储区,并只能用间接寻址的方法进行访问。储区,并只能用间接寻址的方法进行访问。unsigned int pdata length; / pdata存储类型,该
17、变量被定位在片外数存储类型,该变量被定位在片外数据存储区,并用操作码据存储区,并用操作码MOVXRi访问。访问。unsigned char xdata parameter 835; / xdata存储类型,该变量存储类型,该变量被定位在片外数据存储区,并占据被定位在片外数据存储区,并占据 835=120字节存储空间。字节存储空间。2.2 C语言数据与运算语言数据与运算 存储模式存储模式说明说明SMALL该模式与采用data存储类型方式相同,参数及局部变量放入可直接寻址的片内存储器(最大128字节),访问速度快、效率高。所有对象包括堆栈,都必须嵌入片内RAM。栈长很关键,因为实际栈长依赖于不同函
18、数的嵌套层数。COMPACT该模式默认的存储类型是PDATA,参数及局部变量放入分页片外存储区(最大256字节),通过寄存器R0和R1(R0,R1)间接寻址,栈空间位于8051系统内部数据存储区中。LARGE该模式默认的存储类型是XDATA,参数及局部变量直接放入片外数据存储区(最大64KB),使用数据指针DPTR来进行寻址。用此数据指针进行访问效率较低,尤其是对两个或多个字节的变量,这种数据类型的访问机制直接影响代码的长度。另一不方便之处在于这种数据指针不能对称操作。存储模式及说明存储模式及说明2.2 C语言数据与运算语言数据与运算 运算符就是完成某种特定运算的符号。运算符就是完成某种特定运
19、算的符号。 运算符按其表达式中与运算符的关系可分为运算符按其表达式中与运算符的关系可分为:单目单目运算符,双目运算符和三目运算符。运算符,双目运算符和三目运算符。 表达式则是由运算及运算对象所组成的具有特定表达式则是由运算及运算对象所组成的具有特定含义的式子。含义的式子。 C是一种表达式语言,表达式后面加是一种表达式语言,表达式后面加;号就构号就构成了一个表达式语句。成了一个表达式语句。 四四. C51运算符表达式及其规则运算符表达式及其规则2.2 C语言数据与运算语言数据与运算 其中只有取正值和取负值运算符是单目运算符,其它其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符。则都
20、是双目运算符。+加或取正值运算符加或取正值运算符-减或取负值运算符减或取负值运算符*乘运算符乘运算符/除运算符除运算符%取余运算符取余运算符表达式表达式1算术运算符表达式算术运算符表达式21.算术运算符及其表达式算术运算符及其表达式(1)算术运算符)算术运算符(2)算术表达式)算术表达式2.2 C语言数据与运算语言数据与运算 (3)优先级和结合性)优先级和结合性: 算术运算符的优先级算术运算符的优先级:先乘除模先乘除模,后加减后加减,括号括号最优先最优先算术运算符的结合性算术运算符的结合性:自左至右方向自左至右方向2.赋值运算符赋值运算符变量变量 = 表达式;表达式; a = 0 xFF; /
21、将常数十六进制数将常数十六进制数 FF 赋于变量赋于变量 ab = c = 33; /同时赋值给变量同时赋值给变量 b,c d = e; /将变量将变量 e 的值赋于变量的值赋于变量 d f = a+b; /将变量将变量 a+b 的值赋于变量的值赋于变量 f2.2 C语言数据与运算语言数据与运算 3.增减量运算符增减量运算符+ 增量运算符增量运算符- 减量运算符减量运算符作用就是作用就是 对运算对象作加对运算对象作加 1 和减和减 1 运算。运算。注意:注意:运算对象在符号运算对象在符号前前或或后后,其含义都是不一样的,虽,其含义都是不一样的,虽 然同是加然同是加 1 或减或减 1。如:。如:
22、I+,+I,I-,-I。I+(或(或 I-) 是先使用是先使用 I 的值,再执行的值,再执行 I+1(或(或 I-1)+I(或(或-I) 是先执行是先执行 I+1(或(或 I-1),再使用),再使用 I 的值。的值。增减量运算符只允许用于变量的运算中,不能用于常数或增减量运算符只允许用于变量的运算中,不能用于常数或表达式。表达式。 2.2 C语言数据与运算语言数据与运算 4.关系运算符及其表达式关系运算符及其表达式 大于大于 小于小于 大于等于大于等于 小于等于小于等于 等于等于! 等于等于 前四个前四个具有相同的优先级,具有相同的优先级,后两个后两个也具有相同的也具有相同的优先级,但是前四个
23、的优先级要高于后优先级,但是前四个的优先级要高于后2个的。个的。 (1)关系运算符)关系运算符2.2 C语言数据与运算语言数据与运算 表达式表达式 1 关系运算符关系运算符 表达式表达式 2 (2)关系表达式p 用用关系运算符关系运算符将两个表达式(可以是算术表达式、关系表达式将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式、赋值表达式或逻辑表达式)连接起来的式子,称为连接起来的式子,称为关系表达式关系表达式。p 关系表达式的值为关系表达式的值为逻辑值逻辑值“真真”或或“假假”,以,以1代表代表“真真”,以,以0代表代表“假假”。 例如:例如: (1)关系表达式关系表达式“8
24、=4”的值为的值为 ,表达式的值为,表达式的值为 。 (2) 关系表达式关系表达式“50”的值为的值为 ,表达式的值为,表达式的值为 。 2.2 C语言数据与运算语言数据与运算 5.逻辑运算符及其表达式逻辑运算符及其表达式逻辑与逻辑与& :条件式:条件式 1 & 条件式条件式 2 逻辑或逻辑或 | :条件式:条件式 1 | 条件式条件式 2逻辑非逻辑非 ! : ! 条件式条件式 2逻辑与逻辑与:当条件式:当条件式 1“与与”条件式条件式 2 都为真时结果为真都为真时结果为真(非(非 0 值),不然为值),不然为 假(假(0 值)。值)。 逻辑或逻辑或:是指只要二个运算条件中有一个为真时,运算:
25、是指只要二个运算条件中有一个为真时,运算结果就为真,只有当条件式都不结果就为真,只有当条件式都不 为真时,逻辑运算结果为真时,逻辑运算结果才为假才为假 逻辑非逻辑非则是把逻辑运算结果值取反则是把逻辑运算结果值取反 优先级优先级 :!(逻辑非)(逻辑非)&(逻辑与)(逻辑与)|(逻辑或)(逻辑或),逻辑非的逻辑非的 优先值最高。运算结果只有优先值最高。运算结果只有0和和1。2.2 C语言数据与运算语言数据与运算 6.位操作及其表达式位操作及其表达式变量变量 1 位运算符位运算符 变量变量 2 优先级从高到低依次是优先级从高到低依次是:“”(按位取反按位取反)“”(右移右移) “&”(按位与按位与
26、)“”(按位异或按位异或)“|”(按位或按位或)& 按位与按位与 | 按位或按位或 按位异或按位异或 按位取反按位取反 右移右移2.2 C语言数据与运算语言数据与运算 例:若例:若a=1100,0011B=0 xc3,将将a的值右循环两位的值右循环两位main()unsigned char a=0 xc3,b,c;int n=2;b=an;a=c|b;2.2 C语言数据与运算语言数据与运算 7.复合赋值运算符复合赋值运算符复合赋值运算符就是在赋值运算符复合赋值运算符就是在赋值运算符“=”的前面加上其他运算符。的前面加上其他运算符。 +=加法赋值加法赋值=右移位赋值右移位赋值-=减法赋值减法赋值
27、&=逻辑与赋值逻辑与赋值*=乘法赋值乘法赋值|=逻辑或赋值逻辑或赋值/=除法赋值除法赋值=逻辑异或赋值逻辑异或赋值%= 取模赋值取模赋值 -= 逻辑非赋值逻辑非赋值= 左移位赋值左移位赋值 变量变量 复合赋值运算符复合赋值运算符 表达式表达式 含义就是变量与表达式先进行运算符所要求的运算,再把含义就是变量与表达式先进行运算符所要求的运算,再把运算结果赋值给参与运算的变量。运算结果赋值给参与运算的变量。 i + = 2 等价于等价于 i = i + 2 a * = b + 5 等价于等价于 a = a * (b + 5) x% = 3 等价于等价于 x = x%32.2 C语言数据与运算语言数据
28、与运算 1)变量赋值时发生的隐式转换,)变量赋值时发生的隐式转换,“”号右边的表号右边的表达式的数据类型转换成左边变量的数据类型。达式的数据类型转换成左边变量的数据类型。 8.强制类型转换运算符强制类型转换运算符void main(void)unsigned char a;unsigned int b;while(1)b=100*4;a=b;把把 INT 赋值给赋值给 CHAR 字符型变量,得字符型变量,得到的到的 CHAR 将会是将会是 INT 的低的低 8 位。如位。如把浮点数赋值给整型变量,小数部分将把浮点数赋值给整型变量,小数部分将丢失。丢失。2.2 C语言数据与运算语言数据与运算 2
29、)所有)所有 char 型的操作数转换成型的操作数转换成 int 型。型。3)两个具有不一样数据类型的操作数用运算符连接时,)两个具有不一样数据类型的操作数用运算符连接时,隐式转换会按以下次序进行:如隐式转换会按以下次序进行:如 有一操作数是有一操作数是 float 类型类型,则另一个操作数也会转换成,则另一个操作数也会转换成 float 类型;如果一个操作类型;如果一个操作数为数为 long 类型,另一个也转换成类型,另一个也转换成 long;如果一个操作数是;如果一个操作数是 unsigned 类型,则另一个操作会被转换成类型,则另一个操作会被转换成 unsigned 类型。类型。单片机单
30、片机c语言语言 中只有中只有 char,int,long 及及 float 这几种基本的数据这几种基本的数据类型能被隐式转换。而其它的数据类型类型能被隐式转换。而其它的数据类型 就只能用到显示转换就只能用到显示转换。 强制转换运算符应遵循以下的表达形式:强制转换运算符应遵循以下的表达形式:(类型类型) 表达式表达式 2.2C语言数据与运算语言数据与运算 编程编程1:点亮:点亮P1.0处的小灯处的小灯LED。思考:点亮思考:点亮P1口的口的8盏小灯盏小灯2.2C语言数据与运算语言数据与运算 编程编程2:使:使P1.0处的小灯处的小灯LED以周期是以周期是2S的时间闪烁。的时间闪烁。2.2C语言数
31、据与运算语言数据与运算 编程编程3:8盏小灯盏小灯L1L8依次接在依次接在P1口的口的8个引脚上,个引脚上,开始时L1L2L3L4L8L1L8亮,重复循环。 2.2C语言数据与运算语言数据与运算 编程编程4:8盏小灯盏小灯L1L8依次接在依次接在P1口的口的8个引脚上,个引脚上,开始时L1L2L3L4L8L7 L6L1 L2亮,重复循环。 2.3 C语言的基本语句语言的基本语句语言程序的执行部分由语句组成。C语言提供了丰富的程序控制语句,按照结构化程序设计的基本结构:顺序结构、选择结构和循环结构,组成各种复杂程序。这些语句主要包括表达式语句、复合语句、选择语句和循环语句等。 1.表达式语句和复
32、合语句表达式语句和复合语句 p表达式语句是最基本的C语言语句。表达式语句由表达式加上分号“;”组成,其一般形式如下: 表达式;表达式;执行表达式语句就是计算表达式的值。p在 C 语言中有一个特殊的表达式语句,称为空语句。空语句中只有一个分号“;”,程序执行空语句时需要占用一条指令的执行时间,但是什么也不做。在C51程序中常常把空语句作为循环体,用于消耗CPU时间等待事件发生的场合。 2.3 C语言的基本语句语言的基本语句p把多个语句用大括号括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合而成的语句块称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。p复合语句在程序
33、运行时,中的各行单语句是依次顺序执行的。在C语言的函数中,函数体就是一个复合语句。 2.3 C语言的基本语句语言的基本语句2.选择语句选择语句 基本if语句的格式如下:if (表达式) 语句组; if语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组”,否则跳过该语句组,继续执行下面的语句。 2.3 C语言的基本语句语言的基本语句pif语句中的“表达式”通常为逻辑表达式或关系表达式,也可以是任何其他的表达式或类型数据,只要表达式的值非0即为“真”。以下语句都是合法的: if(3) if(x=8) if(P3_0)p在if语句中,“表达式”必须用括号括起来。p在if语句中,花括号“
34、”里面的语句组如果只有一条语句,可以省略花括号。如“if (P3_0=0) P1_0=0;”语句,但是为了提高程序的可读性和防止程序书写错误,建议读者在任何情况下,都加上花括号。2.3 C语言的基本语句语言的基本语句if-else语句的一般格式如下:if (表达式) 语句组1; else 语句组2; if-else语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组1”,否则执行“语句组2” 2.3 C语言的基本语句语言的基本语句if-else-if语句是由 if else 语句组成的嵌套,用来实现多个条件分支的选择,其一般格式如下:if (表达式1) 语句组1; else if (
35、表达式2) 语句组2; else if (表达式n) 语句组n; else 语句组n+1; 2.3 C语言的基本语句语言的基本语句2.3 C语言的基本语句语言的基本语句多分支选择的switch语句, 其一般形式如下: switch(表达式) case常量表达式1: 语句组1;break; case常量表达式2: 语句组2;break; case常量表达式n: 语句组n;break; default : 语句组n+1; 该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应该常量表达式后的语句组,再执行break语句,
36、跳出switch语句的执行,继续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同,则执行default后的语句组。2.3 C语言的基本语句语言的基本语句whilewhile语句用来实现语句用来实现“当型当型”循环,循环,执行过程:首先判断表达式,执行过程:首先判断表达式, 当表达式的值为真(非当表达式的值为真(非0 0)时,)时,反复执行循环体。为假(反复执行循环体。为假(0 0)时)时执行循环体外面的语句。执行循环体外面的语句。循环体循环体循环继续的循环继续的条件表达式条件表达式下一条语句下一条语句非非0(真(真)0(假(假)循环体语句循环体语句组组while执行过程执行过
37、程格式:格式: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+; 3.循环语句循环语句 2.3 C语言的基本语句语言的基本语句do-while语句用来实现语句用来实现“直到型直到型”循环循环执行过程:先无条件执行一次循环体,执行过程:先无条件执行一次循环体,然后判断条件表达式,当表达式的值然后
38、判断条件表达式,当表达式的值为真(非为真(非0)时,返回执行循环体直)时,返回执行循环体直到条件表达式为假(到条件表达式为假(0)为止。)为止。绝对不能少分号!绝对不能少分号!循环体循环体格式:格式:dodo 循环体语句组;循环体语句组; while( while(循环继续条件循环继续条件) );花括号花括号不能丢不能丢掉!掉!循环继续的循环继续的条件表达式条件表达式下一条语句下一条语句非非0(真(真)0(假(假)循环体语句循环体语句组组请问:下述程序实现了什么功能?请问:下述程序实现了什么功能?main( )main( ) int i,sum=0; int i,sum=0; do do su
39、m=sum+i; sum=sum+i; i+; i+; while(i=100); while(i=100); 2.3 C语言的基本语句语言的基本语句总循环次数已确定总循环次数已确定的情况下,可采用的情况下,可采用forfor语句形式语句形式为:为:forfor语句的一般形式:语句的一般形式: for(for(循环变量赋初值循环变量赋初值;循环继续条件循环继续条件;循环变循环变量增值量增值 ) ) 循环体语句组;循环体语句组; 分隔符分隔符为分号为分号请问:下述程序实现了什么功能?请问:下述程序实现了什么功能?main( )main( ) int i,y=0; int i,y=0; for(i
40、=1;i=10;i+) for(i=1;i=10;i+) y=y+i; y=y+i; 2.3 C语言的基本语句语言的基本语句循环继续条循环继续条件件for的下一条语句的下一条语句非非0(真(真)0(假(假)循环体语句循环体语句组组循环变量赋初循环变量赋初值值循环变量增循环变量增值值for语句循环执行过程只求解一次只求解一次要执行若干次,要执行若干次,具体次数由具体次数由“循循环继续条件环继续条件”决决定定for(for(循环变量赋初值循环变量赋初值;循环继续条件循环继续条件;循环变量增值循环变量增值 ) ) 循环体语句组;循环体语句组; 2.3 C语言的基本语句语言的基本语句2.4 C语言的函
41、数语言的函数1. 函数分类函数分类标准库函数标准库函数用户自定义函数用户自定义函数 while语句实现语句实现While (表达式)语句(内部可为空)特点:先判断表达式,后执行语句。原则:若表达式非0,即为真,那么执行语句。否则跳出while 语句。2.4 C语言的函数语言的函数2.2.延时函数的编写延时函数的编写#includeSbit p10=P10;Main() unsigned int a; a=50000; p10=0; while(a-); a=50000; p10=1; while(a-); 1.软件仿真看延时时间2.更改a的值超过值域范围看看a的值2.4 C语言的函数语言的函数
42、for语句实现语句实现For (表达式1;表达式2;表达式3) 语句(内部可为空)执行过程:1.求解一次表达式1.2.求解表达式2,若其值为真(非0 即为真),则执行for中语句。然后执行第3步。否则结束for 语句,直接跳出,不再执行第3步。3.求解表达式3.4.跳到第2步重复执行。2.4 C语言的函数语言的函数delay函数函数Void delay() for(b=500;b0;b-) for(c=200;c0;c-); 1.软件仿真看时间2.子程序的位置main前 main后( 声明)3.充分利用step stepover看程序运行情况 看变量带参的带参的delay子函数子函数Void
43、delay(unsigned char x) for(b=500;b0;b-) for(c=200;c0;c-); 1.子函数声明2.带参的好处 看实参到形参传递2.4 C语言的函数语言的函数 蜂鸣器响2.4 C语言的函数语言的函数3.3.简单程序的编写简单程序的编写 Sbit beep=P21; Beep=0;如图所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。例例1 模拟开关灯模拟开关灯2.4 C语言的函数语言的函数如图所示,AT89S51单片机的P1.0P1.3接四个发光二极管L1L4,P1.4
44、P1.7接了四个开关K1K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。例题例题2 多路开关状态指示多路开关状态指示2.4 C语言的函数语言的函数做单一灯的左移右移,硬件电路如图所示,八个发光二极管L1L8分别接在单片机的P1.0P1.7接口上,输出“0”时,发光二极管亮,开始P1.0P1.1P1.2P1.3P1.7P1.6P1.0亮,重复循环。 例题例题3:广告灯的左移右移:广告灯的左移右移2.4 C语言的函数语言的函数1.第一盏灯亮 第一二亮 到全亮 2.移位子程序编写(P75) temp=0 xfe; P1=temp; delay(); for(
45、i=1;i8;i+) a=temp(8-i); P1=a|b; delay(); P1=0XFE;P1=P11|0X01; 1111,1110 1111,1100 1111,1000 1111,0000 0000,00002.4 C语言的函数语言的函数流水彩灯2.4 C语言的函数语言的函数 3.流水灯实现(左移右移) 4.花样灯编写2.4 C语言的函数语言的函数2.5数组的概念数组的概念 具有相同类型的若干个数据项按有序的形式组织起具有相同类型的若干个数据项按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。组来,这些按序排列的同类数据元素的集合称为数组。组成数组的各个数据分项称为
46、数组元素。成数组的各个数据分项称为数组元素。 数组可分为一维、二维、三维和多维数组等,常用数组可分为一维、二维、三维和多维数组等,常用的是一维、二维和字符数组的是一维、二维和字符数组1.一维数组一维数组定义方式如下:定义方式如下:类型说明符数组名类型说明符数组名整型表达式整型表达式2.2.数组的初始化数组的初始化所谓数组初始化,就是在定义说明数组的同时,给数组附新值。对数组的所谓数组初始化,就是在定义说明数组的同时,给数组附新值。对数组的初始化可用以下方法实现。初始化可用以下方法实现。(1)在定义数组时对数组的全部元素赋予初值。例如:在定义数组时对数组的全部元素赋予初值。例如:int idat
47、a a6=0,1,2,3,4,5;在上面的初始化中,将数组的全部元素的初值依次放在花括号内。这样,在上面的初始化中,将数组的全部元素的初值依次放在花括号内。这样,初始化后,初始化后,a0=0,a1=1,a5=5。(2)只对数组的部分元素初始化。例如:)只对数组的部分元素初始化。例如:int idata a10=0,1,2,3,4,5;在定义中在定义中a数组共有数组共有10个元素,但花括号内只有个元素,但花括号内只有6个初值,则数组的前个初值,则数组的前6个元个元素被赋予初值,而后素被赋予初值,而后4个元素的值为个元素的值为0。(3)对数组的全部元素都不赋予初值。例如:)对数组的全部元素都不赋予
48、初值。例如:int idata a10;在定义数组时,若不对数组的元素赋值,则数组的全部元素赋值为在定义数组时,若不对数组的元素赋值,则数组的全部元素赋值为0。2.5数组的概念数组的概念3.3.数组的应用数组的应用2.5数组的概念数组的概念#include /51#include /51单片机头文件单片机头文件#define uchar unsigned char /#define uchar unsigned char /宏定义宏定义#define uint unsigned int /#define uint unsigned int /宏定义宏定义uchar code table8=0
49、xfe, 0 xfd, 0 xfb, 0 xf7, 0 xef, 0 xdf, 0 xbf, uchar code table8=0 xfe, 0 xfd, 0 xfb, 0 xf7, 0 xef, 0 xdf, 0 xbf, 0 x7f;/0 x7f;/小灯共小灯共8种状态,定义一个包含种状态,定义一个包含8个数据的一维数组个数据的一维数组void delay(uint k); /void delay(uint k); /子函数声明子函数声明main()main() uchar num; /uchar num; /数组索引号数组索引号while(1)while(1) for(num=0;num8;num+) for(num=0;num8;num+) P1=tablenum;/P1=tablenum;/以以num作为索引号,从数组中取值送给作为索引号,从数组中取值送给P1口口delay(2000); /delay(2000); /延时延时 可用数组实现可用数组实现流水灯流水灯总结总结 本章主要复习了本章主要复习了C语言的基础知识,在复习的同语言的基础知识,在复习的同时逐步引入单片机程序的编写,最后完成单片机的时逐步引入单片机程序的编写,最后完成单片机的入门篇流水灯的编程,达到入门篇流水灯的编程,达到C到单片机的完美过渡。到单片机的完美过渡。
限制150内