单片机控制交通灯控制系统设计基于Proteus仿真概诉.docx
《单片机控制交通灯控制系统设计基于Proteus仿真概诉.docx》由会员分享,可在线阅读,更多相关《单片机控制交通灯控制系统设计基于Proteus仿真概诉.docx(17页珍藏版)》请在冰豆网上搜索。
单片机控制交通灯控制系统设计基于Proteus仿真概诉
单片机控制交通灯控制系统设计
目录
引言……………………………………………………………-5-
第1章概述-5-
1.1单片机认识-5-
1.2单片机的应用-5-
1.3设计任务-6-
第2章系统总体方案及硬件设计-6-
2.1交通管理的方案-6-
2.2总体硬件设计-6-
2.3系统时钟电路-7-
2.4系统复位电路-7-
2.5数码管显示电路-7-
2.6路灯指示电路-8-
2.7按键电路设计-9-
第3章软件系统设计-10-
3.1设计思路及关键技术-10-
3.2软件流程-10-
3.3 交通灯的设计程序说明-11-
3.4延时函数-11-
3.5延时函数-12-
3.6显示函数-12-
3.7定时器0中断函数-13-
第4章Proteus软件仿真-14-
4.1Proteus软件仿真-14-
4.2南北路灯切换时仿真-14-
4.3紧急情况下的仿真-15-
4.4东西紧急情况下的仿真-15-
第5章心得体会-16-
参考文献-16-
附1源程序代码-17-
单片机控制交通灯控制系统设计
摘要
交通灯是我们日常出行时经常看见的交通控制系统,极大地改善了我们的日常出行。
本设计是根据我们所学习的单片机课程,按照大纲要求对我们进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。
掌握单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。
当今世界的发展是以科学技术为基础的,微控技术在生产中所占的比重也越来越大。
单片机的出现是近代计算机技术发展史上的一个重要里程碑。
近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。
关键词:
单片机;交通灯;Proteus仿真软件
引言
作为一种交通规则的指示,交通灯它起着及其重要的作用。
从最初的单车道到现在的四车道八车道等,交通指示的自动控制也越来越完善。
它不再仅仅拥有交通指示的作用,还有其它特殊情况的处理,比如对闯红灯的肇事者进行的监督,紧急救护车的通过时保持道路畅通,等等都需要非常的处理,这也是对交通灯功能的新要求。
而且,也从最初的只有红,黄,绿三种灯的指示到现在的倒计时电子显示,让人们从单一的信号判别到时间的准确明了有了进一步认知。
这都表明交通灯的研究还具有它实际的意义。
本论文采用AT89C51单片机设计一个交通灯控制系统,通过C语言实现其交通控制功能,利用PROTEUS仿真软件进行仿真,达到本论文目的。
第1章概述
1.1单片机认识
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
图1-1AT89C52芯片
1.2单片机的应用
单片机是应工业测控需要而产生的,最能反映其功能及形态的名称是在一个应用系统中,Single-chipMicro-controller。
按照测控系统的特点和要求,单片机的应用可分为单机应用和多机应用两大类。
我们这次要完成的单片机课程设计就是它的单机应用,下面在介绍一下单片机在单机应用领域内的主要内容。
(1)智能产品
单片机与传统机械产品相结合,使传统机械产品结构简化,控制智能化,购成新一代机电一体化产品。
目前,利用单片机构成的智能产品已广泛应用于家用电器、办公设备、数控机床、纺织机械、工业设备等行业。
(2)智能仪表
目前,各种传感器、变送器、控制仪表已普遍采用单片机应用系统。
它集测量、处理、控制功能于一体,具有各种智能化功能,如存储、数据处理、查找、判断、联网和语音等功能。
单片机构成的智能仪表,能使仪表具有数字化、智能化、多功能化、综合化、柔性化等优点,赋予测量仪表以崭新的面貌,使传统的仪器、仪表发生根本性的变革,它代表了仪器仪表的发展趋势。
(3)测控技术
用单片机构成的各种工业控制系统中的数据采集系统具有工作稳定可靠、抗干扰能力强的优点,如炉温恒温控制系统、电镀生产自动控制系统等。
(4)智能接口
在计算机系统,特别是较大型的工业测控系统中,除通用外部设备外,还由许多外部通信、采集、多路分配管理、驱动控制等接口。
这些外部设备与接口如果完全由主机进行管理,势必会造成主机负担过重,运行速度降低,接口的管理水平也不可能提高。
如果用单片机进行接口的控制与管理,单片机与主机可并行加工处理,可以大量降低接口的通信密度,极大的提高了接口控制管理水平。
在一些通用计算机外部设备上,已实现了单片机的键盘管理、打印机控制、绘图仪控制、硬盘驱动控制等。
1.3设计任务
(1)东西方向为绿灯22S倒计时,此时南北红灯倒计时30S;
(2)东西方向为绿灯5S倒计时时,绿灯闪烁,南北红灯保持;
(3)东西方向绿灯倒计时结束后,变为3S黄灯倒计时;
(4)东西方向黄灯3S结束后,东西方向变为红灯30S倒计时,南北方向变为绿灯22S倒计时。
第2章系统总体方案及硬件设计
2.1交通管理的方案
A、B两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为A、B两干道的公共停车时间。
设A道比B道的车流量大,指示灯燃亮的方案如表2-1。
表2-1
东西绿灯:
22S
东西绿闪:
5S
东西黄灯:
3S
东西红灯:
30S
南北红灯:
30S
南北绿灯:
22S
南北绿闪:
5S
南北黄灯:
3S
说明:
(1)当东西方向为绿灯时,此时南北方向为红灯;
(2)当东西方向绿灯闪烁时,南北方向依旧保持红灯;
(3)当东西方向绿灯闪烁完毕时,变为黄灯,南北方向依旧是红灯;
(4)当东西方向黄灯结束后,变为红灯,南北方向变为绿灯;
(5)南北方向绿灯闪烁时,东西方向依旧保持红灯;
(6)当南北方向绿灯闪烁完毕时,变为黄灯,东西方向依旧是红灯;
(7)当南北方向黄灯结束后,变为红灯,东西方向变为绿灯;
(8)重复
(1)。
2.2总体硬件设计
交通灯控制系统的结构框图如图2-2-1所示。
总体设计方案共有五个部分组成,分别是:
单片机AT89C52、红、绿、黄灯显示电路、LED数显时间电路、晶振及复位控制电路。
在进行仿真调试过程中,程序运行正确,五个部分就同时工作,从而实现了交通灯的基本功能及调时功能。
系统的总的原理框图如图2-1所示。
图2-1硬件设计方案
2.3系统时钟电路
晶振采用了内部时钟信号源的方式。
对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。
但由于图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本系统的实际应用中一定要注意正确选择参数(30±10PF),并保证对称性(尽可能匹配)。
图2-2系统时钟电路
2.4系统复位电路
复位电路我采用上电+按钮复位的方式。
当开关打开时,RST通过电阻接地,当有开关闭合时由于电容的作用使电源VCC通过电阻施加在单片机复位端RST上,实现单片机复位。
只是可惜,在进行仿真器调试过程中,该复位电路是不起作用的。
具体电路如图2-4-1所示。
图2-3系统复位电路
2.5数码管显示电路
数码管工作原理这里我们介绍8段数码管的工作原理。
8段数码管又称为8字型数码管,分为8段:
A、B、C、D、E、F、G、DP。
其中,DP为小数点。
数码管常用的有10根管脚,每一段有一根管脚,另外两根管脚为一个数码管的公共段,两根之间相互连通。
发光二极管的发光原理,我们已经介绍过了,同理,8段LED数码管,则是在一定形状的绝缘材料上,利用不同形状点划的发光二极管组合,排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示0-9的数字。
从电路上,按数码管的接法不同又分为共阴和共阳两种。
图2-5-1是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
在设计时,为了系统图的美观,我们采用了四个方向共4个SEG-mpx2-cc的数码管组,该数码管组能够计最大数为99,用在这里简单方便,省去了连线繁琐的问题,如图2-4。
图2-4系统数码管电路
2.6路灯指示电路
在设计路灯时,采用了发光二极管代替路灯。
先介绍一下二极管,见图2-5。
二极管工作原理是单向导通,即只有正极电压高于负极电压某特定值时才会导通,而负极电压高于正极电压是不导通的。
如图2-5所示,设计思路大致是这样的:
LED.0接高电平,P2.0端接单片机的引脚控制端。
当P2.0为低电平时,二极管电路导通,发光二极管亮;当P2.0为高电平时,二极管电路截止,发光二极管不亮。
举例说明:
首先设置东西方向为绿灯,图2.5为西方绿灯控制,此时由于是绿灯,要使绿灯亮,P2.0应为低电平;当东西方向为红灯或黄灯时,绿灯灭,此时P2.0端为高电平。
图2-5发光二极管示意图
发光二极管是一种特殊的二极管,导通时会发光(发光二极管导通压降一般为1.7V~1.9V)。
此外,工作电流要满足该二极管的工作电流。
发光二极管的正负极可以用万用表进行判断,把万用表拨至二极管档或电阻挡,用两个表笔分别接触二极管的两个引出脚。
若发光二极管被点亮,则与红表笔相接的引出脚为正极。
从外观上看,发光二极管的正极引脚的长度也比较长。
一般发光二极管与I/O端口之间都会再连接一个电阻,其作用在于限制通过二极管的电流,从而达到减少功耗或者满足端口对最大电流的限制。
一般发光二极管的点亮电流为5mA至10mA。
路灯设计时采用了红、黄、绿三种发光二级管。
如图2-6所示。
图2-6路灯设计电路
第3章软件系统设计
3.1设计思路及关键技术
一个完整的交通灯相当于一个简单的单片机系统,该系统有交通灯设置电路、单片机、显示电路等构成。
单片机是集成的IC芯片,只需根据实际设计要求选型。
其他部分都需要根据应用要求和性能指标自行设计。
首先了解实际交通灯的变化规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1南北绿灯通车,东西红灯。
过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。
再转状态3,东西绿灯通车,南北红灯。
过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。
最后循环至状态1。
3.2软件流程
系统总体流程图如图3-2-1所示:
图3-2-1整体软件设计流程图
3.3交通灯的设计程序说明
这部分中定义了一些全局变量的数组和变量以及位标志,只是些定义的东西不需要画流程图了。
这部分程序如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharnum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//七段数码管0~9的对应电平
uchartime[4];//time[]={南北灯十位,南北灯个位,东西灯十位,东西灯个位}
uchart3,t2,t1,t0;
//单独设置两个绿灯对应端口便于设置闪烁
sbitNSG=P2^3;//南北绿灯
sbitEWG=P2^0;//东西绿灯
3.4延时函数
延时函数的流程图如图3-4-1。
延时程序如下:
voiddelay(uintms)//延迟函数,功能为以毫秒为单位延迟。
{
uinti;
while(ms--)
{
for(i=0;i<81;i++);
}
}
3.6时间函数
时间函数如下:
voidtimer(uchari)//时间设置函数
{
switch(i)
{
case0:
{time[3]=num[t3];time[2]=num[--t2];time[1]=num[t1];time[0]=num[--t0];break;}
//代表把time数组里的四个表示时间的电平设为对应t3、t2、t1、t0的时间的电平
case1:
{t3=2;t2=8;t1=3;t0=1;break;}//南北红灯东西绿灯
case2:
{t3=0;t2=4;t1=0;t0=4;break;}//黄灯
case3:
{t3=3;t2=1;t1=2;t0=8;break;}//南北绿灯东西红灯
}
if(t2==0){t2=10;t3--;}
if(t0==0){t0=10;t1--;}
}
3.7数码管控制函数
数码管控制函数如下:
voidTR(ucharGr)//数码管时间控制函数,通过片选将两个方向四个数码管作为一组进行刷新
{
uinti,j;
for(i=1;i<=25;i++)
{
for(j=0;j<=3;j++)
{
P0=~(1<}
if(Gr==1&&i==12)EWG=0;
if(Gr==1&&i==24)EWG=1;
if(Gr==2&&i==12)NSG=0;
if(Gr==2&&i==24)NSG=1;
}
}
3.8主函数
主函数用于调用各个子函数,确保程序按顺序运行:
voidmain()
{
delay(500);
while
(1)
{
uinti;
timer
(1);P2=0x1e;
for(i=1;i<=22;i++){timer(0);TR(0);}
for(i=1;i<=5;i++){timer(0);TR
(1);}
timer
(2);P2=0x1d;
for(i=1;i<=3;i++){timer(0);TR(0);}
timer(3);P2=0x33;
for(i=1;i<=22;i++){timer(0);TR(0);}
for(i=1;i<=5;i++){timer(0);TR
(2);}
timer
(2);P2=0x2b;
for(i=1;i<=3;i++){timer(0);TR(0);}
}
}
第4章Proteus软件仿真
4.1Proteus软件介绍
Proteus软件是英国LabCenterElectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前比较好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。
4.2仿真结果
(1)东西绿灯,南北红灯
图4-1东西绿灯,南北红灯
(2)东西黄灯,南北红灯
图4-2东西黄灯,南北红灯
(3)东西红灯,南北绿灯
图4-3东西红灯,南北绿灯
4.3整体电路图
图4-4整体电路图
第5章心得体会
通过此次论文设计让我能够亲身参与电子产品的设计使我更加深深地体会到:
现代的社会是信息的社会,很多与人们生活紧密相关的产品都是电子产品。
要熟练地掌握单片机的基本知识,这样才能对试验中出现的问题进行分析解决。
通过这次对交通灯系统的设计,我们掌握了设计一个实用装置电路的基本方法和基本步骤,掌握了实用装置工作的基本原理,实际解决了设计中出现的问题,增强了寻找问题,解决问题的能力。
此次电子设计的成功不仅帮助我们更好地掌握书本知识,尤其重要的是增强了我们的自信,培养了我们独立思考的能力!
通过这次的论文设计,我学到了很多东西,让我重新认识自己,收益匪浅,并对我以后踏上社会后会有个知识铺垫。
本知识并会善于应用,还要学会查阅资料,对以前学过的知识不清楚的地方还要进行复习,实在搞不明白的地方要向老师或同学请教,这样才可能做出一个比较不错的设计。
在这里我要感谢我们的指导老师,非常感谢老师的指导和帮助。
希望以后还能参加这样的课程设计。
我想我会做的更好的。
参考文献
[1]杨栓科,徐正红等.模拟电子技术基础[M].北京:
高等教育出版社,2007.5.
[2]张克农,段军政等.数字电子技术基础[M].北京:
高等教育出版社,2008.1.
[3]申忠如,申淼,谭亚丽.MCS-51单片机原理及系统设计[M].西安:
西安交通大学出版社,2008.3.
[4]戴仙金.51单片机及其C语言程序开发实例[M].北京:
北京大学出版社,2006.1.
[5]范立南,谢子殿.单片机原理及应用教程[M].北京:
北京大学出版社,2008.2.
[6]胡汉才.单片机原理及接口技术[M].北京:
清华大学出版社,1996.7.
[7]薛钧义,张彦斌.MCS-51/96系列单片微型计算机及其应用[M].西安:
西安交通大学出版社,1997.8.
[8]高涛等.C语言程序设计[M].西安:
西安交通大学出版社,2007.2.
[9]DavidConger.软件开发:
编程与设计(C语言版).朱剑平.北京:
清华大学出版社,2006.8.
[10]H.M.Deitel,P.J.Deitel.C程序设计教程.薛万鹏译.北京:
机械工业出版社,2000.7.
附1源程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharnum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//七段数码管0~9的对应电平
uchartime[4];//time[]={南北灯十位,南北灯个位,东西灯十位,东西灯个位}
uchart3,t2,t1,t0;
//单独设置两个绿灯对应端口便于设置闪烁
sbitNSG=P2^3;//南北绿灯
sbitEWG=P2^0;//东西绿灯
voiddelay(uintms)//延迟函数,功能为以毫秒为单位延迟,待微调,不要在意细节。
{
uinti;
while(ms--)
{
for(i=0;i<81;i++);
}
}
voidtimer(uchari)//时间设置函数
{
switch(i)
{
case0:
{time[3]=num[t3];time[2]=num[--t2];time[1]=num[t1];time[0]=num[--t0];break;}
//代表把time数组里的四个表示时间的电平设为对应t3、t2、t1、t0的时间的电平
case1:
{t3=2;t2=8;t1=3;t0=1;break;}//南北红灯东西绿灯
case2:
{t3=0;t2=4;t1=0;t0=4;break;}//黄灯
case3:
{t3=3;t2=1;t1=2;t0=8;break;}//南北绿灯东西红灯
}
if(t2==0){t2=10;t3--;}
if(t0==0){t0=10;t1--;}
}
voidTR(ucharGr)//数码管时间控制函数,通过片选将两个方向四个数码管作为一组进行刷新
{
uinti,j;
for(i=1;i<=25;i++)
{
for(j=0;j<=3;j++)
{
P0=~(1<}
if(Gr==1&&i==12)EWG=0;
if(Gr==1&&i==24)EWG=1;
if(Gr==2&&i==12)NSG=0;
if(Gr==2&&i==24)NSG=1;
}
}
voidmain()
{
delay(500);
while
(1)
{
uinti;
timer
(1);P2=0x1e;
for(i=1;i<=22;i++){timer(0);TR(0);}
for(i=1;i<=5;i++){timer(0);TR
(1);}
timer
(2);P2=0x1d;
for(i=1;i<=3;i++){timer(0);TR(0);}
timer(3);P2=0x33;
for(i=1;i<=22;i++){timer(0);TR(0);}
for(i=1;i<=5;i++){timer(0);TR
(2);}
timer
(2);P2=0x2b;
for(i=1;i<=3;i++){timer(0);TR(0);}
}
}