交通灯.docx
- 文档编号:12858825
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:16
- 大小:392.12KB
交通灯.docx
《交通灯.docx》由会员分享,可在线阅读,更多相关《交通灯.docx(16页珍藏版)》请在冰豆网上搜索。
交通灯
1设计任务
(1)设计一个十字路口的交通灯控制电路,要求南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行时间为20秒,时间可设置修改。
(2)在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。
(3)黄灯亮时,要求每秒亮一次。
(4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。
(5)一道有车而另一道无车(实验时用开关K0和K1控制),交通灯控制系统能立即有车道放行。
(6)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯,紧急车由K2开关模拟。
2系统总体方案及硬件设计
2.1AT89S52单片机简介
AT89S52是一种低功耗、高性能CMOS8位微控制器。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6位向量2级中断结构,全双工串行口,片内晶振及时钟电路。
空闲模式下,CPU停止工作,允许RAM、定时器计数器、串口、中断继续工作。
鉴于以上的优点本系统采用AT89S52作为主控芯片,实现对整个系统的控制。
2.2系统硬件电路设计
(1)时钟电路设计
如上图所示,采用内部时钟产生方式,在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。
其发出的时钟脉冲直接送入片内定时控制部件。
(2)复位电路设计
如上图所示,采用上电+按钮电平复位方式,当按下按钮时,RST管脚高电平触发。
为保证复位可靠,RC时间常数应大于两个机器周期,电容取33uf,电阻取200欧。
(3)灯控制电路设计
如上图所示,交通灯状态显示电路由东西南北四个方向各三个LED灯组成,分别显示四个方向上红、黄、绿三个状态,用以指示十字路口各方向车辆的行驶。
通过软件编程,可使路口交通变化情况为:
南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行时间为20秒;在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;黄灯亮时每秒闪亮一次。
(4)倒计时显示电路设计
如上图所示,由两个个共阴极两位数码管来实现倒计时。
由于P0口输出电流小,需外接上拉电阻,C1、C2端接到P1口的P1.0、P1.1、P1.2、P1.3口用单片机来控制其片选。
(5)按键控制电路设计
如上图所示,开关控制由五个连接到单片机的控制按钮组成。
通过软件编程,按下K3键电路进入外部中断0响应,此时,可通过按键K1和和K0设置通行时间,每按一次K1键南北通行时间增加一秒,而按下K0键东西通行时间增加一秒,此时若按下K4键东西南北的通行状况返回到初次设的状况(即南北通行),重新返回循环状态;
按下按键K2,这是对紧急状况的控制,此时停止计数,东西方向和南北方向都不通行,如果K4键按下,返回紧急状况的状态,并重启计数;按键K1按下,控制南北方向通行;按键K0按下,控制东西方向通行。
3流程图
3.1交通灯的设计流程图
3.2定时器0及中断响应
5课程设计体会
经过一个星期的课程设计,过程曲折可谓一语难尽。
在此期间我们也失落过,也曾一度热情高涨。
从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。
通过这次课程设计,加强了我们动手、思考和解决问题的能力。
让我对单片机的理论有了更加深入的了解,同时在具体的制作过程中我们发现现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方的问题,这让我们无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大。
特别是电路完成后,所有的焊接都与我们设计的方案一样,但当我们接通电源是,所看到的结果与我们料想的完全不同,十二盏灯都亮了,我们也都知道,任何实验都不可能一次就成功的,我们认真的去检查,可是检查了好久都没有任何发现,只知道单片机的IO口的输出与我们所输入的程序不相符合,我们逐步排查,最先检查LED灯电路的接法是否合理,然后检查时钟电路的晶振是否有问题,然后再检查复位电路是否完好,最后功夫不负有心人,我们把复位电路接地电阻断开后,就发现LED灯有规律的熄灭了,经过我们的认真检查,对位选控制位口的改正,最后电路基本上都实现了我们预先设计的功能。
这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
6源程序代码
#include
#defineunitunsignedint
#defineucharunsignedchar
ucharcodea[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodeb[4]={0xfe,0xfd,0xfb,0xf7};
ucharcodec[4]={0xcc,0xd4,0x78,0xb8};
ucharNB=25,DX=30,NBG=25,DXG=15,H=5;
uchari,k=0,cnt=0,j=0;
sbitK0=P3^5;
sbitK1=P3^6;
sbitK4=P3^7;
sbitK3=P3^2;
sbitK2=P3^3;
voiddelay(uchart);
voidkey();
voiddisplay();
voidsettime();
voidinit(void)
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
IT0=1;
ET0=1;
TR0=1;
EA=1;
EX0=1;
EX1=1;
P2=c[k];
}
voidint0(void)interrupt0
{
EA=1;
P2=0xd8;
for(;;)
{
settime();
if(K1==0)
{
delay(40);
if(K1==0)
{
while(!
K1)
{
settime();
}
NBG++;
if(NBG==100)
NBG=0;
}
}
if(K0==0)
{
delay(40);
if(K0==0)
{
while(!
K0)
{
settime();
}
DXG++;
if(DXG==100)
DXG=0;
}
}
if(K4==0)
{
delay(40);
if(K4==0)
{
while(!
K4)
{
}
k=0;P2=c[k];
NB=NBG,DX=NBG+H;
display();
EA=1;
break;
}
}
}
}
voidint1(void)interrupt2
{
EA=0;
TR0=!
TR0;
for(;;)
{
P2=0xdb,P0=a[0];
P1=0xfe;
delay(20);
P1=0xfd;
delay(20);
P1=0xfb;
delay(20);
P1=0xf7;
delay(20);
if(K4==0)
{
delay(20);
EA=1;
P2=c[k];
TR0=!
TR0;
break;
}
}
}
voidtime1(void)interrupt1
{
TH0=0x3c;
TL0=0xb0;
cnt++;
if(cnt>=20)
{
NB--;
DX--;
cnt=0;
if(NB==0||DX==0)
{
k++;
if(k>3)
k=0;
switch(k)
{
case0:
NB=NBG,DX=NBG+H;j=0;P2=c[k];break;
case1:
NB=H;j=1;P2=c[k];break;
case2:
NB=DXG+H,DX=DXG;j=0;P2=c[k];break;
case3:
DX=H;j=2;P2=c[k];break;
}
}
}
}
voiddelay(uchart)
{
uchari;
do
{
for(i=0;i<20;i++)
;;;
}
while(t--);
}
voidsettime()
{
P1=0xfe,P0=a[(NBG+H)%10];
delay(20);
P1=0xfd,P0=a[(NBG+H)/10];
delay(20);
P1=0xfb,P0=a[(DXG+H)%10];
delay(20);
P1=0xf7,P0=a[(DXG+H)/10];
delay(20);
}
voidkey()
{
if(K1==0)
{
delay(40);
if(K1==0)
{
while(!
K1)
{
display();
}
k=0,P2=c[k];cnt=0;
NB=NBG,DX=NBG+H;
display();
}
}
if(K0==0)
{
delay(40);
if(K0==0)
while(!
K0==0)
{
{
display();
}
k=2,P2=c[k];cnt=0;
NB=DXG+H,DX=DXG;
display();
}
}
}
voiddisplay()
{
P1=0xfe,P0=a[NB%10];
delay(20);
P1=0xfd,P0=a[NB/10];
delay(20);
P1=0xfb,P0=a[DX%10];
delay(20);
P1=0xf7,P0=a[DX/10];
delay(20);
}
voidmain(void)
{
init();
for(;;)
{
display();
key();
while(j==1)
{
P2=0xdc;
for(i=83;i>0;i--)
{
display();
}
P2=c[k];
for(i=83;i>0;i--)
{
display();
}
}
while(j==2)
{
P2=0xf8;
for(i=83;i>0;i--)
{
display();
}
P2=c[k];
for(i=83;i>0;i--)
{
display();
}
}
}
}
7系统原理图
8参考文献
1、51单片机学习网
2、单片机学习网
3、《单片机C语言应用程序设计》,第四版,马忠梅主编,北京航空航天大学出版社
4、《单片机开发与典型工程项目实例详解》,边海龙、孙永奎编著,电子工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