当前位置:文档之家› 单片机的交通灯显示系统

单片机的交通灯显示系统

单片机课程设计基于单片机的交通灯显示系统交通灯是日常生活中常见的自动控制产品,人们的日常出行及人身安全等都与交通灯有着密切的联系。

本文提出一种基于单片机的交通灯设计,系统包含三个功能模块:(1)交通灯LED显示模块,实时显示东西、南北两个路口红、黄、绿三种灯的状态;(2)定时器模块,中断计算绿灯剩余时间;(3)独立按键模块,分为紧急制动按钮和夜间模式按钮两个按钮;(4)LCD液晶显示模块,显示绿灯亮的剩余时间系统结构如下图所示:关键词:定时器;液晶显示;独立按键山东经济学院课程设计目录摘要...................................................................................................... 错误!未定义书签。

引言. (1)1.交通灯的概述 (2)1.1交通灯的结构 (2)1.2 工作原理 (3)1.3功能应用 (3)1.4工作流程 (4)2 交通灯显示系统组成 (5)2.1 定时器TR1模块的选择与设计 (5)2.2 LCD液晶显示模块的选择与设计 (5)2.3独立按键模块的选择与设计 (7)2.4LED模块的选择与设计 (8)3 实验结果演示 (9)结论 (10)参考文献.................................................................................................. 错误!未定义书签。

附录.. (11)1.原件明细表 (11)2.源程序清单 (11)致谢 (17)引言今天,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。

但这一技术在19世纪就已出现了。

1918年,又出现了带控制的红绿灯和红外线红绿灯。

带控制的红绿灯,一种是把压力探测器安在地下,当车辆接近时,红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下喇叭,就使红灯变为绿灯。

红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。

红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。

信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。

1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。

绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。

左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。

红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。

黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。

随着经济的发展,交通运输中出现了一些传统方法难以解决的问题。

道路拥挤现象日趋严重,造成的经济损失越来越大,并一直保持大比例的增长。

现在交通系统已不能满足经济发展的需求。

由于生活水平的提高,人们对交通运输的安全性及服务水平提出了更高的要求。

在交通中管理引入单片机交通灯控制代替交管人员在交叉路口服务,有助于提高交通运输的安全性、提高交通管理的服务质量。

并在一定程度上尽可能的降低由道路拥挤造成的经济损失,同时也减小了工作人员的劳动强度。

中国车辆数量不断增加,交通控制在未来的交通管理中起着越来越重要的作用。

智能交通灯的管理比重修一条马路无论在经济、交通运行速率上都有很好的效益、更加节约资源。

使交管人员有更多的精力投入到管理整个城市交通控制,带来更大的经济和社会效益,为创造美好的城市交通形象发挥更多的作用。

1.交通灯的概述从采用计算机控制到现代化的电子定时监控,交通信号灯在科学化、自动化上不断地更新、发展和完善。

但是,随着社会的不断进步,传统的交通灯的缺陷也日益出现,其中设计过于死板,达不到道路的最大通行效率是最明显的问题,红绿灯交替变换时间过于程式化。

随着我国经济的高速发展,人们对各种交通车辆的需求量不断增大,城市的交通拥护问题日益严重,目前,大部分城市的十字路口的交通控制灯,通常的做法是:事先经过车辆流量的调查,利用传统的方法设计好红绿灯的延时,然而,实际上的车流量是不断变化的,有的路口在不同的时间段车流量的大小甚至有很大的差异,所以说,统计的方法己不能适应迅速发展的交通现状。

本文设计一个基于中规模集成电路的交通灯,它具有四个模块:交通灯LED显示、定时器倒数计时和独立按键及LCD液晶显示功能。

本实验用六个LED灯模拟两个路口交通灯的显示,直观、明了。

1.1交通灯的结构本文设计的交通灯显示系统包括四个模块,分别是LCD倒计时显示、LED交通灯状态显示和独立按键功能,如图1.1所示。

图1.1 系统框图利用单片机的定时器定时的原理,结合LCD及LED显示电路、以及两个按键来设计交通灯。

将软、硬件有机地结合起来,使得系统能够正确地进行倒计时,同时能够正确地显示交通灯的状态及两个独立按键分别实现紧急制动状态下红灯点亮及夜间模式下黄灯闪烁的功能。

