基于单片机控制的交通灯设计.docx
《基于单片机控制的交通灯设计.docx》由会员分享,可在线阅读,更多相关《基于单片机控制的交通灯设计.docx(20页珍藏版)》请在冰豆网上搜索。
![基于单片机控制的交通灯设计.docx](https://file1.bdocx.com/fileroot1/2023-2/1/97897a65-f898-4b2f-9a99-ca382ba718eb/97897a65-f898-4b2f-9a99-ca382ba718eb1.gif)
基于单片机控制的交通灯设计
目录
1.概述1
1.1交通灯设计的背景和意义1
1.1.1交通灯的背景1
1.1.2交通灯的意义1
1.2.交通灯的发展和现状1
2.课题方案设计2
2.1系统模块结构论证2
3.系统硬件设计2
3.1总体设计2
3.2单片机运行的最小系统3
3.2.1AT89C51简介3
3.2.2、振荡电路、时钟电路和CPU时序5
3.2.3、复位状态和复位电路设计6
3.3按键扫描控制电路7
4.系统软件设计8
5.软硬件联调及调试结果9
5.1实物图(拍的时候包括正面和反面,老师进行检查时要对应)9
5.2调试结果11
6.结论11
参考文献12
附录13
附录1:
基于单片机的交通灯设计原理图13
附录2:
基于单片机的交通灯设计PCB图13
附录3:
proteus仿真图14
附录4:
基于单片机的交通灯设计C语言程序清单14
5:
基于单片机的交通灯设计元器件目录表16
1.概述
1.1交通灯设计的背景和意义
1.1.1交通灯的背景
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿灯以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
1914年,电气启动的红绿灯出现在美国。
这种红绿灯由红绿黄三色圆形的投光器组成,安装在纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
1918年,又出现了带控制的红绿灯和红外线红绿灯。
带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口
1.1.2交通灯的意义
在十字路口设置交通灯可以对交通进行有效的疏通,并为交通参与者的安全提供了强有力的保障。
但是随着社会、经济的快速发展,原先的交通灯控制系统已经不能适应现在日益繁忙的交通状况。
如何改善交通灯控制系统,使其适应现在的交通状况,成为研究的课题
1.2.交通灯的发展和现状
传统的十字路口交通控制灯,通常的做法是:
事先经过车辆流量的调查,运用统计的方法将两个方向红绿灯的延时预先设置好。
然而,实际上车辆流量的变化往往是不确定的,有的路口在不同的时段甚至可能产生很大的差异。
即使是经过长期运行、较适用的方案,仍然会发生这样的现象:
绿灯方向几乎没有什么车辆,而红灯方向却排着长队等候通过。
这种流量变化的偶然性是无法建立准确模型的,统计的方法已不能适应迅猛发展的交通现状,更为现实的需要是能有一种能够根据流量变化情况自适应控制的交通灯。
目前,大部分城市中十字路口交通灯的控制普遍采用固定转换时间间隔的控制方法。
由于十字路口不同时刻车辆的流量是复杂的、随机的和不确定的,采用固定时间的控制方法,经常造成道路有效利用时间的浪费,出现空等现象,影响了道路的畅通。
为此,采用不依赖数学模型的模糊控制方法设计交通灯控制器,能较好地解决这个问题。
另外随着众多高科技技术在日常生活的普遍应用,城市空中各种电磁干扰日益严重,为保证交通控制的可靠、稳定,选择了能够在恶劣的电磁干扰环境下正常工作的单片机是必要的。
随着科学技术的日新月异,自动化程度要求越来越高,原有的交通灯装置远远不能满足当前高度自动化的需要。
可编程控制器交通灯控制系统集成自动控制技术、计量技术、新传感器技术、计算机管理技术于一体的机电一体化产品;充分利用计算机技术对生产过程进行集中监视、控制管理和分散控制;充分吸收了分散式控制系统和集中控制系统的优点,采用标准化、模块化、系统化设计,配置灵活、组态方便。
2.课题方案设计
2.1系统模块结构论证
用单片机控制一个交通灯系统,与以往用数字逻辑电路组成的控制系统相比,用单片机组成的交通灯系统,应具有更大的灵活性,功能也更强,并具有智能性,在实际工作中是一种行之有效的方法。
因此,从理论上分析利用单片机为核心设计一个交通灯系统是可行的。
3.系统硬件设计
3.1总体设计
用单片机控制一个交通灯系统,与以往用数字逻辑电路组成的控制系统相比,用单片机组成的交通灯系统,应具有更大的灵活性,功能也更强,并具有智能性,在实际工作中是一种行之有效的方法。
因此,从理论上分析利用单片机为核心设计一个交通灯系统是可行的。
3.2单片机运行的最小系统
3.2.1AT89C51简介
(1)主电源引脚
VCC(40脚):
接+5V电源正端;
VSS(20脚):
接+5V电源地端。
(2)外接晶体引脚XTAL1和XTAL2
XTAL1(19脚):
接外部石英晶体的一端。
在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。
XTAL2(18脚):
接外部晶体的另一端。
在单片机内部,接至片内振荡器的反相放大器的输出端。
XTAL1与XTAL2借外接晶体与片内反相放大器构成振荡器。
(3)输入/输出(I/O)引脚:
P0口、P1口、P2口及P3口
P0口(39脚~32脚):
P0.0~P0.7统称为P0口。
①双向输入/输出接口,②在接有片外存储器或扩展I/O接口时,P0口分时复用为低8位地址总线和双向数据总线。
P1口(1脚~8脚):
P1.0~P1.7统称为P1口,可作为准双向I/O接口使用。
P2口(21脚~28脚):
P2.0~P2.7统称为P2口。
①准双向输入/输出接口,②在接有片外存储器或扩展I/O接口时,P2口用为高8位地址总线。
P3口(10脚~17脚):
P3.0~P3.7统称为P3口。
①准双向输入/输出接口,②P3口的每一个引脚都有第二功能。
四个I/O端口P0、P1、P2、P3的作用:
P2口负责输出高8位地址,
P0口以分时方式承担输出低8位地址信息和数据输入/输出的双重任务
P3口则作为和外设沟通的控制线,
P1口可随意用作I/O口。
(4)控制引脚
RST/VPD(9脚):
RST即为RESET,VPD为备用电源,所以该引脚为单片机的上电复位或掉电保护端。
(30脚):
(AddressLatchEnable/PROGramming)当访问外部存储器时,ALE(允许地址锁存信号)以每机器周期两次的信号输出,用于锁存出现在P0口的低8位地址。
(29脚):
(ProgramStrobeENable)片外程序存储器读选通信号输出端,低电平有效。
(31脚):
(EnableAddress/VoltagePulseofPrograming)为访问外部程序存储器控制信号。
3.2.2、振荡电路、时钟电路和CPU时序
(1)振荡电路、时钟电路。
如图1-2所示,外部时钟振荡电路由晶体振荡器和电容C1、C2构成并联谐振电路,连接在XTAL1、XTAL2脚两端。
对外部C1、C2的取值虽然没有严格的要求,但电容的大小会影响到振荡器频率的高低、振荡器的稳定性、起振的快速性。
C1、C2通常取值C1=C2=30PF左右;8051的晶振最高振荡频率为12M,AT89C51的外部晶振最高频率可到24M。
在单片机最小系统板上已经提供了晶振电路,在使用该电路时,应加上跳线帽,并插入合适的晶振。
图1-2片内振荡器等效电路和外接元件
AT89C51也可以采用外部时钟方式,外部时钟从XTAL1脚输入,XTAL2脚浮空。
可以采用我们板子上提供的外部时钟源作为单片机外部时钟输入。
(2)CPU时序
晶振(或外部时钟)的振荡频率的确定,就确定了CPU的工作时序。
这里介绍几个重要的时序概念,我们在以后的实验中还会经常涉及到:
◇振荡周期:
是指为单片机提供定时信号的振荡器的周期。
◇时钟周期:
振荡周期的两倍,前部分通常用来完成算术逻辑操作;后部分完成内部寄存器和寄存器间的传输。
◇机器周期:
在8051单片机中,一个机器周期由12个振荡周期组成。
◇指令周期:
是指执行一条指令所占用的全部时间。
一个指令周期通常含有1~4个机器周期。
机器周期和指令周期是两个很重要的衡量单片机工作速度的值。
若外接12MHz晶振时,8051的四个周期的值为:
振荡周期=1/12us;
时钟周期=1/6us;
机器周期=1us;
指令周期=1~4us。
在一些应用中,传统的8051的速度显得有些慢,因此,当前很多采用8051内核的新型单片机采用了加速处理器结构,使机器周期提高到振荡周期的6倍、4倍等等,RISC(精简指令集)的采用,更让单片机在单个时钟周期完成一条指令,使得单片机在处理速度上得到大大提高。
3.2.3、复位状态和复位电路设计
(1)复位状态
在8051单片机中,只要在单片机的RST引脚上出现2个机器周期以上的高电平,单片机就实现了复位。
单片机在复位后,从0000H地址开始执行指令。
复位以后单片机的P0~P3口输出高电平,且处于输入状态,SP(堆栈寄存器栈顶指针)的值为07H(因此,往往需要重新赋值,其余特殊功能寄存器和PC(程序计数器)都被清为0。
复位不影响内部RAM的状态。
(2)复位电路
单片机可靠的复位是保证单片机正常运行的关键因素。
因此,在设计复位电路时,通常要使RST引脚保持10ms以上的高电平。
当RST从高电平变为低电平之后,单片机就从0000H地址开始执行程序。
8051单片机通常都采用上电自动复位和开关复位两种方式。
实际使用中,有些外围芯片也需要复位,如8255等。
这些复位端的复位电平要求与单片机的复位要求一致时,可以把它们连起来。
在最小系统板上,提供了一个通用的复位电路,在使用该板之前,必须将该电路与单片机联结起来。
另外,还可以采用主板上的微处理器监控模块来控制复位脚,以便更加可靠地管理单片机的工作。
3.3按键扫描控制电路
此部分为按键扫描控制部分,用来控制蜂鸣器和旋转灯,因所用的按键较少,故采用独立按键控制方式,且所用按键均为弹性小按键,即按下时为低电平接通,松手时即弹起变为高电平。
单片机中的键盘通常由按键开关组成,按键开关的外形和参数如下图所示,它是一种常开型按键开关,为了便于安装固定,它有四个管脚,其管脚说明如下图中的文字所示,在常态时开关触点(1和2)处于断开状态,只有按下按键时开关触点才闭合短路,所以可以用万用表检测开关的管脚排列、好坏和质量。
4.系统软件设计
交通灯程序、
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitRED_A=P0^0;
sbitYELLOW_A=P0^1;
sbitGREEN_A=P0^2;
sbitRED_B=P0^3;
sbitYELLOW_B=P0^4;
sbitGREEN_B=P0^5;
ucharTime_Count=0,Flash_Count=0,Operation_Type=1;
voidT0_INT()interrupt1
{
TH0=-50000/256;
TL0=-50000%256;
switch(Operation_Type)
{
case1:
RED_A=0;YELLOW_A=0;GREEN_A=1;
RED_B=1;YELLOW_B=0;GREEN_B=0;
if(++Time_Count!
=100)return;
Time_Count=0;
Operation_Type=2;
break;
case2:
if(++Time_Count!
=8)return;
Time_Count=0;
YELLOW_A=!
YELLOW_A;
GREEN_A=0;
if(++Flash_Count!
=10)return;
Flash_Count=0;
Operation_Type=3;
break;
case3:
RED_A=1;YELLOW_A=0;GREEN_A=0;
RED_B=0;YELLOW_B=0;GREEN_B=1;
if(++Time_Count!
=100)return;
Time_Count=0;
Operation_Type=4;
break;
case4:
if(++Time_Count!
=8)return;
Time_Count=0;
YELLOW_B=!
YELLOW_B;
GREEN_B=0;
if(++Flash_Count!
=10)
return;
Flash_Count=0;
Operation_Type=1;
break;
}
}
voidmain()
{
TMOD=0x01;
IE=0x82;
TR0=1;
while
(1);
}
5.软硬件联调及调试结果
5.1实物图(拍的时候包括正面和反面,老师进行检查时要对应)
5.2调试结果
6.结论
这次的单片机课程设计我做的是交通灯设计,通过近两个星期的努力,基本上可以说圆满完成。
这次单片机课程设计不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,例如对以前所学过的知识理解得不够深刻,掌握得不够牢固,学习了单片机C语言。
经过一周的努力,顺利的完成了单片机课设。
这是一个磨练意志的过程。
从课题的选择开始,报警器和旋转灯的设计、硬件和软件系统的设计、到最后的Proteus软件仿真完成,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。
一方面通过C51单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;另一方面在用Proteus软件画电路图这个过程中让我掌握了计算机辅助的设计技术。
当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。
需要的是细心和耐心。
在很大程度上培养了我拼搏的工作精神。
使我受益匪浅,更加明确了自己专业的方向。
课程设计不光要懂得理论知识,更多的是要我们动手做亲自去设计程序和电路图,好多东西看起来十分简单,一看书上的程序都懂,但没有亲自去设计它,你就不会懂理论与实践是有很大区别的。
两周的课程设计,让我难忘的莫过于这最辛苦的程序设计,这些东西如果没有一定的耐心和清晰的思路还真是棘手,这次的课程设计就是要我们打破理论和实践之间的间隔,跨过理论和实践之间的鸿沟,或许是我们学习生涯中的又一次飞跃。
我觉得单片机课程设计是一个不错的课程,或者说是一个必须的环节,它可以培养我们的动手能力,可以激发我们学生的学习兴趣,也可以使我们掌握基本的理论知识,运用基本知识,训练基本技能,增强实践能力。
这次课程设计虽然很辛苦,但我却乐在其中。
参考文献
1.《单片机原理及应用技术》陈益飞编国防工业出版社
2·《单片机实用系统设计技术》房小翠编国防工业出版社
3·《单片机应用系统设计》何立民编北航出版社
4·《单片机原理及接口技术》曹琳琳编国防科技大学出版社
附录
附录1:
基于单片机的交通灯设计原理图
附录2:
基于单片机的交通灯设计PCB图
附录3:
proteus仿真图
附录4:
基于单片机的交通灯设计C语言程序清单
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitRED_A=P0^0;
sbitYELLOW_A=P0^1;
sbitGREEN_A=P0^2;
sbitRED_B=P0^3;
sbitYELLOW_B=P0^4;
sbitGREEN_B=P0^5;
ucharTime_Count=0,Flash_Count=0,Operation_Type=1;
voidT0_INT()interrupt1
{
TH0=-50000/256;
TL0=-50000%256;
switch(Operation_Type)
{
case1:
RED_A=0;YELLOW_A=0;GREEN_A=1;
RED_B=1;YELLOW_B=0;GREEN_B=0;
if(++Time_Count!
=100)return;
Time_Count=0;
Operation_Type=2;
break;
case2:
if(++Time_Count!
=8)return;
Time_Count=0;
YELLOW_A=!
YELLOW_A;
GREEN_A=0;
if(++Flash_Count!
=10)return;
Flash_Count=0;
Operation_Type=3;
break;
case3:
RED_A=1;YELLOW_A=0;GREEN_A=0;
RED_B=0;YELLOW_B=0;GREEN_B=1;
if(++Time_Count!
=100)return;
Time_Count=0;
Operation_Type=4;
break;
case4:
if(++Time_Count!
=8)return;
Time_Count=0;
YELLOW_B=!
YELLOW_B;
GREEN_B=0;
if(++Flash_Count!
=10)
return;
Flash_Count=0;
Operation_Type=1;
break;
}
}
voidmain()
{
TMOD=0x01;
IE=0x82;
TR0=1;
while
(1);
}
5:
基于单片机的交通灯设计元器件目录表
编号
元件名称
元件数量
(1)
AT89C52单片机
1个
(2)
270Ω电阻
8个
(3)
10KΩ电阻
1个
(4)
30uF电容
2个
(5)
11.0592MHz晶振
1个
(6)
发光二极管
20个
(7)
7组八脚排阻
1个
(8)
10uf电容
1个
忽略此处..