资源简介 (共45张PPT)单片机与C语言技术应用第五单元 任务35.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延伸阅读085.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延伸阅读085.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延伸阅读085.3 自动模式使用定时器1在模模式下控制交通信号灯任务实施04● 任务实施前必须先准备好以下设备和资源:序号 设备/资源名称 数量 是否准备到位(√)1 计算机(已安装好IAR软件) 1台 2 NEWLab实训平台 1套 3 CC-Debugger 仿真器 1套 4 黑板 1块 12任务实施04打开工程编写代码3编译工程4仿真调试●打开本书配套源代码文件夹中的“自动模式使用定时器1在模模式下控制交通信号灯.ewp”工程。04任务实施12任务实施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; //模式指示灯计数器,单位为1ms4.unsigned int Led_Timer=0; //交通灯计数器,单位为1ms04任务实施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++; //交通灯计数器加15. Mode_Led_Timer++; //模式指示灯计数器加16. 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; //交通灯计数器清028. 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; //模式指示灯计数器清038. 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任务实施12任务实施04打开工程编写代码3编译工程4仿真调试对工程进行编译,观察是否提示编译成功。如果出现错误或警告,需要认真检查修改,重新编译链接,直到没有错误和警告为止。04任务实施12任务实施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延伸阅读085.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延伸阅读085.3 自动模式使用定时器1在模模式下控制交通信号灯任务小结06学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸练习085.3 自动模式使用定时器1在模模式下控制交通信号灯任务拓展07动动脑交通信号灯点亮时长对应的数值采用宏定义的方式有何优点?任务拓展07动动手请在本任务的基础上进行修改,将绿灯点亮时长改为15秒,红灯点亮时长改为10秒,黄灯亮的时长仍为1秒。学习目标01知识储备03任务工单05任务要求与任务分析02任务实施04任务小结06知识与技能提升07延伸练习085.3 自动模式使用定时器1在模模式下控制交通信号灯延伸练习08本任务定时器1的中断周期为1毫秒,绿灯点亮时长对应的计数器数值定义为5000,也就是5000次定时器1中断的时间累加刚好为5秒。在实际编程中,5000这个数值对应5秒时长不够直观,往往是把绿灯点亮时长对应的计数器数值定义为5,那么需要在原有代码基础上如何修改呢?延伸练习08针对以上问题,需要在定时器1中断的基础上构建1秒的定时器,然后在这个1秒定时器上进行计数。可以定义一字型全局变量计数器,将此变量初始化为0,定时器1每中断一次,该变量加1。当该变量的值累加到1000时,刚好完成1秒的定时计数,这时LED灯计数器加1,同时将此变量赋值为0,又进行下一次循环计数。 展开更多...... 收起↑ 资源预览