1.2 工作原理(1)交通灯显示系统共有四种状态:南北方向红灯时,东西方向先是绿灯后是黄灯;东西方向红灯时,南北方向先是绿灯后是黄灯;(2)单片机的数码管显示及LCD显示均与P0口的LED显示相冲突,所以用两个单片机,将主板中的P1口与次板中的P0口相连,让灯在次板中显示;设置东西方向红、黄、绿灯分别为dxr、dxy、dxg,南北方向红、黄、绿灯分别为nbr、nby、nbg,且等于0时灯亮,等于1时灯灭;(3)通过定时器1对绿灯进行15s绿灯倒数计时且同通过LCD进行显示,同时设置四个状态标志位,在定时中断中判断交通灯该进入四种状态中的哪个状态;(4)通过P3口定义两个独立按键S17和S18,且定义两个状态标志位分别为紧急制动按键和夜间模式按键。

分别实现红全灯亮且再次按下红灯全灭及黄灯闪烁的功能。

1.3功能应用(1)东西方向、南北方向均有红、黄、绿三种信号灯;(2)带紧急制动按钮,按钮按下,所有方向红灯亮;再次按下,恢复正常显示(3) 夜间模式按下,所有方向显示黄灯闪烁;(4) 实时提醒绿灯亮的剩余时间;国内的交通灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯。

加上一个倒计时的显示计时器来控制行车。

利用单片机控制技术.提出了软件和硬件设计方案,能够实现道路的最大通行效率。

1.4工作流程图1.4 工作流程图2 交通灯显示系统组成2.1 定时器TR1模块的选择与设计本设计利用51单片机的TR1定时器定时,实现精确计时。

工作原理:在作为定时器使用时,输出的时钟脉冲是由晶体振荡器的输出经过12分频后得到的,因此每一个机器周期定时器加1,定时器每接收一个输入脉冲的时间为1us。

图2.1定时器中断原理图2.2 LCD液晶显示模块的选择与设计通过调用液晶显示子函数,最终实现在液晶屏的第二行显示“num:时间”的功能。

void enable(uchar del) //1602命令函数{P0 = del;RS = 0;RW = 0;E = 0;delay();E = 1;delay();}void write(uchar del) //1602写数据函数{P0 = del;RS = 1;RW = 0;E = 0;delay();E = 1;delay();}void L1602_init(void) //1602初始化{enable(0x01);enable(0x38);enable(0x0c);enable(0x06);enable(0xd0);}void L1602_char(uchar hang,uchar lie,char sign) //1602字符显示输入模块{uchar a;//if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;enable(a);write(sign);}void L1602_string(uchar hang,uchar lie,uchar *p)//1602字符串显示输入{uchar a;//if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;enable(a);while(1){if(*p == '\0') break;write(*p);p++;}}图2.2 液晶显示屏连接原理图2.3独立按键模块的选择与设计void key(){if(S0==0 || S1==0){Delay1(20); //20毫秒软件防抖if(S0==0 || S1==0){if(S0 == 0) //所有方向红灯亮{flag=4;x=x+1;}if(S1 == 0) //黄灯闪烁flag=5; }}图2.3 独立按键电路图通过调用按键子程序实现如下功能: S18S19当S18按下后,出现的是黄灯闪烁,表示在黑夜是出现紧急情况当S19按下后,出现的是所有红灯亮,表示在黑夜是出现紧急情况2.4LED 模块的选择与设计通过设置六个不同的状态标志位来控制交通灯在不同情况下的显示状态,其中包括正常情况下的四中显示状态、紧急制动状态以及夜间模式状态。

图2.4 灯控制电路图3 实验结果演示图3.1 实验结果加电后,交通灯的初始状态是东西方向红灯亮、南北方向绿灯亮,液晶屏从15s 开始倒数计时;倒数到0时变为东西方向红灯亮、南北方向黄灯亮;而后南北方向红灯亮、东西方向绿灯亮,液晶屏从15s开始倒数计时;倒数到0时变为南北方向红灯亮、东西方向黄灯亮。

当按键S17按下时,两个方向红灯都亮,再次按下时,两个方向的红灯都灭;当按键S18按下时,两个方向的黄灯闪烁。

结论本设计模拟实现了交通灯的基本功能:当按下独立按键S19时,红灯全亮;当按下独立按键S18时,黄灯闪烁;液晶显示屏可以显示绿灯的15s倒计时。

东西南北方向交通灯通过控制标志位来改变状态。

由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,所以在这次课程设计过程中,我了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。

有一点是在设计过程中遇到的情况,就是自己认为行的通的电路,但实际接上却实现不了,而又一下找不出问题所在,只有在查了书上有关这方面的解释后才有所进展,因此耗费在这上面的时间很多。

