基于AT89S52单片机交通灯控制系统的设计.docx
《基于AT89S52单片机交通灯控制系统的设计.docx》由会员分享,可在线阅读,更多相关《基于AT89S52单片机交通灯控制系统的设计.docx(30页珍藏版)》请在冰豆网上搜索。
基于AT89S52单片机交通灯控制系统的设计
基于AT89S52单片机交通灯控制系统的设计
电子线路课程设计
(2)
论文(设计)题目:
其于AT89S52单片机交通灯操纵系统的设计
系别:
物理与电子工程系
专业:
电子信息工程
年级:
2007级
学生姓名:
宾华
指导教师:
邹清平
时间:
2010年6月20日
摘要………………………………………………………………………………4
关键词……………………………………………………………………………4
一、设计任务与要求…………………………………………………………4
二、方案设计与论证…………………………………………………………4
方案一………………………………………………………………………4
方案二……………………………………………………………………5
方案三………………………………………………………………………5
三、硬件单元电路设计与参数运算…………………………………………5
1.时钟电路模块……………………………………………………………5
2.复位电路模块……………………………………………………………6
3.主控电路模块…………………………………………………………6
4.交通灯操纵模块…………………………………………………………7
5.时刻显示电路模块………………………………………………………7
6.紧急通车电路模块………………………………………………………8
四、软件设计与流程图……………………………………………………………9
五、总原电路及元器件清单………………………………………………………10
1.总原理图……………………………………………………………………10
2.PCB制板图…………………………………………………………………10
3.整体电路仿真图以及仿真结果分析…………………………………11
4.元件清单……………………………………………………………………12
六、安装与调试……………………………………………………………………12
1.电路安装……………………………………………………………………12
2.电路调试……………………………………………………………………12
3.软件调试……………………………………………………………………13
七、性能测试与分析………………………………………………………………13
八、结论与心得……………………………………………………………………13
九、参考文献………………………………………………………………………14
十、致谢……………………………………………………………………………14
十一、程序清单……………………………………………………………………14
摘要:
近年来随着科技的飞速进展,单片机的应用正在不地走向深入,同时带动传统操纵检测日新月益更新。
在实时检测和自动操纵的单片机应用系统中,单片机往往是作为一个核心部件来使用,单片机方面知识是不够的,还应按照具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
交通信号灯的显现,使交通得以有效管制,关于疏导交通流量、提升道路通行能力,减少交通事故有明显成效。
本系统采纳单片机AT89S52为中心器件来设计交通灯操纵器,系统有用性强、操作简单、扩展性强。
关键词:
1、单片机最小系统。
2、红、黄、绿LED交通灯。
3、紧急通车开关。
一、设计任务与要求
用AT89S52单片机操纵一个交通信号灯系统,晶振采纳12MHZ。
设A车道与B车道交叉组成十字路口,A是主道,B是支道。
设计要求如下:
用发光二极管模拟交通信号灯,用按键开关模拟车辆检测信号。
正常情形下,A、B两车道轮番放行,A车道放行50s,其中5s用于警告;B车道放行30s,其中5s用于警告。
交通繁忙时,交通信号灯操纵系统应有手控开关,可人为地改变信号灯的状态,以缓解交通拥挤状况。
在B车道放行期间,若A车道有车而B车道无车,按下开关K1使A车道放行15s;在A车道放行期间,若B车道有车而A车道无车,按下开关K1使B车道放行15s。
有紧急车辆通过时,按下K2开关使A、B车道均为红灯,禁行20s。
二、方案设计与论证
方案一:
交通操纵系统要紧操纵A、B两车道的交通,以AT89S52单片机为核心芯片,通过操纵三色LED的亮灭来操纵各车道的通行;另外通过2个按键来模拟各车道有无车辆的情形和有紧急车辆的情形。
按照设计要求,制定总体设计思想如下:
1、正常情形下运行主程序,采纳0.5S延时子程序的反复调用来实现各种定时时刻。
2、一道有车而另一道无车时,采纳外部中断1执行中断服务程序,并设置中断为低优先级中断。
3、有紧急车辆通过时,采纳外部中断0执行中断服务程序,并设置中断为高优先级中断,实现二级中断嵌套。
该电路具有电路简单,设计方便,显示亮度高,耗电较少,也专门的可靠等点。
总体设计框图如图1所示:
图1系统整体设计方框图
方案二:
采纳标准AT89S52单片机作为操纵器;通行倒计时显示采纳3位数码管;主、次通道及行人指示灯采纳双色高亮发光二极管;LED显示采纳动态扫描,以节约端口。
紧急车辆通行采纳实时中断完成,识别方法采纳手动按钮。
按以上系统构架设计,单片机端口资源刚好满足要求。
该系统具有电路简单,设计方便,显示亮度高耗电少,可靠性高,然而占用单片机资源太多了。
整个电路组成框图如图2所示。
图2
方案三:
采纳AT89C2051单片机作为操纵器,通行倒计时、主、次车道及行人通行指示采纳单块LCD液晶点阵显示器。
这种方案设计占用单片机的端口最少,硬件也最少,耗电也最少;尽管显示图案也专门精美,但由于亮度太暗,晚上还得必须开背光灯,因此较少采纳。
通过以上综合分析能够看出,方案一个有综合设计优点,因此都市道口交通灯操纵系统模型采纳方案一设计。
三、硬件单元电路设计与参数运算
1、时钟电路模块
时钟电路由一个晶体振荡器12MHZ和两个30pF的瓷片电容组成。
时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。
单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯独的时钟信
号操纵下严格地工作。
其电路如图3所示:
图3时钟电路模块
2、复位电路模块
复位电路是使单片机的CPU或系统中的其他部件处于某一确定的初始状态,并从这状态开始工作,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱逆境,也需按复位电路以重新启动。
本设计采纳的是按键复位电路。
其电路如图4所示:
图4复位电路
3、主操纵系统模块
主操纵器采纳AT89S52,是ATMEL公司生产的一款性能稳固的8位单片机。
AT89S52具有1个8KB的FLASH程序储备器,1个512字节的RAM,4个8位的双向可位寻址I/O端口,3个16位定时/计数器及1个串行口和6个向量二级中断结构。
单片机的P0口分别用于操纵南北及东西的通行灯,P2口和P3^4-P3^7口用于4组4位LED计时器的操纵,紧急车辆通行时使用外中断0(P3^2)和外中断1(P3^3),进行手动按键,即可转换。
其主控电路如图5所示:
图5主操纵系统模块
4、交通灯输出操纵模块
道口交通灯指示采纳高亮度红、黄、绿发光二极管进行提示。
其图如图6所示
图6LED显示模块
当R=220欧时,按公式A=(5-1.8)/R运算,电路中的电流大小应为A=14.545mA.由于每个路口的通行双向指示处理相同,因此每个端口应具有3A的吸取电流能力。
5、时刻显示电路模块
道口通行剩余时刻采纳高亮红色7段LED发光数码管显示,采纳共阳数码管,如用单片机吸取电流驱动,列扫描驱动使用三极管,按每段6mA电流运算,全显示字形“8”时,每个数码需6mA*8=48mA,由于时刻显示每个道口相同,共需要电流192mA,因此设计中也采纳了中功率三极管8550.其显示电路如图7所示:
6、紧急通车电路模块
为了实现此功能,利用单片机中断达到目的。
利用一个手动按钮开关接至单片机外部中断0,同时在软件设计时将其设定为最高优先级,当其按下时,四方全为红灯,同时将中断位置的PSW、ACC进栈爱护,当其计时完了之后,回到原先的位置进行执行。
再利用一个手动按钮接至单片机外部中断1当其按下时,如果是东西道是红灯,而南北道是绿灯,则将其置为东西是绿灯,南北是红灯;如果是东西道是绿灯,而南北道是红灯,则将其置为东西是红灯,南北是绿灯。
两种情形差不多上执行完后,回到断点处连续执行。
其电路如图8所示:
图7数码管显示模块
图8按键操纵电路
三、软件设计与流程图
1、软件的设计
主程序采纳查询方式定时,调用0.5S延时子程序的次数,从而猎取交通灯的各种时刻。
子程序采纳定时器1方式1查询式定时,定时器定时50ms,确定50ms循环20次,从而获得1S的延时时刻。
有车车道的放行的中断服务程序第一要爱护现场,因而需用到延时子程序,子程序采纳定时器0方式1查询式定时,定时器定时50ms,确定50ms循环20次,从而获得1S的延时时刻,爱护现场时还需关中断,以防止高优先级中断(紧急车辆通过所产生的中断)显现导致程序纷乱。
开中断,由软件查询外中断1,判别哪一道有车,再按照查询情形执行相应的服务。
待交通灯信号显现后,保持15S的延时,然后,关中断,复原现场,再开中断返回主程序。
紧急车辆显现时的中断服务程序也需要爱护现场,但无须关中断(因其为高优先级中断),然后执行相应的服务,待交通灯信号显现后延时20S,确保紧急车辆通过交叉路口,然后,复原现场,返回主程序。
2、程序流程图
主程序有车车道放行时的中断服务程序(外中断1)
关中断
紧急情形时的中断服务程序(外中断0)
五、总原电路及元器件清单
1.总原理图如图9所示
图9总的原理图
PCB制板图如图10所示
图10PCB板
3.整体电路仿真图以及仿真结果分析
(1)、整体电路仿真图如图11所示
图11仿真图
(2)、仿真结果分析
上电或按键复位后数码管无显示,东西、南北的灯都为红灯亮;开始工作后主车道绿灯亮次车道红灯亮50S,在那个地点选定它亮到5S时,主车道绿灯灭,黄灯亮;5S后主车道变为红灯亮次车道绿灯亮30S,在那个地点选定它亮到5S时,次车道黄灯亮,5S后返回重新执行。
按紧急车辆按钮红灯全亮显示时刻为20S;有车车道放行按钮按下时,若主车道是绿灯、次车道是红灯,则把主车道变为红灯、次车道变为绿灯,显示15S;若主车道是红灯、次车道是绿灯,则把主车道变为绿灯、次车道变为红灯,显示15S;
4、元件清单
如下表所示:
元件名称
型号
数量/个
用途
单片机
AT89S52
1
操纵核心
晶振
12MHZ
1
晶振电路
电容
30pF
2
晶振电路
电解电容
10uF
1
复位电路
电阻
5.1K
1
复位电路
发光二极管
LED
12
红、黄、绿灯
集成块
74LS08
1
按键电路
电阻
220Ω
13
LED限流
电阻
470Ω
8
数码管电路
电阻
1K
7
数码管驱动、按键电路
四位共阳数码管
GC-3461BS
1
显示电路
微动开关
3
按键电路
三级管PNP
8550
4
数码管驱动电路
六、安装与调试
1.电路安装
打好板后,按照所画的PCB板,一一的把各个元件焊接到所制的板上即可。
2.电路调试
电路调试是利用开发系统、差不多测试仪器(万用表、示波器等),检查系统硬件中存在的故障。
其调试可分为静态调试与动态调试两步进行。
静态调试是在系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑咨询的连接点,再检测各种电源与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有的插座或是器件的电源端是否符合要求的值。
第四步:
是联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试
动态调试是在系统工作的情形下发觉和排除系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一样方法是由近及远、由分到合。
由分到合是指第一按逻辑功能将系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从系统中去掉,如此能够将故障范畴限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及的分层,然后分层调试。
调试时,仍采纳去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
3.软件调试
软件调试是通过对拥护程序的C编程、连接、执行发觉程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
运行程序后,编辑,查看程序是否有逻辑的错误。
七、性能测试与分析
系统做好的,进行系统的完整调试。
按照所设计的流程图,用单片机跟踪模式程序进行调试,配合有关的硬件动作,能够观看LED的变化和数码管的显示是否正确。
同样明确延时时刻长短、跳转位置及调用的程序功能。
通过观看各检测,我能够看到整个系统的功能都能达到我的设计要求。
八、结论与心得
以往每次做课程设计,都会感受自己收成许多。
这次单片机课程设计也不例外。
做课程设计是为了让我们对平常学习的理论知识与实际操作相结合,在理论和实验教学基础上进一步巩固已学差不多理论及应用知识并加综合提升,学会将知识应用于实际的方法,提升和解决咨询题的能力。
第一,在编写软件中,在此过程中我更为熟练得把握汇编语言各种指令的使用方法,把握了keil软件的使用。
第二,在软件调试过程中,使我又一次复习了keil和proteus联合使用的方法。
在调试时曾经遇到数码管倒计时显示时刻两位不能同时显示,后来通过查找资料持续调试才领会到原先在显示的过程中要循环显示才能使得显示稳固下来。
第三,在做原理图和PCB的过程中,使我进一步把握了proteus软件的使用方法。
再次熟悉了各种作图工具的应用,而且培养了我在设计原理图时的一些技巧和好的习惯。
第四,在做实物的过程中,培养了我认真耐心的工作态度。
我在做板子过程中,第一由于我的布线比较紧密加上孔和焊盘过小使得在打孔是显现刮断线以及在焊接的时候显现了虚焊和联焊等咨询题,后来我不得不重新再做一次板;二是由于焊接前没检查断线咨询题,使得我的PCB在加载程序后只有灯亮,而数码管却不亮,后来通过我的认真检查,原先是在给三级管供电的线有断,将其连接起来后,就能显示了,从而得以成功。
总之,通过这次课程设计,我把握了用单片机设计交通灯的基体方法,增强了我查找咨询题,解决咨询题的能力。
培养了我的设计思维,此次课程设计的成功不仅关心我更好地把握书本知识,专门重要的是增强了我的自信,培养了我独立摸索的能力。
然而此次设计不中之处是不能实现左右弯灯,不有人行道操纵灯,不能进行流量操纵。
九、参考文献
[1]《单片机基础》.李广弟、朱月秀、冷祖祁.北京航空航天大学出版社。
[2]华成英童诗白,《模拟电子技术基础(第四版)》,高等教育出版社。
[3]康华光,《电子技术基础数字部分(第五版)》,高等教育出版社。
[4]《51单片机C语言常用模块与综合系统设计实例精讲》.于永、戴佳、常江.电子工业出版社。
[5]《单片机课程设计指导》.杨居义.清华大学出版社。
[6]《零基础学单片机C语言程序设计》.赵建领、薛园国.机械工业出版社。
十、致谢
通过此次毕业设计,我在指导老师邹清平的精心指导和严格要求下,获得了丰富的理论知识,极大地提升了实践能力,并对当前电子领域的研究状况和进展方向有了一定的了解,单片机领域这对我今后进一步学习电子方面的知识有极大的关心。
另外,此次毕业设计还获得了我们同学的大力支持。
在此我忠心感谢邹清平以及各位同学的指导和支持。
在以后的工作和学习中,我将以更好的成绩来加报各位老师和同学。
十一、程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
#definetime50000
#defineon0
#defineoff1
sbitRED_ZHU=P0^0;//南北红灯
sbitYELLOW_ZHU=P0^1;//南北黄灯
sbitGREEN_ZHU=P0^2;//南北绿灯
sbitRED_ZHI=P0^3;//东西红灯
sbitYELLOW_ZHI=P0^4;//东西黄灯
sbitGREEN_ZHI=P0^5;//东西绿灯
sbitP23=P3^4;
sbitP22=P3^5;//东西方向数码管位选
sbitP21=P3^6;
sbitP20=P3^7;//南北方向数码管位选
sbitint0_key=P3^2;
sbitint1_key=P3^3;
voiddisplay1(uchar,uchar);
voiddisplay2(uchar,uchar);
voiddelayms(uintk);
uchartemp1,temp2,temp3,temp4,temp5,temp6;
/*===============倒计时=========================*/
ucharN=50,Y=45,Z=50,M=75,G=80,U=80;
ucharC50ms,t0;
ucharseg=1;
ucharflag=0,led_data_temp;
voidInitialT1(void)
{
TMOD=0x11;//定时器0,1工作在方式1
TH1=(65536-time)/256;//相当于(65536-time)/256;
TL1=(65536-time)%256;//初值为time(50ms)
TR1=1;//开定时器1中断
ET1=1;//承诺定时器1中断
ET0=1;
TH0=(65536-time)/256;
TL0=(65536-time)%256;
EX0=1;//承诺外部中断0
IE0=1;//启动外部中断0
PX0=1;
EX1=1;
IE1=1;
EA=1;//开总中断
}
voidint0(void)interrupt0//外中断0
{
flag=0;
led_data_temp=P0;
t0=20;
if(!
int0_key)
{
delayms(10);
if(!
int0_key)
{
while(!
int0_key);
TH0=(65536-time)/256;
TL0=(65536-time)%256;
TR1=0;
TR0=1;
EX0=0;
EX1=0;
C50ms=0;
}
}
}
voidint1(void)interrupt2//外部中断1
{
t0=15;
flag=1;
led_data_temp=P0;
if(((RED_ZHU==0)&&(GREEN_ZHI==0))||((YELLOW_ZHI==0)&&(RED_ZHU==0)))
{
P0=0xff;
GREEN_ZHU=0;
RED_ZHI=0;
}
else//if((RED_ZHI==0)&&(GREEN_ZHU==0))
{
P0=0xff;
GREEN_ZHI=0;
RED_ZHU=0;
}
if(!
int1_key)
{
delayms(10);
if(!
int1_key)
{
while(!
int1_key);
TH0=(65536-time)/256;
TL0=(65536-time)%256;
TR1=0;
TR0=1;
EX0=0;
EX1=0;
C50ms=0;
}
}
}
voidISRT0(void)interrupt1//定时器0中断服务子程序
{
temp1=N,temp2=Y,temp3=Z,temp4=M,temp5=G,temp6=U;
TH0=(65536-time)/256;
TL0=(65536-time)%256;//重装初值time
YELLOW_ZHU=1;//如果在黄5S时进行熄灭黄灯
YELLOW_ZHI=1;
if(!
flag)
{
P0=0xf6;
}
C50ms++;
if(C50ms>19)
{
t0--;
C50ms=0;
}
if(t0==0)
{
P0=led_data_temp;
N=temp1,Y=temp2,Z=temp3,M=temp4,G=temp5,U=temp6;
TR0=0;//禁止定时器1中断
TR1=1;//开定时器1中
EX1=1;
//EX0=1;
C50ms=0;
return;
}
}
voidISRT1(void)interrupt3//定时器1中断服务子程序
{
TH1=(65536-time)/256;
TL1=(65536-time)%256;//重装初值time
C50ms++;
if(C50ms>19)
{
N--;
M--;
Y--;
Z--;
G--;
U--;
C50ms=0;
}
}
/*=================延时=======================*/
voidDelay10uS(ucharsecond)
{
uinti;
while((second--)!
=0)
{