交通灯案例.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
交通灯案例

案例9 用单片机最小系统实现简单交通灯控制 1 . 任务要求 由P2、P0口连接12个发光二极管,分别代表四个路口的红、绿、黄灯,初始态为四个路口的红灯全亮之后,东西路口的绿灯亮20秒,南北路口的红灯亮,东西路口方向通车;延时一段时间后,东西路口的绿灯熄灭,黄灯开始闪烁,每隔1s闪烁1次,闪烁3次后,东西路口红灯亮,而同时南北路口的绿灯亮20秒,南北路口方向开始通车;延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁,每隔1s闪烁1次,闪烁3次后,再切换到东西路口的绿灯亮,东西方向通车;之后重复以上过程。 2 .交通灯控制系统电路图 3. 软件设计 根据本任务要求及设计的硬件电路图,各路口的灯亮的规律与P2、P0口的取值有关系,其规律如下表所示: 3. 软件设计 本任务涉及两个定时时间,一是每个路口的绿灯亮20s,另一个是黄灯闪烁时间间隔0.5s,显然最容易实现的方法就是利用定时器,可以用定时器0控制路口绿灯亮的时间,用定时器1控制黄灯闪烁的时间间隔,但是两个定时器的定时都不可达到20s或0.5s,所以可以让两个定时器都工作于方式1,定时时间为50ms,引进两个变量time(初值为400)和timey(初值为20),当定时器发出中断时,这两个变量分别减1,直到为0则达到定时时间。 根据以上分析,TMOD赋值为0x11,两个定时器计数次数为50000。 void main() { unsigned int i; P0=P2=allr; for(i=50000;i0;i--); P0=P2=ewg_snr; TMOD=0x11; //定时器1和定时器0均工作于方式1 TL0=-50000;TH0=-500008;//T1、T0均定时50ms TL1=-50000;TH1=-500008; EA=1;ET0=1;ET1=1; TR0=1; while(1); } 4. 烧录器及程序烧录 RF810编程器 案例11 有时间显示的简单交通灯控制 本案例在案例9的基础上,增加两个数码管显示路口绿灯亮所剩余的时间。为了节省单片机的并行口,可将南北路口的红灯、绿灯、黄灯分别连接在一起,东西路口也是一样,这样只需要一个并行口就可控制4个路口的12只信号灯。 1、带时间显示的交通灯控制系统电路图 2、源程序清单 #includereg51.h unsigned char time=20,dup=20; unsigned char timey=10,county=6;//绿灯亮20s,黄灯亮灭间隔0.5s,闪烁6次 unsigned char allr=0x1b; //所有路口红灯全亮 unsigned char ewg_snr=0x1e; //东西绿灯亮,南北红灯亮 unsigned char ewy=0x1d; //东西黄灯亮,南北红灯亮 unsigned char sng_ewr=0x33; //南北绿灯亮,东西红灯亮 unsigned char sny=0x2b; //南北黄灯亮,东西红灯亮 unsigned char led[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit P01=P0^1; sbit P04=P0^4; bit ewg=1; //刚才是否是东西路口绿灯亮过 void main() { unsigned int i; P0=allr; P1=0; for(i=50000;i0;i--); P0=ewg_snr; P2=led[time/10]; P3=led[time%10]; TMOD=0x11; TL0=-50000; TH0=-500008; TL1=-50000; TH1=-500008; EA=1;ET0=1;ET1=1; TR0=1; while(1); } void isr_time0() interrupt 1 { TL0=-50000;TH0=-500008; dup--; if(dup==0) { dup=20; time--; P2=led[time/10]; P3=led[time%10]; if(time==0) { TR0=0;TR1=1; time=20; void isr_time1() interrupt 3 { TL1=-50000;TH1=-500008; timey--; if(timey==0) { timey=10; county--;

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档