15-基于单片机的交通灯系统设计(原理图、仿真、源代码工程+说明书+PPT)
资料
资料包含:设计全套资料(精品)
原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
说明书19236字
英文文献及翻译
答辩PPT
visio流程图工程
详情请私信!
任务书
本设计是基于单片机的交通灯控制系统设计,通过对路口设置的交通指示灯和时间显示装置的控制,给行人和车辆的通行提供便利。
1、设计定时器或采用相关的定时芯片给系统提供时间参考信号。
2、单片机依据时间信号,控制指示灯的亮灭控制车辆和行人的通行,同时显示时间信息。
3、设计相关的硬件电路
4、自行设计软件编程
设计说明书
摘要
城市交通道路已经是我们生活中不可缺少的一部分,并且随着社会的不断发展,交通必将成为一个重点的研究话题。如何疏通交通、防止道路交通堵塞、人员伤亡、交通事故的控制是当前的主要研究方向。随着微控制技术、电子技术、计算机系统的深入研究发展,将其应用在交通管理上必然是发展趋势。本次系统针对此现象设计出一款基于单片机的交通系统。
本设计以AT89C51单片机作为系统的控制核心,主要包括主控模块、交通灯指示模块、显示模块、按键模块组成。系统工作时,依据按键设定的工作模式,主控模块启动内部的定时器,开始控制不同路口交通灯的工作状态。当定时时间完成,控制系统发出切换命令,控制不同路口的交通灯切换工作状态,从而实现控制不同路口的通行状况。在系统运行时,通过数码管显示各路口的时间,为方便操作人员熟知系统的工作方式,又额外附加显示器显示系统的工作模式。
本设计具有系统结构简单、系统性能稳定、成本低廉等优点,能更好的实现传统交通灯系统的通行控制功能。
设计框架架构
前 言 1
第一章 绪论 2
第一节 课题研究背景 2
第二节 国内外研究现状与发展趋势 2
第三节 交通灯研究意义 4
第四节 本文的主要研究内容 4
第五节 本章小结 5
第二章 系统总体方案设计 6
第一节 交通灯系统工作原理 6
第二节 系统总体结构设计 6
第三节 交通灯状态逻辑方案确定 8
第四节 本章小结 9
第三章 交通灯系统硬件电路设计 10
第一节 主控模块电路设计 10
一、单片机介绍 10
二、最小系统电路设计 11
第二节 按键模块电路设计 12
第二节 显示模块电路设计 13
一、数码管显示电路设计 13
二、LED红黄绿灯电路设计 14
第四节 电源电路设计 15
第五节 系统总电路图 15
第六节 本章小结 16
第四章 系统软件设计 18
第一节 系统主程序设计 18
第二节 显示模块软件设计 19
一、数码管程序设计 19
二、交通信号灯状态程序设计 20
第三节 按键模块软件设计 21
第四节 本章小结 22
第五章 系统调试与仿真 23
第一节 开发工具 23
一、Protues软件介绍 23
二、Keil软件介绍 24
第二节 系统功能调试 24
一、系统仿真电路设计 24
二、系统功能测试 26
四、测试总结 28
第三节 本章小结 29
结 论 30
致 谢 31
参考文献 32
附 录 34
一、英文原文 34
二、英文翻译 37
三、整体电路图 39
四、源代码 40
设计说明书及设计文件
字数:19236字
源码展示
/*****************************************************
十字路口交通灯控制 C 程序
******************************************************/
#define uchar unsigned char
#define uint unsigned int
#include <reg52.h>
/*****定义控制位**********************/
sbit Time_Show_LED2=P2^5;//Time_Show_LED2控制位
sbit Time_Show_LED1=P2^4;//Time_Show_LED1控制位
sbit EW_LED2=P2^3; //EW_LED2控制位
sbit EW_LED1=P2^2; //EW_LED1控制位
sbit SN_LED2=P2^1; //SN_LED2控制位
sbit SN_LED1=P2^0; //SN_LED1控制位
sbit SN_Yellow=P1^6;//SN黄灯
sbit EW_Yellow=P1^2;//EW黄灯
sbit EW_Red=P1^3;//EW红灯
sbit SN_Red=P1^7;//SN红灯
sbit EW_ManGreen=P3^0;//EW人行道绿灯
sbit SN_ManGreen=P3^1;//SN人行道绿灯
sbit Special_LED=P2^6;//交通正常指示灯
sbit Busy_LED=P2^7;//交通繁忙指示灯
sbit Nomor_Button=P3^5;//交通正常按键
sbit Busy_Btton=P3^6;//交通繁忙按键
sbit Special_Btton=P3^7;//交通特殊按键
sbit Add_Button=P3^3;//时间加
sbit Reduces_Button=P3^4;//时间减
bit Flag_SN_Yellow; //SN黄灯标志位
bit Flag_EW_Yellow;//EW黄灯标志位
char Time_EW;//东西方向倒计时单元
char Time_SN;//南北方向倒计时单元
uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化赋值,正常模式
uchar EW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量
uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码
uchar code S[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信号灯控制代码
/**********************延时子程序************************/
void Delay(uchar a)
{
uchar i;
i=a;
while(i--){;}
}
/*****************显示子函数**************************/
void Display(void)
{
char h,l;
h=Time_EW/10;
l=Time_EW%10;
P0=table[l];
EW_LED2=1;
Delay(2);
EW_LED2=0;
P0=table[h];
EW_LED1=1;
Delay(2);
EW_LED1=0;
h=Time_SN/10;
l=Time_SN%10;
P0=table[l];
SN_LED2=1;
Delay(2);
SN_LED2=0;
P0=table[h];
SN_LED1=1;
Delay(2);
SN_LED1=0;
h= EW1/10;
l= EW1%10;
P0=table[l];
Time_Show_LED1=1;
Delay(2);
Time_Show_LED1=0;
P0=table[h];
Time_Show_LED2=1;
Delay(2);
Time_Show_LED2=0;
}
/**********************外部0中断服务程序************************/
void EXINT0(void)interrupt 0 using 1
{
EX0=0; //关中断
if(Add_Button==0) //时间加
{
EW1+=5;
SN1+=5;
if(EW1>=100)
{
EW1=99;
SN1=79;
}
}
if(Reduces_Button==0) //时间减
{
EW1-=5;
SN1-=5;
if(EW1<=40)
{
EW1=40;
SN1=20;
}
}
if(Nomor_Button==0)//测试按键是否按下,按下为正常状态
{
EW1=60;
SN1=40;
EWL1=19;
SNL1=19;
Busy_LED=0;//关繁忙信号灯
Special_LED =0;//关特殊信号灯
}
if(Busy_Btton==0) //测试按键是否按下,按下为繁忙状态
{
EW1=45;
SN1=30;
EWL1=14;
SNL1=14;
Special_LED=0;//关特殊信号灯
Busy_LED=1;//开繁忙信号灯
}
if(Special_Btton==0)//测试按键是否按下,按下为特殊状态
{
EW1=75;
SN1=55;
EWL1=19;
SNL1=19;
Busy_LED=0;//关繁忙信号灯
Special_LED =1;//开特殊信号灯
}
EX0=1;//开中断
}
/**********************T0中断服务程序*******************/
void timer0(void)interrupt 1 using 1
{
static uchar count;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==10)
{
if(Flag_SN_Yellow==1) //测试南北黄灯标志位
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1) //测试东西黄灯标志位
{EW_Yellow=~EW_Yellow;}
}
if(count==20)
{
Time_EW--;
Time_SN--;
if(Flag_SN_Yellow==1)//测试南北黄灯标志位
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1)//测试东西黄灯标志位
{EW_Yellow=~EW_Yellow;}
count=0;
}
}
/*********************主程序开始**********************/
void main(void)
{
Busy_LED=0;
Special_LED=0;
IT0=1; //INT0负跳变触发
TMOD=0x01;//定时器工作于方式1
TH0=(65536-50000)/256;//定时器赋初值
TL0=(65536-50000)%256;
EA=1; //CPU开中断总允许
ET0=1;//开定时中断
EX0=1;//开外部INTO中断
TR0=1;//启动定时
while(1)
{ /*******S0状态**********/
EW_ManGreen=0; //EW人行道禁止
SN_ManGreen=1;//SN人行道通行
Flag_EW_Yellow=0; //EW关黄灯显示信号
Time_EW=EW;
Time_SN=SN;
while(Time_SN>=5)
{P1=S[0]; //SN通行,EW红灯
Display();}
/*******S1状态**********/
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1; //SN开黄灯信号位
EW_Red=1; //SN黄灯亮,等待左拐信号,EW红灯
Display();
}
/*******S2状态**********/
Flag_SN_Yellow=0; //SN关黄灯显示信号
Time_SN=SNL;
while(Time_SN>=5)
{P1=S[2];//SN左拐绿灯亮,EW红灯
Display();}
/*******S3状态**********/
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1; //SN开黄灯信号位
EW_Red=1; //SN黄灯亮,等待停止信号,EW红灯
Display();}
/***********赋值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
/*******S4状态**********/
EW_ManGreen=~EW_ManGreen;//EW人行道通行
SN_ManGreen=~SN_ManGreen;//SN人行道禁止
Flag_SN_Yellow=0; //SN关黄灯显示信号
Time_EW=SN;
Time_SN=EW;
while(Time_EW>=5)
{P1=S[4]; //EW通行,SN红灯
Display();}
/*******S5状态**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EW开黄灯信号位
SN_Red=1;//EW黄灯亮,等待左拐信号,SN红灯
Display();}
/*******S6状态**********/
Flag_EW_Yellow=0; //EW关黄灯显示信号
Time_EW=EWL;
while(Time_EW>=5)
{P1=S[6];//EW左拐绿灯亮,SN红灯
Display();}
/*******S7状态**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1; //EN开黄灯信号位
SN_Red=1;//EW黄灯亮,等待停止信号,SN红灯
Display();}
/***********赋值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
}
}