基于单片机十字路口交通灯课程设计.doc
课程设计 题 目:基于8051单片机交通灯的设计 学 院:电气工程学院 专 业:电气工程及自动化 年级:13级电气自动化 姓 名:肖涛文 指导教师:孙旭日 完成日期:2015年6月23号 目录1、 设计目的2、 设计任务要求3、 设计方案3.1、任务分析 3.2、方案设计4、系统硬件电路设计 4.1设计思路 4.2单片机最小系统电路设计 4.2.1 8051单片机简介 4.2.2 复位电路和时钟脉冲电路设计 4.3数码管显示电路 4.4十字路口交通红绿灯电路 4.5启动与紧急按键电路5、系统软件设计 5.1编程流程图 5.2单片机C语言系统程序6、 仿真线路设计及效果分析 6.1 proteus设计总图 6.2 仿真效果分析图7、实物制作8、结束语9、附件图 9.1原理图 9.2仿真图1、设计目的 (1)加强对单片机的认识,更加充分的掌握和理解设计个部分的工作原理、设计过程、芯片选择等知识。 (2)总结这一学期的单片机的学习以及考察所学的成果。 (3)把理论与实践相结合,充分利用个人能力,并在实践中锻炼。 (4)提高自己的实践动手和故障检修能力。2、设计任务要求 (1)实现十字路交通灯有序亮灭。 (2)附带数码管计时功能。 (3)黄灯亮时要求闪烁。 (4)要求能处理特殊情况的应急功能。 3、设计方案 3.1任务分析 需要实现十字路口交通灯有序亮灭,需要led红绿黄灯为一组的四组灯分别在东西南北四个方向,数码管显示计时,选用一组十位的数码管显示电路,还需需要时钟脉冲来控制黄灯闪烁。设计复位模块,按键来控制整个系统。 3.2 方案设计 (1)进行总体设计并画出原理图。 (2)编写并调试程序。 (3)用Proteus 软件绘制电路仿真调试。 (4)实物的制作及调试。 4、系统硬件电路设计 4.1设计思路 整个设计以AT89C51 单片机为核心,由晶振电路、LED、数码管显示、紧急情况中断、复位电路组成,硬件模块如图2-1. A T 8 9 C 5 1 单 片 机 LED、数码显示管 复 位 电 路 中 断 系 统 晶 振 电 路 2-1 硬件模块实现基本功能(1) 在南北方向(主干道)的车道和东西方向(支干道)的车道两条交叉道路上的车交替行走,主干道上的车辆每次通行时间都设置为15秒。(2) 在绿灯转为红灯时,黄灯先亮5秒钟,才能变换运行车道;(3)在东西方向、南北方向上的车辆除了有红、黄、绿灯指示外,每一种灯亮的时间都得用显示器进行显示(采用计时的方法)。 (4)有紧急车辆要求通过时,系统要能禁止普通车辆通行,所有主干道道均为红灯,紧急车由K2 开关模拟。 4.2单片机最小系统电路设计 4.2.1 8051单片机简介1、 电源引脚Vcc:电源端,+5VGND:接地端。2、 时钟电路引脚XTAL1:片内振荡电路输入端。XTAL2:片内振荡电路输出端。3、I/O引脚:(1)P0.0-P0.7:P0口是一组 8位漏极开路型双向I/O口,也是地址/数据总线复用口。(2)P1.0-P1.7:P1口是一种内部带上拉电阻的8位I/O口可驱动4个TTL门电路。P2.0-P2.7(A8-A15)P2口是一种内部带上拉电阻的8位准双向I/O口可驱动4个TTL门电路。(3)P3.0-P3.7:P3口是一种内部带上拉电阻的8位I/O口。4、控制线引脚RST:复位端、备用电源输入端。EA/Vpp:片外程序储存器选择端/FLASH存储器编程电源。ALE/PROG:地址锁存允许端/编程脉冲输入端。PSEN:读片外程序存储器选通信号输出端。 4.2.2 复位电路设计本设计采用的是上电自动复位,复位电容采用10uF,电阻10000欧,加电瞬间,RES管脚出现高电平,RST引脚出现的高电平将会随着对电容C的充电过程而逐渐回落。连接图如下: 图3-2 复位电路图4.3数码管显示电路本设计采用静态显示方式,采用如图所示的数码管,分别显示南北和东西灯的剩余时间。片选部分和数码段显示部分,分别接单片机管脚的P2口和P0口,优点:占用CPU时间少,便于监测和控制。缺点:硬件电路部分比较复杂,占用I/O口多,成本比较高。 图 3-1共阳极数码管 4.4十字路口交通红绿灯电路 十字路口交通灯用4组LED红绿黄灯代替,分别在东西南北四个方向,原理图如下:4.5启动与紧急按键电路 按下启动按钮S1启动系统,S2为中断应急开关。5、 系统软件设计 开 始 5.1 编程流程图初 始 化判断是否执行中断 yes no 中断键k2 N=0 N=0东西绿灯,南北红灯,延时15秒。东西方 红灯亮 20s,绿 灯 和黄灯熄灭20s东西绿灯变为黄灯闪烁5次,南北红灯延时5秒南北方向红灯亮20s绿 灯 和黄灯熄灭20s东西红灯,南北绿灯,延时15秒。南北绿灯变为黄灯闪烁5次,东西红灯,延时5秒。20s时间到5.2单片机C语言系统程序#include<reg51.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int int a=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;sbit k1=P34;/开始按钮sbit k2=P32;/车道紧急通道按钮/东西红绿灯sbit k3=P30;sbit red=P10;/东西绿灯sbit yellow=P11;/东西黄灯sbit green=P12; /东西红灯/南北红绿灯sbit red1=P13;/l南北绿灯sbit yellow2=P14; /南北黄灯sbit green3=P15; /南北红灯 /*延时子函数*/void delay100ms(void) /误差 0us /100ms延时函数 unsigned char a,b,c; for(c=19;c>0;c-) for(b=20;b>0;b-) for(a=130;a>0;a-);void delay900ms(void) /误差 0us /900ms延时函数 unsigned char a,b,c; for(c=119;c>0;c-) for(b=216;b>0;b-) for(a=16;a>0;a-); /*红绿灯循环子函数*/ void light() int j,h,l;for(j=15;j>=0;j-) /车行绿灯道两位数码管显示 j=*秒 h=j/10;l=j%10;P2=al;P0=ah;P1=0xde;delay900ms(); for(j=5;j>=0;j-)/东西车行黄灯灯道两位数码管显示 j=*秒 /*黄灯闪烁*/ red=1; yellow=1; delay100ms(); yellow=0; /*黄灯闪烁*/ h=j/10;l=j%10;P2=al;P0=ah; delay900ms(); for(j=15;j>=0;j-)/车行道红灯两位数码管显示 j=*秒 P1=0xf3; h=j/10; l=j%10; P2=al; P0=ah; delay900ms(); for(j=5;j>=0;j-)/南北车行黄灯灯道两位数码管显示 j=*秒 /*黄灯闪烁*/ red1=1; yellow2=1; delay100ms(); yellow2=0; /*黄灯闪烁*/ h=j/10;l=j%10;P2=al;P0=ah; delay900ms(); /*紧急通道中断子程序*/ void int0 () interrupt 0int j,h,l;for(j=20;j>=0;j-)/紧急通道数码管显示时间 /*车道全部红灯*/ red=1;/车道东西红灯亮 red1=1;/车道南北绿灯灭green=0;/车道东西红灯亮green3=0; /车道南北红灯亮/*车道全部红灯*/ h=j/10;l=j%10;P2=al;P0=ah;delay900ms(); /*主函数*/ void main() IT0=1;EX0=1;IT1=1;EX1=1;EA=1;if(k1=0) while(1) light(); 6、 仿真线路设计及效果分析 6.1设计总图6.2仿真效果根据要求分别仿真各种情况下的亮灯情况,具体如下:下面仿真图所示,正常情况下东西方向亮绿灯,南北方向亮红灯。南北放行,东西禁行:如下所示东西方向亮黄灯5秒,东西黄灯闪烁,南北方向亮红灯:如下所示南北方向亮黄灯闪烁5秒,南北方向绿灯熄灭,东西方向亮红灯:应急紧急按钮通道东西南北均亮红灯:7、实物制作图8、结束语 本设计主要是利用了AT89C51芯片的I/O引脚的扩展功能,采用MCS-51系列单片机为中心器件来设计交通灯控制器,实现了能通过控制单片机芯片及二级管的亮灭状态来模拟实现对交通灯的控制。制作期间,从最小体统的焊接,到复位电路和晶振的连接,期间出现许多故障,经过不断的检查与调试,完成了最小系统的焊接并且运行成功,接着后面数码管显示模块和LED交通灯模块的焊接完成,并通过调试安装成功的运行了十字路口交通灯系统控制。期间学到的很多东西,从电路的设计绘制到程序的设计调试,到实际电路的制作,锻炼了我的绘图能力和编程能力,增强了动手能力,检查故障的能力,掌握了51单片机的使用。9、 附件图 9.1原理图 9.2仿真图