交通灯课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机应用课程设计——交通灯控制系统
姓名:徐昊
学号:12010155023
指导老师:张奔
目录
一、设计内容
二、进度安排
三、基本要求
四、设计过程
1、设计要求
2、设计要点
3、硬件设计
4、软件设计
五、设计报告
六、考核方法
基本要求
课程设计的基本要求:
单片机课程设计的主要内容包括:理论设计撰写设计报告等。其中理论设计又包括选择总体方案,硬件系统设计、软件系统设计;硬件设计包括单元电路,选择元器件及计算参数等;软件设计包括模块化层次结构图,程序流程图。程序设计是课程设计的关键环节。课程设计的最后要求是写出设计总结报告,把理论设计内容进行全面的总结,把实践内容上升到理论高度。
一、设计内容
十字路口交通灯控制系统的设计
利用单片机的定时器产生秒信号,控制十字路口的红绿黄灯交替点亮和熄灭,并且用4只LED数码管显示十字路口两个方向的剩余时间。要求系统的工作符合一般交通灯控制要求。
二设计过程
往南和往北的信号一致,即红灯(绿灯或黄灯)同时亮或同时熄灭。用两个
数码管来显示被点亮的指示灯还将点亮多久。 往东和往西方向的信号一致,其工作方式与南北方向一样,也采用两个数码管来倒计时。当南北方向为绿灯和黄灯时,东西向的红灯点亮禁止通行;而东西方向为绿灯和黄灯时,南北向的红灯点亮禁止通行。
假设南北方向为主干道,通行时间为60秒,东西方向是次干道,通行时间为30秒,黄灯点亮的时间均为4秒,则其工作方式如表1.1所示循环点亮信号灯。
十字交叉路口的 交通灯控制系统的结 构如图1.1所示。
图1.1 十字路口交通灯控制示意图
三、课程设计目的
(1)掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
(2)通过课程设计,掌握以单片机核心的电路设计的基本方法和技术。
(3)通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
(4)与模拟电子技术,数字电子技术等课程相结合,进一步熟悉和掌握单片机的结构及工作原理,为以后所学的后续课程打下良好的基础。
(5)通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。
四、课程设计正文
交通灯系统
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时也带动着传统控制的日新月异更新。在自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MSC-51系列单片机A T89C51为中心器件来设计交通灯控制器,实现了能根据实际车流量
通过单片机芯片的P1口设置红、绿灯燃亮时间的功能;显示时间直接通过单片机的P0、P2口输出,系统实用性强、操作简单、扩展性强。
软件方面
系统分析
本设计的主要任务为设计一个以AT87C51单片机为核心的最小应用系统,实现有时间显示的定时交通信号灯控制。要求:
(1)A道放行:绿灯放行40秒,同时B道红灯亮45秒。
(2)B道放行:B道绿灯亮40秒,同时A道红灯亮45秒。
十字路口的两组红绿交通灯受MCS-51单片机I/O口的控制,试验时皆由发光二极管替代,紧急车请求通过的信号由人工控制,以中断方式输入单片机。
正常模式:系统工作时,按照任务分析的状态循环进行,同时进行倒计时显示作为时间提示,使人们能够直观地把握时间。
系统设计
系统实施及程序
#include
bit red,green,yellow,turnred; //定义红、黄、绿及转红标志
code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管0-9
unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{
while(--cnt);
}
{
TMOD |=0x01;//定时器设置10ms in 12M crystal定时器0,工作方式1,16位定时器TH0=0xd8; //65535-10000=55535=D8F0(十六进制)
TL0=0xf0;
IE= 0x82; //中断控制,EA=1开总中断,ET0=1:定时器0中断允许
TR0=1; //开定时器0中断
P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。
red =1;
while(1)
{
P0=Dis_Shiwei;//显示十位,这里实现用8位数码管,即左1位
P2=0;
delay(300);//短暂延时
P0=Dis_Gewei; //显示个位,左数,2位
P2=1;
delay(300);
}
}
/********************************/
/* 定时中断*/
/********************************/
void tim(void) interrupt 1 using 1
{
static unsigned char second=60,count; //初值60
TH0=0xd8;//重新赋值,10毫秒定时
TL0=0xf0;
count++;
if (count==100)
{
count=0;
second--;//秒减1
if(second==0)
{ //这里添加定时到0的代码,可以是灯电路,继电器吸合等,或者执行一个程序if(red) //红灭,先转黄