-1-第2章端口操作课题项目四红绿灯控制的设计课时4学时教学内容1、认识并搭建外围电路2、红绿灯程序的编写、编译与下载教学目标1、认知目标:进一步学习单片机端口外围电路的搭建和控制(红绿灯),了解局部变量和全局变量的概念。2、技能目标:学会红绿灯控制的程序编写。3、情感目标:培养学生探究、创新的学习能力。教学重点红绿灯编程实现教学难点红绿灯程序设计教学方法设疑法、讲解法、提问法、示范法、仿真演示法教学过程学生活动一、创设意境,导入新课导入:复习延时小灯控制(LED灯如何实现亮灭,LED灯如何延时控制),引入新课程红绿灯设计。从以上几幅图我们知道每个十字路口都有指挥交通的红绿灯,那同学们想过这个红绿是怎么样做的吗?怎么样实现控制的呢?结合我们现在学习单片机知识想一下是否可以利用单片机来设计红绿灯控制呢?那今天我们一起来学习制作简单的红绿灯。任务:1、单方向红绿灯设计,电路、程序编写和硬件测试。2、全红绿灯设计,电路、程序编写和硬件测试。二、新课教学任务一、认识并搭建外围电路(第一节课实操演示教学)1、认识电路(仿真演示)如图1所示是除单片机最小系统工作电路外所需要搭建的外围电路,其中P1.0脚外接绿灯、P1.1脚外接黄灯、P1.2脚外接红灯。观察学生反映(对导入是否产生兴趣):学生听课状态:-2-图1搭建的外围电路2、搭建电路仿真电路实物连接电路任务二、程序的设计思路、编写、编译与下载1、单方向红绿灯设计思路2、程序编写步骤1:在自己的文件夹中新建一个名为led-4的文件夹。步骤2:在led-4文件夹下,新建一个名为led-4的工程。步骤3:在led-4工程中,新建一个名为led-4.c的文件。步骤4:回到工程编辑界面,编写程序。#includereg52.h//头文件#defineucharunsignedchar//宏定义#defineuintunsignedint//宏定义voiddelay(ucharutime);//声明子函数sbitgreen=P1^0;//位定义sbityellow=P1^1;学生练习情况:学生兴趣焦点总结:-3-sbitred=P1^2;voidmain()//主函数{while(1)//大循环{green=0;//绿灯亮delay(45);//延时45sgreen=1;yellow=0;//黄灯亮delay(2);//延时2syellow=1;red=0;//红灯亮delay(45);//延时45sred=1;}}voiddelay(ucharutime){uinti,j,k;for(k=utime;k0;k--)for(i=1000;i0;i--)for(j=115;j0;j--);}步骤5:输入完程序,将程序存盘。3、程序编译参考项目二和项目三的具体过程。任务三、程序中相关语句与函数的学习(第二节课理论教学)1、#define宏定义格式:#define新名称原内容,相当于给“原内容”重新起了一个比较简单的“新名称”。本项目程序中,将unsignedchar用“uchar”代替。2、带参数函数的写法及调用本项目所写的程序中包含如下子函数体。voiddelay(ucharutime){uinti,j,k;for(k=utime;k0;k--)for(i=1000;i0;i--)for(j=115;j0;j--);}上面子函数中,delay后面的括号中多了“ucharutime”,这就是这个函数所带的一个参数,utime是一个unsignedchar型变量,称为这个函数的形参,在调用此函数时,用一个具有真实的数据代替此形参,这个真实数据称为实参,形参被实参代替之后,在子函数内部,所有和形参名相同的变量都被实参代替。任务四、Keil软件仿真下I/O口与变量状态的观察1、进入Keil软件模拟调试模式进入Keil软件模拟调试模式的具体操作步骤参照项目三中的相关内容,如图2所示-4-图2进入软件模拟调试模式界面2、查看单步执行时I/O口的变化状态步骤1:先将硬件I/O口模拟器打开,单击【Peripherals】|【I/O-Port1】菜单项,如图3所示,弹出如图4所示的对话框。图3选择I/O口状态图4查看I/O口状态图4显示的是软件模拟出的单片机P1口8位端口的状态,单片机上电后I/O口状态全为1,即十六进制的0XFF。步骤2:单击单步执行快捷图标,这时观察到“green=0”,语句前面有一个黄色的小箭头,说明下一步将要执行该语句,状态如图5所示:图5执行green=0;语句前P1口状态步骤3:再次单击单步执行,这时观察到黄色小箭头向下移动一行,指向“delay(45)”;延时子函数,这说明green=0,这条语句已执行结束。此时观察到P1口的8位端口状态为11111110,如图6所示:图6执行green=0;语句前P1口状态-5-执行完“green=0”,这条语句后,P1.0脚已经变为低电平0。任务五、红绿灯程序设计编写实训(第三节课实训)1、红绿灯仿真电路搭接实训。(参考仿真电路)2、红绿灯程序设计思路3、红绿灯参考程序#includereg52.h#defineucharunsignedchar#defineuintunsignedint//定义北面的LEDsbitN_Red=P1^0;sbitN_Yellow=P1^1;sbitN_Green=P1^2;//定义东面的LEDsbitE_Red=P1^3;sbitE_Yellow=P1^4;sbitE_Green=P1^5;//定义南面的LEDsbitS_Red=P1^6;sbitS_Yellow=P1^7;sbitS_Green=P2^0;//定义西面的LEDsbitW_Red=P2^1;sbitW_Yellow=P2^2;sbitW_Green=P2^3;/********************************************************************-6-*名称:Delay()*功能:延时,延时时间为10ms*del***********************************************************************/voidDelay(uintdel){uinti,j;for(i=0;idel;i++)for(j=0;j1827;j++);}/*********************************************************************名称:Main()*功能:实现灯的闪烁***********************************************************************/voidMain(void){while(1){/*南北红灯亮、东西绿灯亮、持续时间20秒*/N_Red=0;N_Yellow=1;N_Green=1;E_Red=1;E_Yellow=1;E_Green=0;S_Red=0;S_Yellow=1;S_Green=1;W_Red=1;W_Yellow=1;W_Green=0;Delay(2000);/*南北红灯亮、东西黄灯亮、持续时间5秒*/N_Red=0;N_Yellow=1;N_Green=1;E_Red=1;E_Yellow=0;E_Green=1;S_Red=0;S_Yellow=1;S_Green=1;W_Red=1;W_Yellow=0;W_Green=1;Delay(500);/*南北绿灯亮、东西红灯亮、持续时间20秒*/-7-N_Red=1;N_Yellow=1;N_Green=0;E_Red=0;E_Yellow=1;E_Green=1;S_Red=1;S_Yellow=1;S_Green=0;W_Red=0;W_Yellow=1;W_Green=1;Delay(2000);/*南北黄灯亮、东西红灯亮、持续时间5秒*/N_Red=1;N_Yellow=0;N_Green=1;E_Red=0;E_Yellow=1;E_Green=1;S_Red=1;S_Yellow=0;S_Green=1;W_Red=0;W_Yellow=1;W_Green=1;Delay(500);}}4、红绿灯硬件电路连接(参考接法,可以使用其他端口)任务六、红绿灯功能测试1、红绿灯硬件电路连接测试2、红绿灯程序设计测试3、红绿灯实现功能测试-8-法律知识:《道路交通安全法》第二十五条全国实行统一的道路交通信号。交通信号包括交通信号灯、交通标志、交通标线和交通警察的指挥。交通信号灯、交通标志、交通标线的设置应当符合道路交通安全、畅通的要求和国家标准,并保持清晰、醒目、准确、完好。根据通行需要,应当及时增设、调换、更新道路交通信号。增设、调换、更新限制性的道路交通信号,应当提前向社会公告,广泛进行宣传。第二十六条交通信号灯由红灯、绿灯、黄灯组成。红灯表示禁止通行,绿灯表示准许通行,黄灯表示警示。三、课堂小结本项目的学习让同学知道了交通灯是怎么样设计的,交通灯的控制方法。但是在程序设计的过程中,学生学习起来还是有点困难。因此在教学中我多分析,多演示,这样学生学习起来更加容易。四、课后作业1、红绿灯程序编写绿灯黄灯快要结束时进行亮灭变化显示,延时函数通过参数方式编写控制。(实训)2、动手操作和思考练习P54页。(实训)五、开拓思维,同时提出新的问题通过交通灯的设计我们知道了不同时间段可以控制不同阶段的LED灯,那程序设计中的相关语句和I/O口变量的状态怎么样想知道吗?实际应用中红绿灯还需要加上那些功能。课后反思