5.2 手动模式使用SW1按键控制交通信号灯 课件(共51张PPT)-《单片机技术与C语言基础 》同步教学(电子工业版)

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

5.2 手动模式使用SW1按键控制交通信号灯 课件(共51张PPT)-《单片机技术与C语言基础 》同步教学(电子工业版)

资源简介

(共51张PPT)
单片机与C语言技术应用
第五单元 任务2
5.2 手动模式使用SW1按键控制交通信号灯
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
学习目标
01
掌握交通信号灯在各种工作模式下的运行过程;
掌握根据任务需求查阅C语言相关知识点;
掌握根据任务要求查阅CC2530中文技术手册的相关知识要点;
掌握对任务进行分解并设计软件流程;
掌握C语言的预处理、数据类型、常用运算符、控制语句、程序结构相关知识点;
掌握I/O口输入检测、I/O口输出控制、定时器1计数、串口0通信。
学习目标
01
能根据任务需求对任务进行分解并设计软件流程图;
能根据任务需求查阅CC2530中文技术手册的相关知识要点;
能利用C语言知识要点结合软件流程图编写代码;
能对I/O口输入检测、I/O口输出控制、定时器1计数、串口0通信进行整合设计智能交通信号灯。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.2 手动模式使用SW1按键控制交通信号灯
任务要求与任务分析
02
● 任务要求:
①黑板通电后,D4红色LED熄灭(模式指示灯灭),表示当前为手动模式,D5绿色LED点亮(绿灯亮),D3和D6熄灭;
②SW1按键按下时,交通信号灯的状态发生变化;
任务要求与任务分析
02
● 任务要求:
③按键按下前,D5绿色LED点亮(绿灯亮),则按下后,D3绿色LED点亮(黄灯亮),D5和D6熄灭; 按键按下前,D3绿色LED点亮(黄灯亮),则按下后,D6红色LED点亮(红灯亮),D3和D5熄灭; 按键按下前,D6红色LED点亮(红灯亮),则按下后,D5绿色LED点亮(绿灯亮),D3和D5熄灭。
④按键操作效果可循环。
任务要求与任务分析
02
● 任务分析:
扫描方式SW1按键检测;
定义一个字节型全局变量用于描述当前的交通灯信号灯状态。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.2 手动模式使用SW1按键控制交通信号灯
交通信号灯手动模式下的运行过程
1
知识储备
03
03
知识储备
手动模式下,外部按键动作时,交通信号灯状态发生变化,并且按照“绿灯亮->黄灯亮->红灯亮->绿灯亮->……”的顺序进行切换。
交通信号灯状态维持时间取决于外部按键动作,外部按键空闲时,交通信号灯状态将一直保持。
外部按键按下时,如果原来的交通信号灯状态为绿灯亮,那么新的交通信号灯状态为黄灯亮;
如果原来的交通信号灯状态为黄灯亮,那么新的交通信号灯状态为红灯亮;
如果原来的交通信号灯状态为红灯亮,那么新的交通信号灯状态为绿灯亮。
03
知识储备
本任务定义一个字节型全局变量Led_State表示交通信号灯状态,当Led_State为0x00时,表示目前交通信号灯状态为绿灯亮;
当Led_State为0x01时,表示目前交通信号灯状态为黄灯亮;
当Led_State为0x02时,表示目前交通信号灯状态为红灯亮;
当Led_State为其它值时,则无任何意义。
03
知识储备
本任务中关于交通信号灯状态全局变量的配置代码如下:
1.#define Green_State 0x00 //绿灯亮状态
2.#define Yellow_State 0x01 //黄灯亮状态
3.#define Red_State 0x02 //红灯亮状态
4.unsigned char Led_State =Green_State; //初始化默认为绿灯亮状态
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.2 手动模式使用SW1按键控制交通信号灯
任务实施
04
● 任务实施前必须先准备好以下设备和资源:
序号 设备/资源名称 数量 是否准备到位(√)
1 计算机(已安装好IAR软件) 1台
2 NEWLab实训平台 1套
3 CC-Debugger 仿真器 1套
4 黑板 1块
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
仿真调试
●打开本书配套源代码文件夹中的“手动模式使用SW1按键控制交通信号灯.ewp”工程。
04
任务实施
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
仿真调试
● 步骤1:头文件包含
04
任务实施
#include
● 步骤2:I/O引脚宏定义
04
任务实施
1.#define Led_Red P1_4 //P1_4引脚宏定义
2.#define Led_Green P1_3 //P1_3引脚宏定义
3.#define Led_Yellow P1_0 //P1_0引脚宏定义
4.#define Led_Mode P1_1 //P1_1引脚宏定义
5.#define SW1 P1_2 //P1_2引脚宏定义
6.#define SW2 P0_1 //P0_1引脚宏定义
7.
8.#define Manual_Mode 0x00 //手动模式
9.#define Auto_Mode 0x01 //自动模式
10.#define Remote_Mode 0x02 //远程模式
11.#define Green_State 0x00 //绿灯亮状态
12.#define Yellow_State 0x01 //黄灯亮状态
13.#define Red_State 0x02 //红灯亮状态
步骤3:全局变量定义及初始化
1.unsigned char Work_Mode=Manual_Mode; //工作模式,初始化默认为手动模式
2.unsigned char Led_State =Green_State; //初始化默认为绿灯点亮状态
unsigned int Mode_Led_Timer=0x00; //模式指示灯计数器,单位为1ms
04
任务实施
main主函数执行之前,全局变量将被定义并初始化。黑板上电后,工作模式默认为手动模式,交通信号灯状态为绿灯点亮。
步骤4:编写I/O口初始化函数
04
任务实施
1.void InitIO(void)
2.{
3. P1SEL &=0xE4; //设置P1_0、P1_1、P1_3、P1_4为通用I/O引脚
4. P1DIR |=0x1B; //设置P1_0、P1_1、P1_3、P1_4为输出引脚
5. P1SEL &=0xFB; //设置P1_2为通用I/O引脚
6. P1DIR &=0xFB; //设置P1_2为输入引脚
7. P0SEL&=0xFD; //设置P0_1为通用I/O口引脚
8. P0DIR&=0xFD; //设置P0_1为输入引脚
04
任务实施
9. //输入默认上拉
10. Led_Red=0; //关闭红灯
11. Led_Green=1; //开启绿灯
12. Led_Yellow=0; //关闭黄灯
13. Led_Mode=0; //模式指示灯关闭,表示上电初始状态处于手动模式
14.}
完成I/O口的输入/输出与上下拉配置,绿灯点亮,模式指示灯关闭。
步骤5:编写定时器1初始化函数
04
任务实施
步骤6:编写延时函数
已在本单元任务1完成。
已在本单元任务1完成。
步骤7:编写SW1按键检测函数
04
任务实施
1.void SW1_Key_Scan(void)
2.{
3. if(SW1==0) //判断SW1按键是否被按下
4. {
5. Delay(10); //延时10ms去抖
6. if(SW1==0) //判断SW1按键是否仍按下
7. {
8. if(Work_Mode==Manual_Mode) //判断当前模式为手动模式
9. {
步骤7:编写SW1按键检测函数
04
任务实施
10. switch(Led_State) //手动模式下判断交通灯状态
11. {
12. case Green_State:
13. Led_Green=0; //绿灯灭
14. Led_Yellow=1; //黄灯亮
15. Led_Red=0; //红灯灭
16. Led_State=Yellow_State; //黄灯状态
17. break;
18. case Yellow_State:
步骤7:编写SW1按键检测函数
04
任务实施
19. Led_Green=0; //绿灯灭
20. Led_Yellow=0; //黄灯灭
21. Led_Red=1; //红灯亮
22. Led_State=Red_State; //红灯状态
23. break;
24. case Red_State:
25. Led_Green=1; //绿灯亮
26. Led_Yellow=0; //黄灯灭
27. Led_Red=0; //红灯灭
28. Led_State=Green_State; //绿灯状态
步骤7:编写SW1按键检测函数
04
任务实施
29. break;
30. default:
31. break;
32. }
33. }
34. while(SW1==0); //等待SW1按键松开
35. }
36. }
37.}
04
任务实施
检测SW1按键状态,软件延时消抖;当检测SW1按键按下时,切换交通信号灯状态,然后等待SW1按键松开继续往下执行
04
任务实施
SW1按键检测任务:
步骤8:编写SW2按键检测函数
04
任务实施
已在本单元任务1完成。
步骤9:编写定时器1中断服务函数
已在本单元任务1完成。
步骤10:编写main主函数
04
任务实施
1.void main(void)
2.{
3. InitIO(); //I/O口初始化
4. Init_Timer1(); //定时器初始化
5. InitUart(); //串口初始化
6. EA=1; //使能总中断
7. while(1)
04
任务实施
8. {
9. SW1_Key_Scan(); //SW1按键扫描任务
10. SW2_Key_Scan(); //SW2按键扫描任务
11. }
12.}
04
任务实施
main主函数完成I/O口初始化、定时器1初始化以及总中断使能,然后不断循环执行SW1按键检测任务和SW2按键检测任务
04
任务实施
main主函数:
04
任务实施
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
仿真调试
对工程进行编译,观察是否提示编译成功。如果出现错误或警告,需要认真检查修改,重新编译链接,直到没有错误和警告为止。
04
任务实施
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
下载代码
(1)用CC-Debugger仿真器的下载线连接黑板;
(2)完成代码下载;
(3)黑板上电,D4红色LED熄灭,D5绿色LED点亮,表示上电初始化为手动模式且交通信号灯状态为绿灯点亮;手动操作SW1按键,交通信号灯状态按照“D5亮D3亮D6亮D5亮……”的顺序进行切换。
04
任务实施
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.2 手动模式使用SW1按键控制交通信号灯
05
任务工单
本次任务关键知识引导:
1.C语言中的整数可以使用( )进制、( )进制、八进制和( )进制表示。
2.CC2530输出电流为20mA的端口为( )、( )。
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.按键消抖的方法包括( )和( )。
8.将P1_2引脚配置为输入上拉模式,需要对( )、( )、( )、( )四个寄存器进行配置。
任务工单
05
各组选派代表分析本组任务实施经验;
01
添加标题
请参照评价标准完成自评;
02
完成对其他小组的评价。
03
互评
经验分享
自评
评价方式 可采用自评、互评、老师评价等方式 说明 主要评价学生在项目学习过程中的操作技能、理论知识、学习态度、课堂表现、学习能力等。 序号 评价内容 评价标准 分值 得分
1 知识运用(20%) 掌握相关理论知识,完成本次任务关键知识的作答准确率(20分) 20分
2 专业技能(40%) 工程编译通过,SW1按键动作,交通信号灯状态切换正常。(40分) 40分
工程编译通过,SW1按键动作,交通信号灯状态切换异常。(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
5.2 手动模式使用SW1按键控制交通信号灯
任务小结
06
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸练习
08
5.2 手动模式使用SW1按键控制交通信号灯
任务拓展
07
动动脑
请思考下为什么要定义字节全局变量Led_State记录交通信号灯状态?
任务拓展
07
动动手
请将SW1按键检测任务里的switch语句改成if语句实现,保持现有功能不变。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸练习
08
5.2 手动模式使用SW1按键控制交通信号灯
延伸练习
08
本任务在SW1和SW2按键检测任务里均采用while判断语句,当SW2按键按下未松开或卡键时,SW1按键检测任务将不会被执行;同理当SW1按键按下未松开或卡键时,SW2按键检测任务也将不会被执行。
延伸练习
08
针对以上存在问题,可以采用状态机的方式,也就是把每个任务分解成多个状态,至上而下执行,连续执行动作放在一个状态中,而把需要等待判断的动作独立在一个状态中。主函数的while(1)循环里,每次循环进入等待判断状态,当条件满足,退出等待判断状态,进入的任务的下一状态;如果条件不满足,退出任务,下一次循环再次进入等待判断状态执行。采用这种状态机的方式,可以有效地避免某个条件不满足导致主循环中的其他任务不被执行或相对较长时间不被执行。

展开更多......

收起↑

资源预览