基于STC90C51单片机的智能交通灯设计.doc
《基于STC90C51单片机的智能交通灯设计.doc》由会员分享,可在线阅读,更多相关《基于STC90C51单片机的智能交通灯设计.doc(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于STC90C51单片机的交通灯设计1、 设计题目基于STC90C51单片机的智能交通灯设计2、设计要求2.1、系统功能1按照交通规那么,控制宝田路和前进路方向及其人行道的交通信号灯红黄绿的通断。2设置信号灯的通断时间。3可人工干预,使交通信号灯开启不同模式。2.2、性能参数:1电源:5VDC2LED灯电流:10mA3定时时间:10s-200s3、总体设计根据系统功能和设计要求,系统采用单片机控制的方案,基于HC6800S开发板,由STC90C51,74HC573,交通灯模块,动态数码显示管以及4*2独立按键组成。3.1系统工作原理在十字路口,分为宝田路和前进路,正常情况下,在任一时刻只有一
2、个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。其具体状态如下:1普通模式:状态一:宝田路通行阶段宝田路及其人行道亮绿灯30秒、前进路及其人行道亮红灯30秒;状态二:黄灯阶段宝田路和前进路亮黄灯5秒、两侧人行道亮红灯5秒;状态三:前进路通行阶段前进路及其人行道亮绿灯30秒、宝田路及其人行道亮红灯30秒;状态四:黄灯阶段宝田路和前进路亮黄灯5秒、两侧人行道亮红灯5秒;返回到状态一。2顶峰期模式设宝田路为主干道:按下按键2key2,开启顶峰期模式;状态一:宝田路通行阶段宝田路及其人行道亮绿灯60秒、前进路及其人行道亮红灯30秒;状态二:黄灯阶段宝田路和前进路亮黄灯5
3、秒、两侧人行道亮红灯5秒;状态三:前进路通行阶段前进路及其人行道亮绿灯30秒、宝田路及其人行道亮红灯30秒;状态四:黄灯阶段宝田路和前进路亮黄灯5秒、两侧人行道亮红灯5秒;返回到状态一;按键2释放,回到普通模式。3紧急模式: 按下按键1key1,开启紧急模式,所有道路及其人行道均红灯亮,数码管不显示。释放按键1,回到普通模式。3.2单片机交通控制系统的功能要求本设计能模拟根本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示,通行时间调整功能和紧急情况全面禁行。1倒计时显示倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间、在“停止和“通过两者间作出适宜的选择。驾驶员
4、和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更平安。倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的一种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止和“通过两者间作出适宜的选择。2时间的设置本设计中对时间进行了人为控制设置,正常情况下宝田路和前进路的绿灯通行与红灯禁行时间均设置为30秒、黄灯等待时间设置为5秒。假设前进路为主干道,考虑到主干道在上下班顶峰期车流量和人流量较大,人为增加开关K2。当K2开启时,主干道前进路上绿灯通行时间和宝田路上的红灯禁行时间更改为60秒,其余设置均不变;当K1关闭时,又恢复正常情况下的时间设置。3紧急
5、情况全面禁行本设计中在紧急情况下增加了全面禁行状态,增加开关K1。当K1开启时,宝田路和前进路及其各自人行道均量红灯禁行;当K1关闭时,交通灯恢复正常状态。4、详细设计硬件设计 为了实现本设计要求的具体功能,选用STC90C51单片机及外围器件构成最小控制系统,10个发光二极管分别分成两组红黄绿和两组红绿灯构成信号灯指示模块,4个LED动态数码管构成各个方向倒计时显示模式,两个按键分别用来设置顶峰期模式和紧急模式。4.1、单片机系统设计单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,根本上可以指挥交通的具体通行,当然,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。单片
6、机上电后,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。HC6800S整体结构视图:STC90C51内部结构图:STC90C51芯片引脚图:4.2、LED数码管显示屏设计LED动态数码管的显示原理为:2位8段数码管电路采用“共阳连接驱动代码,如右图所示。段码和位码,段码即段选信号 SEG,它负责数码管显示的内容,图中 ag、dp组成的数据a 为最低位,dp 为最高位就是段码。位码即位选信号 DIG,它决定哪个数码管工作,哪个数码管不工作。LED数码管显示代码表如下表所示:显示数值dp,g,f,e,d,c,b,a代码0011111110x3f10
7、00001100x062010110110x5b3010011110x4f4011001100x665011011010x6d6011111010x7d7000011010x078011111110x7f9011011110x6fHC6800S开发板中动态数码管模块原理图如下列图所示:4.3、交通灯设计HC6800S开发板中交通灯模块原理图如下列图所示,宝田路红黄绿灯及其人行道上的红绿灯和前进路上的红黄绿灯由JP1控制,前进路人行道上的红绿灯由J22控制。 5、详细设计软件设计5.1、软件开发工具和环境keil C51 Vision6.125.2、软件总体设计5.2.1总体结构流程图如下开始主
8、程序,即普通模式检测是否为顶峰模式?检测是否为紧急模式?NYYN检测按键1是否按下?检测按键2是否按下?NYYN执行相应程序,即顶峰期模式执行相应程序,即紧急模式5.2.2子结构软件设计1普通模式程序流程简图如下:开始初始化设定初值红灯闪烁,倒计时30秒黄灯闪烁,倒计时5秒绿灯闪烁,倒计时30秒黄灯闪烁,倒计时5秒结束 程序源代码如下: while(1) if(S=71) S=0; /*宝田路通行,宝田路绿灯亮30秒*/ if(S31) Data0=0x00; Data1=0x00; Data2=duan(30-S)/10; Data3=duan(30-S)%10; Data4=0x00; D
9、ata5=0x00; Data6=Data2; Data7=Data3; Display(); led=0xFF; / 将所有的灯都熄灭 RED00=1; GREEN00=1; GREEN10=0; /宝田路人行道绿灯亮 GREEN11=0; /宝田路绿灯亮 RED00=0; /前进路人行道红灯亮 RED01=0; /前进路红灯亮 /*黄灯阶段,5秒*/ else if(S36) Data0=0x00; Data1=0x00; Data2=duan(35-S)/10; Data3=duan(35-S)%10; Data4=0x00; Data5=0x00; Data6=Data2; Data7
10、=Data3; Display(); led=0xFF; /将所有的灯都熄灭 RED00=1; GREEN00=1; RED10=0;/宝田路人行道红灯亮 YELLOW11=0;/宝田路黄灯亮 RED00=0;/前进路人行道红灯亮 YELLOW01=0;/前进路黄灯亮 /*前进路通行,前进路绿灯亮30秒*/else if(S0;a-) for(b=110;b0;b-);3紧急模式程序流程简图如下:开始 普通模式按下按键1? N 紧急模式Y 程序源代码如下:/*按下按键1,开启紧急模式,所有红灯亮,数码管不显示*/ if(key1=0) delayms(); /去抖延时 if(key1=0) D
11、ata0=0x00; Data1=0x00; Data2=0x00; Data3=0x00; Data4=0x00; Data5=0x00; Data6=0x00; Data7=0x00; Display(); led=0xFF; RED00=1; GREEN00=1; RED10=0; RED11=0; RED00=0; RED01=0; while(!key1); /按键1释放 keyscan(); 4顶峰模式程序流程简图如下:开始 普通模式按下按键2? N 顶峰模式Y 程序源代码如下:/*按下按键2,开启上下班顶峰期模式,主干道宝田路绿灯时间为60秒*/void keyscan() if
12、(key2=0) delayms(); /去抖延时 if(key2=0) while(1) if(key2!=0) break;/当按键2释放,跳出循环 if(M=101)M=0; if(M61) Data0=0x00; Data1=0x00; Data2=duan(60-M)/10; Data3=duan(60-M)%10; Data4=0x00; Data5=0x00; Data6=Data2; Data7=Data3; Display(); led=0xFF; RED00=1; GREEN00=1; GREEN10=0; GREEN11=0; RED00=0; RED01=0; else
13、 if(M66) Data0=0x00; Data1=0x00; Data2=duan(65-M)/10; Data3=duan(65-M)%10; Data4=0x00; Data5=0x00; Data6=Data2; Data7=Data3; Display(); led=0xFF; RED00=1; GREEN00=1; RED10=0; YELLOW11=0; RED00=0; YELLOW01=0; else if(M96) Data0=0x00; Data1=0x00; Data2=duan(95-M)/10; Data3=duan(95-M)%10; Data4=0x00; D
14、ata5=0x00; Data6=Data2; Data7=Data3; Display(); led=0xFF; RED00=1; GREEN00=1; RED10=0; RED11=0; GREEN00=0; GREEN01=0;else Data0=0x00; Data1=0x00; Data2=duan(100-M)/10; Data3=duan(100-M)%10; Data4=0x00; Data5=0x00; Data6=Data2; Data7=Data3; Display(); led=0xFF; RED00=1; GREEN00=1; RED10=0; YELLOW11=0
15、; RED00=0; YELLOW01=0; while(!key2);/等待按键释放 5.3、定时程序设计 进入主程序后,首先要对定时器和中断有关的存放器初始化。初始化过程如下:(1) 对TMOD赋值,确定定时器的工作方式;(2) 计算初值,并将初值写入;(3) 中断方式时,那么对IE赋值,开放中断;(4) 使定时器运行控制端置位,启动定时器来计数。本次设计使用了定时器0的工作方式,50ms中断一次,而交通信号灯倒计时计数需要定时1s,通过计算,确定TH0和TL0应装入的初值为60和176,即0x3C和0xB0。定时程序源代码如下:void init() TMOD=0x01; / 设置定时器
16、工作方式 TH0=0x3C; / 装初值 TH1=0xB0; EA=1; /开启总中断 ET0=1; /开启定时器中断 TR0=1; /启动定时器void T0_time()interrupt 1 TH0=0x3C;/重装初值 TH1=0xB0; T+; if(T=20) S+; /S计数 M+; /M计数 T=0; /1秒时间到,T清0重新再计20次 5.4、数码管显示程序设计通过单片机的定时器中断程序设计,可以控制数码管在动态显示时每1秒变换一次,也就是计数一次,根据定义的全局变量和I/O口,在显示子函数中实现数码管的位选和段选并能够在主函数中调用实现倒计时循环显示。显示子函数代码如下:v
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STC90C51 单片机 智能 交通灯 设计
限制150内