5.3 自动模式使用定时器1在模模式下控制交通信号灯 课件(共45张PPT)-《单片机技术与C语言基础 》同步教学(电子工业版)

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

5.3 自动模式使用定时器1在模模式下控制交通信号灯 课件(共45张PPT)-《单片机技术与C语言基础 》同步教学(电子工业版)

资源简介

(共45张PPT)
单片机与C语言技术应用
第五单元 任务3
5.3 自动模式使用定时器1在模模式下控制交通信号灯
学习目标
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.3 自动模式使用定时器1在模模式下控制交通信号灯
任务要求与任务分析
02
● 任务要求:
①黑板通电后,D4红色LED熄灭(模式指示灯灭),D5绿色LED点亮(绿灯亮),D3和D6熄灭操作,表示初始化状态为手动模式和绿灯点亮;
②操作SW2按键,D4红色LED点亮为自动模式,交通信号灯按照“绿灯亮5秒黄灯亮1秒红灯亮5秒绿灯亮5秒……”的顺序自动定时循环交替开关,其中D5、D3、D6分别表示绿灯、黄灯、红灯。
任务要求与任务分析
02
● 任务分析:
定时器1工作在模模式下定时输出控制;
定义交通信号灯计数器对定时中断进行计数,根据计数器的值计算时长并控制交通信号灯。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.3 自动模式使用定时器1在模模式下控制交通信号灯
交通信号灯自动模式下的运行过程
1
知识储备
03
知识储备
03
大部分情况下,交通信号灯工作在自动模式下,按照“绿灯亮->黄灯亮->红灯亮->绿灯亮->……”的顺序自动定时循环交替开关。
每种交通信号灯点亮的时长不一样,一般是根据路口的交通状况进行调整。
因此,在自动模式下,需要定义一交通信号灯计数器对定时中断进行计数,根据计数器的值控制交通信号灯的自动定时循环交替开关。
知识储备
03
本任务定时器1的中断周期为1ms,定义一个字型全局变量Led_Timer,初始化为0,定时器1每中断一次,Led_Timer加1。
当Led_Timer的值等于5000时,黄灯点亮,绿灯和红灯熄灭;
当Led_Timer的值等于6000时,红灯点亮,绿灯和黄灯熄灭;
当Led_Timer的值等于11000时,绿灯点亮,黄灯和红灯熄灭,同时将Led_Timer赋值为0,进入下一轮定时器1中断计数。
知识储备
03
本任务中关于字型全局变量Led_Timer以及交通信号灯点亮时长宏定义的配置代码如下:
1.1.#define Green_Time 5000 //绿灯点亮时长
2.#define Yellow_Time 1000 //黄灯点亮时长
3.#define Red_Time 5000 //红灯点亮时长
4.unsigned int Led_Timer=0; //交通灯计数器
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.3 自动模式使用定时器1在模模式下控制交通信号灯
任务实施
04
● 任务实施前必须先准备好以下设备和资源:
序号 设备/资源名称 数量 是否准备到位(√)
1 计算机(已安装好IAR软件) 1台
2 NEWLab实训平台 1套
3 CC-Debugger 仿真器 1套
4 黑板 1块
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
仿真调试
●打开本书配套源代码文件夹中的“自动模式使用定时器1在模模式下控制交通信号灯.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 //红灯亮状态
14.#define Green_Time 5000 //绿灯点亮时长
15.#define Yellow_Time 1000 //黄灯点亮时长
16.#define Red_Time 5000 //红灯点亮时长
步骤3:全局变量定义及初始化
1.unsigned char Work_Mode=Manual_Mode; //工作模式,初始化默认为手动模式
2.unsigned char Led_State =Green_State; //初始化默认为绿灯点亮状态
3.unsigned int Mode_Led_Timer=0x00; //模式指示灯计数器,单位为1ms
4.unsigned int Led_Timer=0; //交通灯计数器,单位为1ms
04
任务实施
main主函数执行之前,全局变量将被定义并初始化。黑板上电后,工作模式为手动模式,交通信号灯状态为绿灯点亮状态。
04
任务实施
步骤4:编写I/O口初始化函数
已在本单元任务2完成
步骤5:编写定时器1初始化函数
已在本单元任务1完成。
步骤6:编写延时函数
已在本单元任务1完成。
04
任务实施
步骤7:编写SW1按键检测函数
已在本单元任务2完成。
步骤8:编写SW2按键检测函数
已在本单元任务1完成。
步骤9:编写定时器1中断服务函数
04
任务实施
1.#pragma vector=T1_VECTOR //定时器1中断向量指定
2.__interrupt void Timer1_ISR(void)
3.{
4. Led_Timer++; //交通灯计数器加1
5. Mode_Led_Timer++; //模式指示灯计数器加1
6. switch(Work_Mode) //判断工作模式
7. {
8. case Auto_Mode: //自动模式
9. switch(Led_Timer) //交通灯计数器
04
任务实施
10. {
11. case Green_Time: //绿灯点亮5秒到
12. Led_Green=0; //绿灯灭
13. Led_Yellow=1; //黄灯亮
14. Led_Red=0; //红灯灭
15. Led_State=Yellow_State; //黄灯状态
16. break;
17. case (Green_Time+Yellow_Time): //黄灯点亮1秒到
18. Led_Green=0; //绿灯灭
19. Led_Yellow=0; //黄灯灭
20. Led_Red=1; //红灯亮
21. Led_State=Red_State; //红灯状态
04
任务实施
22. break;
23. case (Green_Time+Yellow_Time+Red_Time): //红灯点亮5秒到
24. Led_Green=1; //绿灯亮
25. Led_Yellow=0; //黄灯灭
26. Led_Red=0; //红灯灭
27. Led_Timer=0; //交通灯计数器清0
28. Led_State=Green_State; //绿灯状态
29. break;
30. default:
31. break;
32. }
04
任务实施
33. break;
34. case Remote_Mode:
35. if(Mode_Led_Timer==500)
36. {
37. Mode_Led_Timer=0; //模式指示灯计数器清0
38. Led_Mode=~Led_Mode; //模式指示灯状态翻转,亮0.5秒灭0.5秒
39. }
40. break;
41. default:
42. break;
43. }
44.}
04
任务实施
定时器1中断周期为1ms,分别将交通信号灯计数器和模式指示灯计数器加1;
自动模式时,根据交通信号灯计数器的值控制交通信号灯的状态;
远程模式时,根据模式指示灯计数器的值翻转模式指示灯状态,实现模式指示灯闪烁。
04
任务实施
定时器1中断处理任务:
步骤10:编写main主函数
已在本单元任务2完成。
04
任务实施
04
任务实施
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
仿真调试
对工程进行编译,观察是否提示编译成功。如果出现错误或警告,需要认真检查修改,重新编译链接,直到没有错误和警告为止。
04
任务实施
1
2
任务实施
04
打开工程
编写代码
3
编译工程
4
下载代码
(1)用CC-Debugger仿真器的下载线连接黑板;
(2)完成代码下载;
(3)黑板上电,D4红色LED熄灭,表示当前为手动模式;手动操作SW2按键直到D4红色LED闪烁,表示当前为自动模式;交通信号灯状态将按照“D5亮5秒D3亮1秒D6亮5秒D5亮5秒……”顺序进行自动定时交替开关。
04
任务实施
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸阅读
08
5.3 自动模式使用定时器1在模模式下控制交通信号灯
05
任务工单
本次任务关键知识引导:
1.停止当前工作,转而去做其他工作,做完后又返回原来暂停处继续执行的现象称为( )。
2.单片机正在执行主程序时,突然出现中断请求,需要停止当前正在执行的程序,转而去执行( ),行业内把暂停的位置叫做( )。
3.要让单片机的CPU暂停当下的程序转而去执行中断服务,需要向CPU发出( ),能发出中断请求、引起中断的装置或事件称为( )。
4.“ioCC2530.h”文件中定义了( ),用来指定中断服务程序的入口地址。
5.EA置( )后,全部中断都停止响应。
6.( )循环是一种执行指定次数的循环结构,包含四个部分:( )、( )、( )、( )。
7.位运算符( )对操作数按二进制位进行取反运算。
8.( )语句允许测试一个变量等于多个值时的情况,只有遇到( )语句才会退出。
9.在所有函数外部定义的变量称为( ),在整个程序中有效。( )是在函数内部定义的变量,仅在函数内有效。
任务工单
05
各组选派代表分析本组任务实施经验;
01
添加标题
请参照评价标准完成自评;
02
完成对其他小组的评价。
03
互评
经验分享
自评
评价方式 可采用自评、互评、老师评价等方式 说明 主要评价学生在项目学习过程中的操作技能、理论知识、学习态度、课堂表现、学习能力等。 序号 评价内容 评价标准 分值 得分
1 知识运用(20%) 掌握相关理论知识,完成本次任务关键知识的作答准确率(20分) 20分
2 专业技能(40%) 工程编译通过,选择自动模式,交通信号灯自动定时交替开关正常。(40分) 40分
工程编译通过,选择自动模式,交通信号灯自动定时交替开关异常。(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.3 自动模式使用定时器1在模模式下控制交通信号灯
任务小结
06
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸练习
08
5.3 自动模式使用定时器1在模模式下控制交通信号灯
任务拓展
07
动动脑
交通信号灯点亮时长对应的数值采用宏定义的方式有何优点?
任务拓展
07
动动手
请在本任务的基础上进行修改,将绿灯点亮时长改为15秒,红灯点亮时长改为10秒,黄灯亮的时长仍为1秒。
学习目标
01
知识储备
03
任务工单
05
任务要求与任务分析
02
任务实施
04
任务小结
06
知识与技能提升
07
延伸练习
08
5.3 自动模式使用定时器1在模模式下控制交通信号灯
延伸练习
08
本任务定时器1的中断周期为1毫秒,绿灯点亮时长对应的计数器数值定义为5000,也就是5000次定时器1中断的时间累加刚好为5秒。在实际编程中,5000这个数值对应5秒时长不够直观,往往是把绿灯点亮时长对应的计数器数值定义为5,那么需要在原有代码基础上如何修改呢?
延伸练习
08
针对以上问题,需要在定时器1中断的基础上构建1秒的定时器,然后在这个1秒定时器上进行计数。可以定义一字型全局变量计数器,将此变量初始化为0,定时器1每中断一次,该变量加1。当该变量的值累加到1000时,刚好完成1秒的定时计数,这时LED灯计数器加1,同时将此变量赋值为0,又进行下一次循环计数。

展开更多......

收起↑

资源预览