资源简介 (共66张PPT)单片机与C语言技术应用第二单元 任务二2.2 查询方式按键控制交通信号灯学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读08学习目标01掌握if-else条件语句的基本用法;掌握判断条件标志位进行逻辑控制;掌握单片机按键检测的基本原理;掌握按键控制相关端口寄存器设置方法;掌握查询方式按键处理的编程方法;掌握按键外部中断寄存器设置方法;掌握外部中断方式按键处理的编程方法。学习目标01能对CC2530单片机按键进行端口设置;能使用查询方法进行按键有效判断和按键处理;能对CC2530单片机外部中断寄存器进行设置;能使用外部中断方法进行按键有效判断和按键处理。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读082.2 查询方式按键控制交通信号灯任务要求与任务分析02任务要求:①黑板通电后,D6红色LED点亮(红灯亮);②按一次SW1按键,D6红色LED熄灭(红灯灭);③再按一次SW1按键, D6红色LED点亮(红灯亮);④按键效果可循环。任务要求与任务分析02任务分析:扫描方式SW1按键输入检测;每次按键操作,D6红色LED由亮变灭或由灭变亮。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读082.2 查询方式按键控制交通信号灯if语句1知识储备03按键的工作原理2345输入端口模式输入端口模式选择寄存器PxINP按键消抖用if语句可以构成选择结构。它根据给定的条件进行判断,以决定执行某个分支程序段。if语句有三种基本形式。(1)基本形式if语句基本形式if语句格式如下:1. if(表达式)2. {3. 语句组;4. }03知识储备if语句执行时,首先判断表达式是否为真(1)或表达式是否成立,若为真(1)或表达式成立则执行大括号内的语句组,执行完后跳出if语句,继续执行之后的内容;若为假(0)或表达式不成立则不执行大括号内的语句组,直接跳出if语句,继续执行之后的内容。03知识储备(2)if…else语句if…else语句格式如下:1. if(表达式)2. {3. 语句组1;4. }5. else6. {7. 语句组2;8. }03知识储备if…else语句执行时,首先判断表达式是否为真(1)或表达式是否成立,若为真(1)或表达式成立则执行语句组1,否则执行语句组2;执行完语句组1或语句组2后跳出if…else语句,继续执行之后的内容。03知识储备(3)if…else if…形式语句if…else if…形式语句格式如下:1. if(表达式1)2. {3. 语句组1;4. }5. else if(表达式2)6. {7. 语句组2;8. }9. ......03知识储备10. else if(表达式n)11. {12. 语句组n;13. }14. else15. {16. 语句组m;17. }03知识储备if…else if…形式语句用于完成对多个表达式进行逐一判断并执行,当前表达式为真(1)或表达式成立时则执行当下表达式对应的语句组,如表达式1对应语句组1、表达式2对应语句组2……表达式n对应语句组n,然后跳出后面的if…else if语句,停止后续表达式判断;当前表达式不满足时,则继续判断下一个表达式,直到最后一个表达式n;03知识储备执行到表达式n时,如果表达式n为真(1)或表达式n成立时,则执行语句组n,结束if…else if语句判断;如果表达式n为假(0)或表达式n不成立时,则执行语句组m之后结束if…else if语句判断,这也说明表达式1~表达式n均为假(0)或均不成立。03知识储备if语句1知识储备03按键的工作原理2345输入端口模式输入端口模式选择寄存器PxINP按键消抖(1)轻触开关轻触开关是利用两个金属弹片吸合、断开实现电路的通路与开路。在进行轻触开关选型,除了关心形状尺寸外,还必须关心轻触开关的额定工作电压、额定工作电流、开关按压力量和使用寿命等参数。轻触开关:03知识储备(2)独立按键电路独立按键电路由按键直接与单片机输入I/O引脚相连所构成。按键SW1的其中一端接P1_2引脚,另外一端接地。CC2530单片机上的P1_2经上拉电阻R6接3.3V电源,当 SW1按键按下时,P1_2引脚与地连接。03知识储备独立按键电路:03知识储备if语句1知识储备03按键的工作原理2345输入端口模式输入端口模式选择寄存器PxINP按键消抖输入端口按其连接的外部电路的不同,可以有以下3种输入模式:(1)上拉:指单片机的引脚通过电阻连接电源,当该引脚外部设备无输入信号时,能够保证该引脚维持在稳定的高电平状态,单片机读取该引脚的电平值将为“1”。03知识储备(2)下拉:指单片机的引脚通过电阻连接地,当该引脚外部设备无输入信号时,能够保证该引脚维持在稳定的低电平状态,单片机读取该引脚的电平值将为“0”。(3)三态:单片机的引脚处于悬空状态,又称为高阻态,当该引脚外部设备无输入信号时,单片机读取该引脚的电平值将不确定,可能为“0”或“1”。03知识储备if语句1知识储备03按键的工作原理2345输入端口模式输入端口模式选择寄存器PxINP按键消抖当I/O引脚设置为输入时,通过设置PxINP寄存器将端口模式配置为上拉、下拉或三态模式。P0INP寄存器:03知识储备位 位名称 复位值 操作 描述7:0 MDP0_[7:0] 0x00 R/W 设置P0_7到P0_0引脚的输入模式。设置为0:上拉/下拉(具体是上拉还是下拉,看P2INP寄存器的PDUP0位)。设置为1:三态。P1INP寄存器:03知识储备位 位名称 复位值 操作 描述7:2 MDP1_[7:2] 0000 00 R/W 设置P1_7到P1_2引脚的输入模式。设置为0:上拉/下拉(具体是上拉还是下拉,看P2INP寄存器的PDUP1位);设置为1:三态。1:0 _ 00 RO 保留P1_0和P1_1引脚作为输入时,默认处于三态模式,不能通过配置P1INP寄存器选择上拉/下拉模式,只能在外部硬件电路增加上拉或下拉电阻实现上拉或下拉模式。03知识储备P2INP输入端口模式寄存器:03知识储备位 位名称 复位值 操作 描述7 PDUP2 0 R/W 设置P2端口所有引脚的上拉或下拉模式设置为0:P2端口被设置为上拉;设置为1:P2端口被设置为下拉。6 PDUP1 0 R/W 设置P1端口所有引脚的上拉或下拉模式设置为0:P1端口被设置为上拉;设置为1:P1端口被设置为下拉。P2INP输入端口模式寄存器:03知识储备位 位名称 复位值 操作 描述5 PDUP0 0 R/W 设置P0端口所有引脚的上拉或下拉模式设置为0:P0端口被设置为上拉;设置为1:P0端口被设置为下拉。4:0 MDP2_[4:0] 0 0000 R/W 设置P2_4到P2_0端口的输入模式设置为0:上拉/下拉(具体是上拉还是下拉,看P2INP寄存器的PDUP2位);设置为1:三态。由于P0INP、P1INP、P2INP寄存器的复位值为0x00,即复位后P0端口的所有输入I/O引脚、P1端口除P1_0和P1_1外的所有输入I/O引脚、P2端口的所有输入I/O引脚均默认为上拉模式。I/O引脚配置思维导图:03知识储备配置代码举例:1. P1SEL &= ~0x1f; //设置P1_0~P1_4引脚为通用I/O引脚2. P1DIR |= 0x1b; //设置P1_0、P1_1、P1_3、P1_4为输出引脚3. P1DIR &= ~0x04; //设置P1_2为输入引脚4. P1INP &= ~0x04; //设置P1_2引脚使用上拉或下拉5. P2INP |= 0x40; //设置P1_2引脚为上拉模式03知识储备P0INP、P1INP、P2INP寄存器的配置只对输入I/O端口有效。03知识储备if语句1知识储备03按键的工作原理2345输入端口模式输入端口模式选择寄存器PxINP按键消抖轻触开关按下或释放时,由于机械弹性作用的影响,通常伴有一定时间的抖动,然后触点才稳定下来。机械式按键的波形:03知识储备抖动时间的长短与按键的机械特性有关,一般为5~10ms。在触点抖动期间,检测按键的通断状态,可能导致判断出错,如:按键一次按下或释放被错误地认为是多次操作。为了克服按键触点机械抖动导致的检测误判,可从硬件和软件两方面分别进行消抖。具体实现方式说明如下:(1)软件消抖:通过采用软件编程的方法来达到消除干扰抖动脉冲波,原理为利用软件延时再次检测的方法进行消抖。检测到第一个电平变化后,通过软件延时一段时间后(软件延时长度要求大于机械抖动时间长度,通常在10~20ms之间),再次检测电平状态,两次相同即判断按键动作有效。03知识储备(2)硬件消抖:通过采用外加电路来消除干扰抖动脉冲波,通常采用电容滤波、单稳延时电路等,最终实现需要稳定一定时间的电平变化,才能触发输出信号。所以,开始抖动部分信号不会被输出。使用软件消抖,不需要修改硬件,也不增加成本,效果相当的同时还更灵活方便,所以工程应用中通常采用软件消抖,也有部分产品同时使用硬件和软件两种方法消抖。03知识储备软件消抖流程图:03知识储备学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读082.2 查询方式按键控制交通信号灯任务实施04序号 设备/资源名称 数量 是否准备到位(√)1 计算机(已安装好IAR软件) 1台 2 NEWLab实训平台 1套 3 CC-Debugger 仿真器 1套 4 黑板 1块 12打开工程编写代码3编译工程4下载代码任务实施04打开本书配套源代码文件夹中的“扫描方式按键控制交通信号灯.ewp”工程。任务实施0412打开工程编写代码3编译工程4下载代码任务实施04● 步骤1:头文件包含04任务实施#include ● 步骤2:I/O引脚宏定义04任务实施本任务中利用D6红色LED的亮灭表示红灯状态。LED连接电路:04任务实施1. #define Led_Red P1_4 //P1_4引脚宏定义2. #define SW1 P1_2 //P1_2引脚宏定义本任务中的I/O引脚宏定义的参考代码:步骤3:编写I/O引脚初始化函数1. void InitIO(void)2. {3. P1SEL &= ~0x14; //设置P1_2和P1_4引脚为通用I/O引脚4. P1DIR |= 0x10; //设置P1_4为输出引脚5. P1DIR &= ~0x04; //设置P1_2为输入引脚6. P1INP &= ~0x04; //设置P1_2引脚使用上拉或下拉7. P2INP |= 0x40; //设置P1_2引脚为上拉模式8. }04任务实施本任务的I/O引脚初始化函数主要完成将P1_2和P1_4引脚设置为通用I/O口,将P1_2引脚设置为输入上拉引脚,将P1_4设置为输出引脚,具体实现代码如下:步骤4:编写延时函数04任务实施1. void Delay(unsigned int n)2. {3. unsigned int i,j;4. for(i=0;i5. {6. for(j=0;j<600;j++);7. }8. }该延时函数的输入参数为n,对应的延时时长为n毫秒。步骤5:编写main主函数04任务实施main函数主要完成I/O初始化,点亮D6红色LED(红灯亮),然后进入无限循环。在循环里不断对按键进行扫描检测,当检测到按键按下时,D6红色LED状态翻转,然后等待按键松开进入下一次按键按下检测。在判断按键按下的过程中,当读到P1_2引脚的电平值为“0”时,先软件延时10ms消抖,然后再次读取P1_2引脚的电平值,电平值仍为“0”表示按键按下有效。当按键按下有效时,将D6红色LED状态翻转,即D6红色LED处于点亮状态,则熄灭D6红色LED;D6红色LED处于熄灭状态,则点亮D6红色LED;然后等待按键松开进入下一次按键按下检测。main函数的实现代码如下:任务实施041. void main(void)2. {3. InitIO();4. Led_Red =1; //点亮D6红色LED5. while(1) //无限主循环6. {7. if(SW1==0) //读取P1_2引脚电平值并判断电平值是否为“0”8. {9. Delay(10); //软件延时消抖10毫秒10. if(SW1==0) //读取P1_2引脚电平值并判断电平值是否为“0”11. {12. Led_Red =~ Led_Red; //D6红色LED状态翻转13. while(SW1==0); //等待按键松开14. }15. }16. }17. }上述代码中,关系运算符“==”的两边都会有一个表达式,比如变量、数值等,用于判断左右两边的表达式是否相等;其运算结果为一个逻辑值,即真(1)或假(0);当左右两边表达式相等时,其运算结果为真(1),反之为假(0)。任务实施04“==”是一个关系运算符,“=”是一个赋值运算符,编程时不要用错。任务实施0412打开工程编写代码3编译工程4下载代码任务实施04对工程进行编译,观察是否提示编译成功。如果出现错误或警告,需要认真检查修改,重新编译链接,直到没有错误和警告为止。任务实施0412打开工程编写代码3编译工程4下载代码任务实施04(1)用CC-Debugger仿真器的下载线连接黑板;(2)完成代码下载;(3)SW1按键松开时,观察D6红色LED状态是否翻转,即亮变灭或灭变亮。任务实施04学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读082.2 查询方式按键控制交通信号灯05任务工单本次任务关键知识引导:1.关系运算符“==”,其功能是判断“==”左右两边的等式是否相等,当左右两边等式相等时,其运算结果为( );当左右两边不相等时,其运算结果为( )。2.C51语言的if(表达式)语句,其中“表达式”的结果只能为( )或( )。3.CC2530单片机I/O输入引脚可设置为( )、( )或( )模式。4.将CC2530单片机I/O输入引脚设置为上拉模式,该引脚悬空时,所读到该引脚的电平值为( )。5.P0INP寄存器的复位值为( ),P1INP寄存器的复位值为( ),P2INP寄存器的复位值为( ),因此P0_0到P0_7引脚默认为( )模式,P1_2到P1_7引脚默认为( )模式,P2_0到P2_4引脚默认为( )模式,其中( )和( )两个引脚默认为输入三态模式,不能通过软件设置为上下拉模式。6.独立按键电路中,按键按下时,所读到按键引脚电平值为( );按键松开时,所读到按键引脚电平值为( )。7.按键消抖的方法包括( )和( )。任务检查与评价05各组选派代表分析本组任务实施经验;01添加标题请参照评价标准完成自评;02完成对其他小组的评价。03互评经验分享自评评价方式 可采用自评、互评、老师评价等方式 说明 主要评价学生在项目学习过程中的操作技能、理论知识、学习态度、课堂表现、学习能力等。 序号 评价内容 评价标准 分值 得分1 知识运用(20%) 掌握相关理论知识,完成本次任务关键知识的作答准确率(20分) 20分2 专业技能(40%) 工程编译通过,SW1按键按下时,D6红色LED状态翻转正常。(40分) 40分工程编译通过,SW1按键按下时,D6红色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延伸阅读082.2 查询方式按键控制交通信号灯任务小结06学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸阅读082.2 查询方式按键控制交通信号灯任务拓展07动动脑当检测到SW1引脚为低电平立刻执行延时函数,共延时多长时间?在这段时间内,CPU只做了什么事情?这么做对CPU的执行效率而言会不会浪费?任务拓展07动动手该任务是在确认按键按下时立刻将D6红色LED状态翻转,而在有些工业应用场合,为了避免干扰引起的误动作,常采用按键松开时才执行动作。请在本任务代码基础上尝试修改,实现按键松开时立刻将D6红色LED状态翻转。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸练习082.2 查询方式按键控制交通信号灯延伸练习08电脑的鼠标有单击和双击操作,其中双击操作要求在规定的时间内连续双击,请在本任务代码基础上,在1秒内检测到SW1按键双击动作时,将D6红色LED的状态翻转。具体实现方案参考如下:(1)检测按键按下时,启动一个计数器并初始化为1,立刻进入for循环语句,在for循环语句里调用延时函数,调整循环次数,使得循环次数乘以延时时长为1秒;(2)在for循环语句里也对按键状态进行检测,如果检测到一次按键松开和再按下动作,计数器加1,当计数器为2时,将D6红色LED的状态翻转,退出for循环语句;(3)当 for循环语句结束或退出for循环语句时,等待SW1按键松开,然后继续往后执行。 展开更多...... 收起↑ 资源预览