单片机课程设计交通信号灯模拟控制设计.docx
《单片机课程设计交通信号灯模拟控制设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计交通信号灯模拟控制设计.docx(12页珍藏版)》请在冰豆网上搜索。
单片机课程设计交通信号灯模拟控制设计
单片机原理及应用课程设计论文
交通信号灯模拟控制设计
交通信号灯模拟控制设计
一、设计目的及意义
设计一个单片机控制交通信号灯,使其能模拟城市“十字”路口交通信号灯的功能,该交通信号灯控制器由一条主干道(东西方向)和一条支干道(南北方向)汇合成十字路口,即主干道的通行时间与从干道的通行时间相同。
在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
用红、绿、黄发光二极管作信号灯。
所谓模拟,就是以红、黄、绿色三只共两组(因为东、西方向信号灯的变化情况相同,用一组发光二级管;南、北方向信号灯的变化情况相同,用一组发光二级管)发光二级管(LED)表示交通信号灯。
在一十字路口设置交通灯,并用单片机对其进行合理的控制。
控制要求东西:
绿灯黄灯红灯,南北:
红灯绿灯黄灯。
在正常情况下,两干道的交通灯按图1进行转换,并以倒计数的方式将剩余时间显示在每个干道对应的两位LED数码管上。
利用单片机设计实际生活中的交通灯,既提高了我们的实际动手能力,又能深刻的理解单片机在生活中的实际应用,使我们受益匪浅。
二、设计要求
设计完成后按交通状态图实现以下功能:
1.初始东西红灯亮,南北绿灯亮,南北方向通车。
2.延时20s,南北路口绿灯熄灭,黄灯闪烁3秒。
3.黄灯闪烁后,南北路口红灯亮、东西路口绿灯亮,东西方向开始通车。
4.延时20s,东西方向绿灯灭,黄灯闪烁3秒,然后切换成南北方向通车,如此重复。
图1交通状态图(黑色表示亮,白色表示灭)
三、总体设计方案
倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间、在“停止”和“通过”两者间作出合适的选择。
驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。
倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的1种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择。
因此本设计采用加入倒计时显示,以AT89C51单片机为控制核心,利用单片机的定时器产生秒信号,控制十字路口的红、绿、黄灯交替点亮和熄灭,并且利用4只LED数码管实时显示通行、等待及禁止的剩余时间。
用6只发光二级管作为红、绿、黄灯指示。
本设计的总体框图如图2.
图2系统的总体框图
本设计方案用到以下元器件:
1、AT89C51单片机及其外围器件。
2、四位七段数码管一个。
3、6只发光二级管。
四、硬件和软件设计
4.1硬件分析
4.1.1AT89C51
交通信号灯的控制电路中的核心是AT89C51单片机,其内部带有4KB的FLASH,无须扩展程序存储器;交通灯的控制没有大量的运算和暂存数据,AT89C51芯片内的128BRAM已经满足要求,所以不必外扩RAM,硬件电路原理图如图3所示。
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C51主要特性:
(1)与MCS-51兼容
(2)4KB字节可编程闪烁存储器
(3)寿命:
1000写/擦循环
(4)数据保留时间:
10年
(5)全静态工作:
0Hz-24MHz
(6)三级程序存储器锁定
(7)128×8位内部RAM
(8)32位可编程I/O线
(9)两个16位定时器/计数器
(10)5个中断源
(11)可编程串行通道
(12)低功耗的闲置和掉电模式
(13)片内振荡器和时钟电路
图3AT89C51单片机引脚图
4.1.2四位七段数码管
四个数码管共用a~dp这8根数据线,有四个公共端,共有12个引脚。
本设计采用一个共阴的四位数码管,引脚图如图4。
图4四位数码管引脚图
4.2设计原理图
图5硬件电路原理图
4.3信号灯的控制及控制编码
由图1所示可知,P1.0~P1.2控制东西方向的信号灯(用A线表示);P1.3~P1.5控制南北方向的信号灯(用B线表示)。
6只发光二级管是以共阳极连接,所以相应口线输出高电平则“信号灯”灭;口线输出低电平则“信号灯”亮。
为了实现上述控制要求,P1口共输出4中控制吗,用表1.1表示。
表1.1“信号灯”控制码表
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
控制码
状态
说明
空
空
B线黄灯
B线
绿灯
B线
红灯
A线
黄灯
A线
绿灯
A线
红灯
1
1
1
0
1
1
1
0
EEH
B线放行,A线禁行
1
1
0
1
1
1
1
0
DEH
B线警告,A线禁行
1
1
1
1
0
1
0
1
F5H
B线禁行,A线放行
1
1
1
1
0
0
1
1
F3H
B线禁行,A线警告
4.4设计流程图
按上表所示的控制码编程实现交通“信号灯”的模拟控制,流程图如图6所示。
图6“信号灯”的控制流程图
四、心得体会
通过这次交通灯的课程设计,我得到了一次用专业知识、专业技能分析和解决现实问题的能力。
我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。
综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。
在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。
通过这次单片机技术在生活中的简单应用的设计,我学到了不少实用的知识,更重要的是,在设计的过程,学到了思考问题的方法,设计过程中培养了我在实践中研究问题,分析问题和解决问题的能力以及培养了良好的工程素质和科学道德,例如团队精神、独立思考等;提高了自己动手能力,培养理论联系实际的作风。
还有动手这次实验,使单片机原理和接口技术这门课的一些理论知识与实践相结合,更加深刻了我对单片机原理和接口技术这门课的认识,巩固了我的理论知识。
还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能力得到了很好锻炼,能够为我们以后的工作于学习打下基础。
最后,对在这个设计中帮助我们的所有同学和各位指导老师再次表示衷心的感谢。
5、附录
参考源程序
#include
#defineuintunsignedint
#defineucharunsignedchar
uchartime,aa,qian,bai,shi,ge,i;
sbithuanga=P1^2;
sbithuangb=P1^5;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodetabledeng[]={0xee,0xde,0xf5,0xf3};
voiddisplay(ucharqian,ucharbai,ucharshi,ucharge);
voiddelay(uintz);
voidinit();
voidmain()
{
init();
while
(1)
{
P1=tabledeng[0];
time=20;
while(time!
=0)
display((time+3)/10,(time+3)%10,time/10,time%10);
P1=tabledeng[1];
time=3;
while(time!
=0)
{for(i=0;i<50;i++)
display(time/10,time%10,time/10,time%10);
huangb=~huangb;
}
P1=tabledeng[2];
time=23;
while(time!
=3)
display((time-3)/10,(time-3)%10,time/10,time%10);
P1=tabledeng[3];
time=3;
while(time!
=0)
{
for(i=0;i<50;i++)
display(time/10,time%10,time/10,time%10);
huanga=~huanga;
}
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(ucharqiang,ucharbai,ucharshi,ucharge)
{
P0=table[qiang];
T0=0;TXD=1;INT1=1;INT0=1;
delay
(1);
P0=table[bai];
T0=1;TXD=0;INT1=1;INT0=1;
delay
(1);
P0=table[shi];
T0=1;TXD=1;INT1=0;INT0=1;
delay
(1);
P0=table[ge];
T0=1;TXD=1;INT1=1;INT0=0;
delay
(1);
}
voidinit()
{
INT1=1;INT0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)
{
aa=0;
if(time!
=0)
time--;
}
}