总体感觉是:通过这次课程设计,加强了我们动手、思考和解决问题的能力。

附录1.原件明细表器件名称型号参数数量单片机ATC90C51RD+ 2 液晶显示板1602LCD 1 电源 1LED灯 6跳线8 2.源程序清单#include<reg52.h>unsigned char table[]={0,1,2,3,4,5,6,7,8,9};#define uchar unsigned charsbit dxr=P1^0; //东西三灯定义端口sbit dxy=P1^1;sbit dxg=P1^2;sbit nbr=P1^3; //南北三灯定义端口sbit nby=P1^4;sbit nbg=P1^5;sbit E=P2^7; //1602使能引脚sbit RW=P2^6; //1602读写引脚sbit RS=P2^5; //1602数据/命令选择引脚sbit S0=P3^4; //S17 紧急制动按钮sbit S1=P3^3; //S18 夜间模式char num;uchar count,flag,num1,x;//定义变量void init() //定时器初始化函数{TMOD=0x10;TH1=(65536-50000)/256;//0.05sTL1=(65536-50000)%256;EA=1;ET1=1;}void delay(){int i,j;for(i=0; i<=100; i++)for(j=0; j<=20; j++);}void Delay1(unsigned int del){unsigned int m,n;for(m=0; m<del; m++)for(n=0; n<1827; n++) ;}void led() //灯控制子程序{ if(flag==1) //东西方向绿灯{dxr=1;dxy=1;dxg=0;nbr=0;nby=1;nbg=1;}if(flag==0) //南北方向绿灯{dxr=0;dxy=1;dxg=1;nbr=1;nby=1;nbg=0;}if(flag==2) //东西方向黄灯{dxr=1;dxy=0;dxg=1;nbr=0;nby=1;nbg=1;}if(flag==3) //南北方向黄灯{dxr=0;dxy=1;dxg=1;nbr=1;nby=0;nbg=1;}if(flag==4) //所有方向红灯亮{ dxr=0;dxy=1;dxg=1;nbr=0;nby=1;nbg=1;}if(flag==5) //所有方向黄灯闪烁{ dxr=1;dxy=0;dxg=1;nbr=1;nby=0;nbg=1;Delay1(100);dxr=1;dxy=1;dxg=1;nbr=1;nby=1;nbg=1;Delay1(100);dxr=1;dxy=0;dxg=1;nbr=1;nby=0;nbg=1;Delay1(100);dxr=1;dxy=1;dxg=1;nbr=1;nby=1;nbg=1;Delay1(100);}}void key() //按键控制子程序{if(S0==0 || S1==0){Delay1(20); //20毫秒软件防抖 if(S0==0 || S1==0){if(S0 == 0) //所有方向红灯亮{flag=4;x=x+1;}if(S1 == 0) //黄灯闪烁flag=5; }}}//液晶显示屏子程序void enable(uchar del){P0 = del;RS = 0;RW = 0;E = 0;delay();E = 1;delay();}void write(uchar del){P0 = del;RS = 1;RW = 0;E = 0;delay();E = 1;delay();}void L1602_init(void){enable(0x01);enable(0x38);enable(0x0c);enable(0x06);enable(0xd0);}void L1602_char(uchar hang,uchar lie,char sign) {uchar a;//if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;enable(a);write(sign);}void L1602_string(uchar hang,uchar lie,uchar *p) {uchar a;//if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;enable(a);while(1){if(*p == '\0') break;write(*p);p++;}}void main() //主函数{ int i = 48;char a,b;num=20;S0=1;S1=1;L1602_init();L1602_string(2,1," num: ");init();P0=0xff;TR1=1;while(1){ if(num>=5){a=(num-5)/10;b=(num-5)%10;}L1602_char(2,7,table[a]+48);L1602_char(2,8,table[b]+48);key();led();if(flag==4&&x%2==0){flag=4;while(1){key();if(flag==4&&x%2!=0)break;} } }}void T1time() interrupt 3 //中断子程序{count ++;if (count ==20){ count=0;num--; }if(num<=20)flag=1;if(num==0){num=20;num1=~num1;}if(num1==0){ if(num<5)flag=3;//南北黄灯elseflag=0;}//南北绿灯;else//if(num1==1){if(num<5)flag=2;//东西黄灯elseflag=1;}//东西绿灯TH1=(65536-50000)/256;//0.05sTL1=(65536-50000)%256;}致谢这次课程设计能够顺利完成,得益于很多人的指导。

相关主题