2.2查询方式按键控制交通信号灯 课件(共66张PPT)-《单片机技术与C语言基础 》同步教学(电子工业版)

资源下载
  1. 二一教育资源

2.2查询方式按键控制交通信号灯 课件(共66张PPT)-《单片机技术与C语言基础 》同步教学(电子工业版)

资源简介

(共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
延伸阅读
08
2.2 查询方式按键控制交通信号灯
任务要求与任务分析
02
任务要求:
①黑板通电后,D6红色LED点亮(红灯亮);
②按一次SW1按键,D6红色LED熄灭(红灯灭);
③再按一次SW1按键, D6红色LED点亮(红灯亮);
④按键效果可循环。
任务要求与任务分析
02
任务分析:
扫描方式SW1按键输入检测;
每次按键操作,D6红色LED由亮变灭或由灭变亮。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
2.2 查询方式按键控制交通信号灯
if语句
1
知识储备
03
按键的工作原理
2
3
4
5
输入端口模式
输入端口模式选择寄存器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. else
6. {
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. else
15. {
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
按键的工作原理
2
3
4
5
输入端口模式
输入端口模式选择寄存器PxINP
按键消抖
(1)轻触开关
轻触开关是利用两个金属弹片吸合、断开实现电路的通路与开路。
在进行轻触开关选型,除了关心形状尺寸外,还必须关心轻触开关的额定工作电压、额定工作电流、开关按压力量和使用寿命等参数。
轻触开关:
03
知识储备
(2)独立按键电路
独立按键电路由按键直接与单片机输入I/O引脚相连所构成。
按键SW1的其中一端接P1_2引脚,另外一端接地。
CC2530单片机上的P1_2经上拉电阻R6接3.3V电源,当 SW1按键按下时,P1_2引脚与地连接。
03
知识储备
独立按键电路:
03
知识储备
if语句
1
知识储备
03
按键的工作原理
2
3
4
5
输入端口模式
输入端口模式选择寄存器PxINP
按键消抖
输入端口按其连接的外部电路的不同,可以有以下3种输入模式:
(1)上拉:指单片机的引脚通过电阻连接电源,当该引脚外部设备无输入信号时,能够保证该引脚维持在稳定的高电平状态,单片机读取该引脚的电平值将为“1”。
03
知识储备
(2)下拉:指单片机的引脚通过电阻连接地,当该引脚外部设备无输入信号时,能够保证该引脚维持在稳定的低电平状态,单片机读取该引脚的电平值将为“0”。
(3)三态:单片机的引脚处于悬空状态,又称为高阻态,当该引脚外部设备无输入信号时,单片机读取该引脚的电平值将不确定,可能为“0”或“1”。
03
知识储备
if语句
1
知识储备
03
按键的工作原理
2
3
4
5
输入端口模式
输入端口模式选择寄存器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
按键的工作原理
2
3
4
5
输入端口模式
输入端口模式选择寄存器PxINP
按键消抖
轻触开关按下或释放时,由于机械弹性作用的影响,通常伴有一定时间的抖动,然后触点才稳定下来。
机械式按键的波形:
03
知识储备
抖动时间的长短与按键的机械特性有关,一般为5~10ms。在触点抖动期间,检测按键的通断状态,可能导致判断出错,如:按键一次按下或释放被错误地认为是多次操作。
为了克服按键触点机械抖动导致的检测误判,可从硬件和软件两方面分别进行消抖。具体实现方式说明如下:
(1)软件消抖:通过采用软件编程的方法来达到消除干扰抖动脉冲波,原理为利用软件延时再次检测的方法进行消抖。检测到第一个电平变化后,通过软件延时一段时间后(软件延时长度要求大于机械抖动时间长度,通常在10~20ms之间),再次检测电平状态,两次相同即判断按键动作有效。
03
知识储备
(2)硬件消抖:通过采用外加电路来消除干扰抖动脉冲波,通常采用电容滤波、单稳延时电路等,最终实现需要稳定一定时间的电平变化,才能触发输出信号。所以,开始抖动部分信号不会被输出。
使用软件消抖,不需要修改硬件,也不增加成本,效果相当的同时还更灵活方便,所以工程应用中通常采用软件消抖,也有部分产品同时使用硬件和软件两种方法消抖。
03
知识储备
软件消抖流程图:
03
知识储备
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
2.2 查询方式按键控制交通信号灯
任务实施
04
序号 设备/资源名称 数量 是否准备到位(√)
1 计算机(已安装好IAR软件) 1台
2 NEWLab实训平台 1套
3 CC-Debugger 仿真器 1套
4 黑板 1块
1
2
打开工程
编写代码
3
编译工程
4
下载代码
任务实施
04
打开本书配套源代码文件夹中的“扫描方式按键控制交通信号灯.ewp”工程。
任务实施
04
1
2
打开工程
编写代码
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函数的实现代码如下:
任务实施
04
1. void main(void)
2. {
3. InitIO();
4. Led_Red =1; //点亮D6红色LED
5. 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
“==”是一个关系运算符,“=”是一个赋值运算符,编程时不要用错。
任务实施
04
1
2
打开工程
编写代码
3
编译工程
4
下载代码
任务实施
04
对工程进行编译,观察是否提示编译成功。如果出现错误或警告,需要认真检查修改,重新编译链接,直到没有错误和警告为止。
任务实施
04
1
2
打开工程
编写代码
3
编译工程
4
下载代码
任务实施
04
(1)用CC-Debugger仿真器的下载线连接黑板;
(2)完成代码下载;
(3)SW1按键松开时,观察D6红色LED状态是否翻转,即亮变灭或灭变亮。
任务实施
04
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
2.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
延伸阅读
08
2.2 查询方式按键控制交通信号灯
任务小结
06
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
2.2 查询方式按键控制交通信号灯
任务拓展
07
动动脑
当检测到SW1引脚为低电平立刻执行延时函数,共延时多长时间?在这段时间内,CPU只做了什么事情?这么做对CPU的执行效率而言会不会浪费?
任务拓展
07
动动手
该任务是在确认按键按下时立刻将D6红色LED状态翻转,而在有些工业应用场合,为了避免干扰引起的误动作,常采用按键松开时才执行动作。请在本任务代码基础上尝试修改,实现按键松开时立刻将D6红色LED状态翻转。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸练习
08
2.2 查询方式按键控制交通信号灯
延伸练习
08
电脑的鼠标有单击和双击操作,其中双击操作要求在规定的时间内连续双击,请在本任务代码基础上,在1秒内检测到SW1按键双击动作时,将D6红色LED的状态翻转。
具体实现方案参考如下:
(1)检测按键按下时,启动一个计数器并初始化为1,立刻进入for循环语句,在for循环语句里调用延时函数,调整循环次数,使得循环次数乘以延时时长为1秒;
(2)在for循环语句里也对按键状态进行检测,如果检测到一次按键松开和再按下动作,计数器加1,当计数器为2时,将D6红色LED的状态翻转,退出for循环语句;
(3)当 for循环语句结束或退出for循环语句时,等待SW1按键松开,然后继续往后执行。

展开更多......

收起↑

资源预览