交通信号灯任务1红绿灯程序流程分析35课件讲解.ppt

交通信号灯任务1红绿灯程序流程分析35课件讲解.ppt

交通信号灯任务1:红绿灯程序流程分析任务1:红绿灯程序流程分析

122小故事任务分析:红绿灯是十字的重要交通信号,通常由红、绿、黄三色灯组成一组。我们把十字路口分成南北方向和东西方向。可以通过观察得到以下经验:南北方向有两组灯是同步的;东西方向有两组灯也是同步的。红绿黄三色灯的执行顺序是:绿——黄——红;假设南北方向是绿灯,则东西方向一定是红灯。南北方向是黄灯,则东西方向也是红灯。反之东西方向也是这样。南北:绿—12s—黄—2s—红—————绿东西:红——14s————绿——黄——红让每个灯对应一位单片机接口,利用程序修改输出电平。每次灯的变化都会有一定延时,可以利用延时函数实现。任务实施:画出如下硬件电路:南北向:P1.0(红)、P1.1(黄)、P1.2(绿);东西向:P1.3(红)、P1.4(黄)、P1.5(绿)。任务2:完成红绿灯控制程序

任务描述:画出流程图,编写程序。要求绿灯亮约5秒,黄灯亮0.5秒。任务分析:由于两个方向,每个方向有两种状态,故整个工作过程有4种状态。四种状态按顺序进行转换,即可完成流程设计。sbit使用方法??在C语言里,如果直接写P1.0,C编译器并不能识别,而且P1.0也不是一个合法的C语言变量名,所以得给它另起一个名字,这里起的名为P1_0,可是P1_0是不是就是P1.0呢??这里使用了KeilC的关键字sbit来定义。1.bit和sbitbit和sbit都是C51扩展的变量类型。bit变量是C51编译器的一种扩充数据类型,利用它可定义一个位变量。它的值是一个二进制位,不是0就是1。bit和intchar之类的差不多,只不过char=8位,bit=1位而已。sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbitxxx=REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。例如要表示P1_1,sbit的用法有三种:例如要表示P1_1,sbit的用法有三种:(1)sbit位变量名=位地址sbitP1_1=0x91;这样是把位的绝对地址赋给位变量.同sfr一样sbit的位地址必须位于80H-FFH之间。(2)sbit位变量名=特殊功能寄存器名^位位置sfrP1=0x90;sbitP1_1=P1^1;//先定义一个特殊功能寄存器名再指定位变量名所在的位置,当可寻址位位于特殊功能寄存器中时可采用这种方法。(3)sbit位变量名=字节地址^位位置sbitP1_1=0x90^1;这种方法其实和上一种表示是一样的,只是把特殊功能寄存器的位址直接用常数表示。做一做图3-2红绿灯程序流程图开始南北红;东西绿南北红;东西黄延时12秒延时2秒南北绿;东西红南北黄;东西红延时12秒延时2秒程序一:#includeAT89X52.H//包含AT89X52.H头文件#defineucharunsignedchar//宏定义/用uchar代替unsignedchar#defineuintunsignedintsbitr1=P1^0;//南北向红灯redsbity1=P1^1;//南北向黄灯yellowsbitg1=P1^2;//南北向绿灯greensbitr2=P1^3;//东西向红灯sbity2=P1^4;//东西向黄灯sbitg2=P1^5;//东西向绿灯//////延时函数//////////////////////////////////voiddelay(uintt){uintx;while(t--)//利用双重循环产生延时for(x=0;x120;x++);}///////////主函数///////////////////////////voidmain(){while(1){r1=0;y1=1;g1=1;r2=1;y2=1;g2=0;delay(12000);r1=0;y1=1;g1=1;r2=1;y2=0;g2=1;delay(2000);r1=1;y1=1;g1=0;r2=0;y2=1;g2=1;delay(12000);r1=1;y1=0;g1=1;r2=0;y2=1;g2=1;delay(2000); }}程序二:#includeAT89X52.H//包含AT89X5

文档评论(0)

1亿VIP精品文档

相关文档