资源简介 (共71张PPT)单片机与C语言技术应用第一单元 任务31.3 认识单片机C语言程序结构学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读08学习目标01了解单片机的基本知识(概念、类型、开发环境等);了解软件工程概念;掌握IAR开发环境的安装方法;掌握IAR开发环境工程建立与配置方法;掌握单片机C语言的程序结构;了解单片机仿真器下载和仿真的基础知识和操作方法。学习目标01具有软件工程概念;具有工程思维解决问题的概念;能独立安装IAR开发环境;能够独立新建IAR工程和配置IAR工程;能够使用单片机仿真器下载和仿真。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读081.3 认识单片机C语言程序结构任务要求与任务分析02任务要求:能够掌握最基本的C语言程序结构框架;能够独立完成最简单的C语言程序的编写;能够使用SmarRF Flash Programmer将编译后生成的代码烧写到芯片中。任务要求与任务分析02任务分析:根据给出的完整源代码学习C语言的基本知识;使用SmarRF Flash Programmer将编译后生成的.hex文件烧写到芯片中,实现所需要的功能。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读081.3 认识单片机C语言程序结构预处理数据类型和变量说明12知识储备0334常用运算符while循环语句语句中凡是以“#”开头的均为预处理命令,所谓预处理是指在进行编译之前所作的工作,由预处理程序负责完成。C语言提供了多种预处理功能,如宏定义、文件包含等,介绍如下:(1)宏定义在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏”,被定义为“宏”的标识符称为“宏名”。定义的一般形式为:#define 标识符 字符串知识储备03其中“#”为预处理命令,“define”为宏定义命令,“标识符”为所定义的宏名,“字符串”可以是常数、表达式、格式串等,例如:定义LED1为P1_0,定义之后的源程序中,所有的P1_0都可用LED1代替,简单明了。知识储备03#define LED1 P1_0 //将P1_0引脚宏定义为LED1代码中用LED1代替P1_0将会是代码的可读性增强。(2)文件包含文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。文件包含命令行的一般形式为:#include "文件名",例如:知识储备031. #include 2. #include “ioCC2530.h”文件名用尖括号表示只在IAR配置指定的包含文件目录中去查找,而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到IAR配置指定的包含目录中去查找,在实际的IAR编程中两种符号都可以使用,是等效的。知识储备03单片机简介数据类型和变量说明1234常用运算符while循环语句知识储备03由于C语言广泛地移植到了各种类型的单片机和计算机上,对于8位、16位、32位和64位单片机的C语言中,同样名称的数据类型对应的值域是不同的,同样应用于51单片机中的IAR和Keil,其数据类型的种类也有所不同。知识储备03C51基本数据类型:知识储备03数据类型 长度 值域unsigned char 单字节 0~255Char 单字节 -128~127unsigned int 双字节 0~65535Int 双字节 -32768~32767unsigned long 四字节 0~232-1Long 四字节 -231~231-1Float 四字节 -3.4e38~3.4e38(或-2128~2128)变量说明的一般形式为:类型说明符 变量名标识符, 变量名标识符;例如:在书写变量说明时,应注意最后一个变量名之后必须以小写的“;”结尾,变量说明必须放在变量使用之前,一般放在函数体的开头部分。知识储备031. unsigned int i, n; // i和n为无符号整型变量2. char a, b, c; // a、b和c为有符号字符型变量单片机简介数据类型和变量说明1234常用运算符while循环语句33知识储备03(1)算术运算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++)、自减(--)共七种;(2)关系运算符用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种;(3)逻辑运算符用于逻辑运算。包括与(&&)、或(||)、非(!)三种;知识储备03(4)位操作运算符用于按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种;(5)赋值运算符用于赋值运算。分为简单赋值(=)、复合算术赋值(+=、-=、*=、/=和%=)和复合位运算赋值(&=、|=、^=、>>=和<<=)三类共十一种。知识储备03单片机简介数据类型和变量说明1234常用运算符while循环语句知识储备03while语句的一般形式为:while(表达式) 语句其中表达式是循环条件,语句为循环体。while 语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。在main函数一般都需要有一个死循环,可以把while的表达式的值设为常数1,则结果始终为真,不断执行循环体,在本例中的循环体没有语句,执行空循环,例如:知识储备031. while(1)2. {3. ;4. }for循环语句程序结构5678函数和主函数编码规范知识储备03for语句是C语言所提供的功能更强,使用更广泛的一种循环语句。其一般形式为:for(表达式1;表达式2;表达3) 语句;表达式1:通常用来给循环变量赋初值,一般是赋值表达式;表达式2:通常是循环条件,一般为关系表达式或逻辑表达式;表达式3:通常可用来修改循环变量的值,一般是赋值语句;语句:即为循环体语句。这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成,三个表达式都是可选项,都可以省略,但前面两个表达式后面的“;”符号不能省略。知识储备03for语句首先计算表达式1的值;再计算表达式2的值,若值为真(非0)则执行循环体一次,否则跳出循环;然后再计算表达式3的值,转回计算表达式2的值,反复重复执行,直到表达式2的值为假则退出循环语句。在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。知识储备03例如在延时函数中的for循环语句:首先计算表达式1的i = 0,即将0赋值给i,再计算表达式2的值,判断i<5000是否为真(非0),则执行循环体一次,然后再计算表达式3的i++值,转回计算表达式2的值,判断表达式i<5000的值,直到值为假,即i等于5000时退出循环语句。知识储备031. for(i = 0;i<5000;i++);for循环语句程序结构5678函数和主函数编码规范知识储备03C语言有顺序结构、选择结构和循环结构这三种基本结构,循环结构又分为当型循环和直到型循环。c)当型循环结构a)顺序结构b)选择结构d)直到型循环结构基本程序结构:知识储备03(1)顺序结构顺序结构是最基本、最简单的结构,在这种结构中,程序由低地址到高地址依次按顺序执行。知识储备03(2)选择结构选择结构可使程序根据不同的情况,选择执行不同的分支。在选择结构中,程序先对一个条件进行判断。当条件成立,即条件语句为“真”时,执行一个分支;当条件不成立时,即条件语句为“假”时,执行另一个分支。(3)循环结构在程序处理过程中,有时需要对某一段程序重复执行多次,这时就需要循环结构来实现。知识储备03当型循环结构:当条件P成立(为“真”)时,重复执行语句A,当条件不成立(为“假”)时才停止重复,执行后面的程序,常用语句while和for。直到循环结构:先执行语句A,再判断条件P,当条件成立(为“真”)时,再重复执行语句A,直到条件不成立(为“假”)时才停止重复,执行后面的程序,常用语句do…while。知识储备03for循环语句程序结构5638函数和主函数编码规范37知识储备03C源程序由多个函数组成,函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能,C语言中的函数相当于其它高级语言的子程序。由于采用了函数模块式的结构,C语言易于实现结构化程序设计,使程序的层次结构清晰,便于程序的编写、阅读、调试。在C语言中,所有的函数定义,包括main主函数在内,都是平行的。也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许相互调用,称为嵌套调用;函数还可以自己调用自己,称为递归调用。知识储备03一个简单的函数举例如下,这是一个延时函数,无参、无返回值:main函数是主函数,它可以调用其它函数,而不允许被其它函数调用。C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C源程序必须有,也只能有一个主函数main。知识储备031. void Delay_1s(void) //延时函数2. {3. unsigned int i;4. for(i = 0; i<5000; i++);5. }最简单的主函数main举例如下,在这个例子中,没有执行任何功能,只是空语句的死循环:知识储备031.void main(void)2.{3. while(1)4. {5. ;6. }7.}for循环语句程序结构5678函数和主函数编码规范知识储备03在C语言中不遵守编译器的规定,编译器在编译时就会报错,这个规定叫做规则。但是有一种规定,它是一种人为的、约定成俗的,即使不按照那种规定也不会出错,这种规定就叫做规范。程序的格式追求清晰、美观,是程序风格的重要构成元素。大家刚开始学习C语言的时候,第一步不是说要把程序写正确,而是要写规范。代码规范化的第一个好处就是好看、整齐和舒服。如果用不规范的方式写了几百行的代码,现在能看得懂,但等过了几个月再回头看就很吃力了;第二个好处是,把代码写规范则程序不容易出错,即使出错了,查错也会很方便。知识储备03代码规范化基本上有以下七个原则:(1)空行空行起着分隔程序段落的作用,空行不会浪费内存,但在适当地方加入空行会使程序的布局更加清晰。知识储备03(2)空格关键字之后要留空格,如像if、for等关键字之后应留一个空格再跟左括号(,以突出关键字;函数名之后不要留空格,应紧跟左括号(,与关键字有区别;符号“,”应该向前紧跟,之前不留空格,之后要留空格;赋值运算符、关系运算符、算术运算符、逻辑运算符、位运算符等双目运算符的前后应当加空格,例如=、+=、/=、%=、&=、|=、>、>=、+、-、&、|、&&、||、<<、>>等。单目运算符前后不加空格,例如!、~、++、--、*、&等。(3)成对书写成对的符号一定要成对书写,如()和{}。不要写完左边,然后写内容,最后再补右边,在多层嵌套时很容易漏掉。知识储备03(4)缩进缩进可以使程序更有层次感,推荐用四个空格。原则是:如果地位相等,则不需要缩进;如果属于某一个代码的内部代码就需要缩进。(5)对齐对齐主要是针对大括号{}而言,{和}分别都要独占一行,互为一对的{和}要位于同一列,并且与引用它们的语句左对齐。(6)代码行一行代码只做一件事情,如只定义变量,或只写一条语句。这样的代码容易阅读,并且便于写注释。知识储备03(7)注释注释通常用于重要的代码行或段落提示,虽然注释有助于理解代码,但也不可过多地使用注释。正常应该边写代码边注释,修改代码的同时要修改相应的注释,以保证注释与代码的一致性。一般整个源文件需要注释,通常包括项目或文件名称、创建者和创建时间、版本号以及文件说明等;函数前面也需要注释,通常包括函数名称、函数功能、输入参数和返回值等,见本任务完整代码或本书配套资源。知识储备03学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读081.3 认识单片机C语言程序结构任务实施04● 任务实施前必须先准备好以下设备和资源:序号 设备/资源名称 数量 是否准备到位(√)1 计算机(已安装好IAR软件) 1台 2 NEWLab实训平台 1套 3 CC-Debugger 仿真器 1套 4 黑板 1块 12任务实施04打开工程编写代码3编译工程4下载代码任务2创建的工程位于D盘根目录下的CC2530子目录中,工程名称为IOtest,源文件为source\text.c。在本任务中计划直接修改text.c里面的代码。打开IAR软件,选择菜单File -> Project -> Add Existing Project...。任务实施04Project菜单中选择“打开现有的工程”命令:任务实施04进入D盘的CC2530文件夹,选中IOtest.ewp工程,单击打开。选中IOtest.ewp工程:任务实施0412打开工程编写代码3编译工程4下载代码任务实施04单击左边工作区窗口中的test.c,IAR就自动加载test.c文件并打开,将test.c文件内容在编辑空间显示出来,删除编辑空间中test.c的全部内容,重新输入代码。本任务的完整代码如下:任务实施041. /***********************************************************************2. * Copyright 2021 newland-edu. All rights reserved.3. * @文件名:test.c4. * @创建者:shenwen5. * @创建日期:2022-01-186. * @版本号:1.07. * @文件说明:任务3 认识单片机C语言程序结构的测试代码,点亮Zigbee模块白板P1_0和P1_1外接的LED灯。任务实施048. * @变更历史说明:9. ***********************************************************************/10. #include 11. #define LED1 P1_012. #define LED2 P1_113.14. /***********************************************************************15. * 函数名称:InitIO16. * 函数功能:初始化I/O端口17. * 输入参数:无18. * 返回值:无19. * 创建日期:2022-01-1820. * 版本号:1.021. * 变更历史说明:22. ***********************************************************************/任务实施0423. void InitIO(void)24. {25. P1DIR |= 0x03; //设置P1_0和P1_1设为输出26. }27.28. void main(void) //主函数29. {30. InitIO( ); //初始化LED灯控制IO口31. LED1 = 1; //设置P1_0输出高电平,点亮LED灯32. LED2 = 1; //设置P1_0输出高电平,点亮LED灯33. while(1)34. {35. ;36. }37. }12打开工程编写代码3编译工程4下载代码任务实施04按照任务2的第四步对工程进行编译。如果没有错误,可在以信息栏看到编译成功的信息,如果提示错误,需要认真检查修改,重新编译链接,直到没有错误为止。任务实施0412打开工程编写代码3编译工程4下载代码任务实施04把ZigBee模块白板装入NEWLab实训平台,CC-Debugger仿真器下载线插到插座上:任务实施04仿真器的USB接口连接至电脑,使用SmarRF Flash Programmer软件,按下图的步骤将生成的.hex文件烧写到CC2530中。SmarRF Flash Programmer烧写程序界面:任务实施04确认一下白板上的两个LED是否都点亮,如果发生异常,需要排除软件编写问题,硬件连接或供电问题,直到两个LED灯点亮为止。任务实施04学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读081.3 认识单片机C语言程序结构05任务工单1.C语言中的语句中凡是以( )开头的均为预处理命令。2.文件包含命令的一般形式为:( ) "文件名"。3.变量说明必须放在变量使用之( )。3.算术运算符包括加( )、减( )、乘( )、除( )、求余( )、自增( )、自减( )共七种。4.关系运算符包括大于( )、小于( )、等于( )、大于等于( )、小于等于( )和不等于( )六种。5.C语言有( )、( )和( )这三种基本结构。6. 一个C源程序必须有,也只能有一个( )函数。本次任务关键知识引导任务检查与评价05各组选派代表分析本组任务实施经验;01添加标题请参照评价标准完成自评;02完成对其他小组的评价。03互评经验分享自评评价方式 可采用自评、互评、老师评价等方式 说明 主要评价学生在项目学习过程中的操作技能、理论知识、学习态度、课堂表现、学习能力等。 序号 评价内容 评价标准 分值 得分1 知识运用(20%) 掌握相关理论知识,完成本次任务关键知识的作答准确率(20分) 20分2 专业技能(40%) 工程编译通过,LED的指示功能正常。(40分) 40分工程编译通过,LED的指示功能异常。(30分)完成代码的输入,工程没有编译通过。(15分)建立工程错误,或者部分输入代码。(5分)3 核心素养(20%) 具有良好的自主学习、分析解决问题、帮助他人的能力、整个任务过程中有指导他人并解决他人问题(20分) 20分具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)具有主动学习并收集信息的能力,遇到问题有请教他人并得以解决(10分)不主动学习(0分)4 职业素养(20%) 实验完成后,设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分) 20分实验完成后,设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读081.3 认识单片机C语言程序结构任务小结06学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读081.3 认识单片机C语言程序结构任务拓展07动动脑1.C语言程序可分为顺序、分支和循环三种结构,在本任务的代码中找出这三种结构的代码。任务拓展07动动脑2.本任务代码开头使用宏定义的LED1和LED2代替P1_0和P1_1,在后面的主函数中直接使用LED1和LED2。如果在主函数中不使用LED1和LED2,而是继续使用P1_0和P1_1来操作LED,即主函数的相关代码改为如下:以上修改后的代码能否编译成功?LED能否正常点亮?1. #define LED1 P1_02. #define LED2 P1_13. P1_0= 1; //设置P1_0输出高电平,点亮LED灯4. P1_1= 1; //设置P1_1输出高电平,点亮LED灯任务拓展07动动手本任务为点亮两个LED,如果改为只点亮P1_0外接的LED1,而P1_1外接的LED2不点亮,应该如何修改代码?重新编译之后,将生成的代码烧写到白板上测试一下。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸练习081.3 认识单片机C语言程序结构延伸练习081.发光二极管的原理发光二极管(LED)是一种由磷化镓(GaP)等半导体材料制成的,能直接将电能转变成光能的发光显示器件。当其内部有一定电流通过时,它就会发光。发光二极管也与普通二极管一样由PN结构成,也具有单向导电性。它广泛应用于各种电子电路、家电、仪表等设备中,作为电源指示灯或电平指示灯。大功率的发光二极管也可以作为照明,甚至可以用于汽车的车灯。延伸练习082.发光二极管的分类(1)按其使用材料可分为磷化镓(GaP)发光二极管、磷砷化镓(GaAsP)发光二极管、砷化镓(GaAs)发光二极管、磷铟砷化镓(GaAsInP)发光二极管和砷铝化镓(GaAlAs)发光二极管等多种。(2)按其封装结构及封装形式除可分为金属封装、陶瓷封装、塑料封装、树脂封装和无引线表面封装外,还可分为加色散射封装(D)、无色散射封装(W)、有色透明封装(C)和无色透明封装(T)。延伸练习08(3)按发光二极管按发光颜色分,可分成红色(red)、橙色(orange)、黄色(yellow)、黄绿色(green yellow)、绿色(green)、蓝绿色(blue green)、蓝色(blue)、紫色(pink)、紫外线(uv)、白色(white)、红外线等;另外,有的LED发光二极管中包含两种或多种颜色。(4)按发光强度分有普通亮度LED、高亮度LED和超高亮度LED。(5)按外形和封装分为圆形、方形、矩形、三角形和SMD贴片等多种。延伸练习08LED常见封装: 展开更多...... 收起↑ 资源预览