基于51单片机的交通灯控制电路设计.doc

基于51单片机的交通灯控制电路设计.doc

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

交通灯 一、功能要求 要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒,黄灯先亮5秒钟,才能变换运行车道;黄灯亮时,要求每秒钟闪亮一次。 二、电路图 说明:1)每一位数码管位选要分开,对应IO口参照程序中红色部分 2)图示数码管为共阳,没加驱动数码管显示较暗,建议加驱动 三、程序 //TrafficLight.c #includereg52.h //IO口定义 sbit red_1 =P2^0;//南北方向 sbit red_2 =P2^3;//东西方向 sbit yellow_1 =P2^1; sbit yellow_2 =P2^4; sbit green_1 =P2^2; sbit green_2 =P2^5; sbit com1_1 =P3^6;//十位 南北方向 数码管位选 sbit com1_2 =P3^7;//个位 南北方向 sbit com2_1 =P3^4;//十位 东西方向 sbit com2_2 =P3^5;//个位 东西方向 //全局变量 char time=30;//倒计时 unsigned char num1=0,num2=0;//辅助计时 unsigned char flag1=0,flag2=0;//黄灯闪标志位 unsigned char shi1,shi2,ge1,ge2;//数码管十位个位 const unsigned char ledNum[] = {// 0 1 2 3 4 5 6 7 8 9 A b c d E F 不显示 - o(18)H(19)h(20)C(21)0(22)n(23) 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x89,0x8b,0xc6,0xc0,0xab }; //共阳数码管 //中断优先级别T0T1,数码管显示中断间隔2ms,计时时间间隔50ms //计时要求比较精确,间隔长,不应该被打断,故中断优先级要高,使用T0 //数码管中断可以被打断,打断时间较短,不会影响显示,使用T1 //在交通灯中,计时和数码管显示一直进行,故定时器开启后不用停止 void InitInter(void) { TMOD=0x11;//设置定时器工作方式为16位计时器 TH0=(65535-45872)/256;//11.0592M晶振,50ms TL0=(65535-45872)%256; TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; } void Display(void) { static unsigned char i=1; switch(i) { case 1: com2_2=0; P0=ledNum[shi1]; com1_1=1; break; case 2: com1_1=0; P0=ledNum[ge1]; com1_2=1; break; case 3: com1_2=0; P0=ledNum[shi2]; com2_1=1; break; case 4: com2_1=0; P0=ledNum[ge2]; com2_2=1; break; default: ; } i++; if(i4)i=1; } //红灯可以直接变成绿灯,但绿灯必须先变成黄灯再变红灯 void main(void) { bit i=0; InitInter(); while(1) { red_1=0;//0为亮 red_2=1; green_2=0; time=30; while(time5) { shi1=time/10; ge1=time%10; shi2=(time-5)/10; ge2=(time-5)%10; } green_2=1; yellow_2=0; flag2=1; num2=0; while(time0) { shi1=time/10; ge1=time%10; shi2=time/10; ge2=time%10; } flag2=0; yellow_2=1; red_2=0;

文档评论(0)

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

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

1亿VIP精品文档

相关文档