交通灯控制器的设计讲解.docx
- 文档编号:11668108
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:22
- 大小:168.94KB
交通灯控制器的设计讲解.docx
《交通灯控制器的设计讲解.docx》由会员分享,可在线阅读,更多相关《交通灯控制器的设计讲解.docx(22页珍藏版)》请在冰豆网上搜索。
交通灯控制器的设计讲解
1设计要求1
1.1研究交通灯控制系统的意义1
1.2课程设计的内容1
1.3课程设计具体要求1
2设计方案及论证1
2.1总体设计思路1
2.2系统设计框图2
3设计原理及电路图2
3.1硬件设计2
3.1.1单片机最小系统2
3.1.2显示电路3
3.1.3交通灯模块3
3.3.4系统总设计图4
3.2软件流程图4
3.2.1打开keilc软件4
3.2.2新建工程(project)5
3.2.3新建工程并保存到D盘新建文件夹5
3.2.4设置工程5
3.2.5建立文本文件,并保存为jiaotong.c文件6
3.2.6编译,链接,运行6
4元器件清单7
5元器件识别与检测8
6软件编程与调试8
6.1重点算法8
6.1.1延时算法8
6.1.2绿灯闪烁算法9
6.1.3黄灯闪烁算法10
6.1.4数码管显示算法10
6.2总体程序11
6.3运行仿真结果19
6.3.1主干道通行仿真结果19
6.3.2黄灯显示仿真结果19
6.3.3支干道通行仿真结果20
7设计心得20
8参考文献20
1设计要求
1.1研究交通灯控制系统的意义
作为一种交通规则的指示,交通灯起着及其重要的作用。
从最初的单车道到现在的四车道八车道等,交通指示的自动控制也越来越完善。
它不再仅仅拥有交通指示的作用,还有其它特殊情况的处理,比如对闯红灯的肇事者进行的监督,紧急救护车的通过时保持道路畅通,等等都需要非常的处理,这也是对交通灯功能的新要求。
而且,也从最初的只有红,黄,绿三种灯的指示到现在的倒计时电子显示,让人们从单一的信号判别到时间的准确明了有了进一步认知。
这都表明交通灯的研究还具有它实际的意义。
1.2课程设计的内容
交通灯控制电路自动控制红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现交通管理的自动化。
1.3课程设计具体要求
(1)用红、绿、黄三色发光二极管做信号灯:
主干道为东西向,有红、绿、黄三个灯;支干道为南北向,也有红、绿、黄三灯。
(2)主干道绿灯时间长为45S,黄灯为5S,支干道为25S。
(3)能实现时间显示功能。
2设计方案及论证
2.1总体设计思路
电源提供方案:
采用独立的5V稳压电源,此方案稳定可靠,且有各种成熟电路可供选用。
显示界面方案:
采用数码管和点阵LED相结合的方法,因为实际既要求倒计时施主输出,又要求又状态灯输出等,为方便观看并考虑到现实状况,用数码管与LED分别显示时间和提示信息。
这种方案既满足系统功能要求,又减少了系统实现的复杂度。
主控制:
采用AT89C51单片机作为控制器,控制交通灯系统实行通行倒计时及左拐、右拐、直行、行人通行。
指示采用八位共阴极数码管显示器。
这种方案设计占用单片机的端口最少,硬件也少。
耗电也最小。
交通灯的采用:
使用led二极管,工作电压为1.8V,驱动电流为10MA,在电路中计算得出,(5v-1.8V)/10MA=320Ω,即加电阻阻值320Ω。
2.2系统设计框图
单片机
数码管显示屏
晶振
交通灯系统
图1系统设计框图
3设计原理及电路图
本次的交通灯控制系统设计,利用AT89C51单片机最小系统作为最主要部分进行电路控制,用LED-GREEN作为绿灯,LED-RED作为红灯,LED-YELLOW作为黄灯,使用7SEG-BCD共阴极数码管对各个进口道的通行时间进行控制显示。
下面分硬件软件分别介绍:
3.1硬件设计
3.1.1单片机最小系统
单片机最小系统包括AT89C51单片机芯片,时钟电路和复位电路。
其中AT89C51单片机芯片是整个系统的核心,程序烧录到芯片中,通过芯片控制电路;时钟电路由一个晶振和两个电容构成,用于产生系统时钟;
图2单片机最小系统
3.1.2显示电路
使用7SEG-8位共阴极数码管对显示电路进行设计
图3数码管显示电路
3.1.3交通灯模块
图4交通灯系统
3.3.4系统总设计图
图5系统总设计图
3.2软件流程图
3.2.1打开keilc软件
图6
3.2.2新建工程(project)
图7
3.2.3新建工程并保存到D盘新建文件夹
3.2.4设置工程
在左菜单Target1处点击右键出现菜单中选择OptionsforTarget‘Target1’进入工程文件设置。
生成HEX文件。
图8
3.2.5建立文本文件,并保存为jiaotong.c文件
图9
3.2.6编译,链接,运行
程序无误后用鼠标双击pretues电路图中的单片机芯片,添加HEX文件。
下载到相应51单片机里运行实验。
图10
3.2.7主程序流程图
开始
设置初始值,初始延时为50ms
Time=20?
N
Y
Second
<46
主干道通行45S
Second<51
黄灯闪烁5S
Second<76
支干道通行25s
一直循环
N
图11
4元器件清单
元件序号
型号
主要参数
数量
备注
1
7SEG-MPX8_CC-BLUE
Blue
1
共阴极数码管
2
AT89C51
12MHz
1
控制芯片
3
CAP
1NF
2
电容
4
RESPACK
1
上拉电阻
5
CRYSTAL
12MHz
1
晶振
6
LED二极管
1.8V.10mA
10
3个红灯2个黄灯3个绿灯
7
RES
320Ω
10
电阻
8
VCC
5V
3
电源
9
GROUND
2
地
5元器件识别与检测
元件的功能和部分元件的识别:
7SEG-MPX8_CC-BLUE数码管:
它左下侧的abcdefgdp是LED数码管显示器的I/O口,是段选信号,右下侧的12345678是它的位选信号,就是从左到右分别是第一位到第八位,段选信号与位选信号分别接到单片机的不同输出口,例如段选信号可以接到P0口,位选信号可以接到P2口。
AT89C51:
采用定时器0,方式1进行定时。
它有4k字节Flash闪速存储器,128字节内部RAM,32I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
CAP:
是CAPACITOR的简称。
在电路图中是非极性电容的简称。
RES-PACK:
上拉电阻,单片机用p0口控制数码管是必须接上拉电阻才能驱动
CRYSTAL:
晶振12MHZ,用于产生定时时间。
LED:
LED发光二极管是lightemittingdiode的简称,LED是一种直接注入电流的发光器件,是半导体晶体内部受激电子从高能级回复到低能级时,发射出光子的结果,这就是通常所说的自发发射跃迁。
当LED的PN结加上正向偏压,注入的少数载流子和多数载流子(电子和空穴)复合而发光。
值得注意的是,对于大量处于高能级的粒子各自分别自发发射一列一列角频率为ν=Eg/h的光波,但各列光波之间没有固定的相位关系,可以有不同的偏振方向,并且每个粒子所发射的光沿所有可能的方向传播,这个过程称为自发发射。
其发射波长可用下式来表示:
λ(μm)=1.2396/Eg(eV)
7.RES:
经计算所用电阻为320欧姆。
6软件编程与调试
6.1重点算法
6.1.1延时算法
voidTimer0()interrupt1
{
TH0=0x3C;//设置初始值
TL0=0xB0;
Time++;
if(Time==20)
{
Second++;
Time=0;
}
}
经过此程序延时为1S
6.1.2绿灯闪烁算法
voidmain(void)
{
Second=1;
Timer0Cofig();
while
(1)
{
if(Second==80)
{
Second=1;
}
//--主干道通行,45秒--//
if(Second<46)
{
DisplayData[0]=0x00;
DisplayData[1]=0x00;
DisplayData[2]=DIG_CODE[(45-Second)%100/10];
DisplayData[3]=DIG_CODE[(45-Second)%10];
DisplayData[4]=0x00;
DisplayData[5]=0x00;
DisplayData[6]=DisplayData[2];
DisplayData[7]=DisplayData[3];
DigDisplay();
//--主干道通行--//
6.1.3黄灯闪烁算法
//--黄灯等待切换状态,5秒--//
elseif(Second<51)
{
DisplayData[0]=0x00;
DisplayData[1]=0x00;
DisplayData[2]=DIG_CODE[(50-Second)%100/10];
DisplayData[3]=DIG_CODE[(50-Second)%10];
DisplayData[4]=0x00;
DisplayData[5]=0x00;
DisplayData[6]=DisplayData[2];
DisplayData[7]=DisplayData[3];
DigDisplay();
//--黄灯阶段--//
6.1.4数码管显示算法
voidDigDisplay()
{
unsignedchari;
unsignedintj;
for(i=0;i<8;i++)
{
GPIO_PLACE=DIG_PLACE[i];//发送位选
GPIO_DIG=DisplayData[i];//发送段码
j=10;//扫描间隔时间设定
while(j--);
GPIO_DIG=0x00;//消隐
}
}
6.2总体程序
/*******************************************************************************
*实验名:
动态显示数码管实验
*使用的IO:
*实验效果:
数码管显示76543210。
*******************************************************************************/
#include
//--定义使用的IO口--//
#defineGPIO_DIGP0
#defineGPIO_PLACEP1
#defineGPIO_TRAFFICP2
sbitRED10=P2^0;//上人行道红灯
sbitGREEN10=P2^1;//上人行道绿灯
sbitRED11=P2^2;
sbitYELLOW11=P2^3;
sbitGREEN11=P2^4;
sbitRED00=P3^0;//右人行道红灯
sbitGREEN00=P3^1;//右人行道绿灯
sbitRED01=P2^5;
sbitYELLOW01=P2^6;
sbitGREEN01=P2^7;
//--定义全局变量--//
unsignedcharcodeDIG_PLACE[8]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制查表的方法控制
unsignedcharcodeDIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsignedcharDisplayData[8];
//用来存放要显示的8位数的值
unsignedcharTime,Second;//用来存放定时时间
//--声明全局函数--//
voidDigDisplay();//动态显示函数
voidTimer0Cofig(void);
/*******************************************************************************
*函数名:
main
*函数功能:
主函数
*输入:
无
*输出:
无
*******************************************************************************/
voidmain(void)
{
Second=1;
Timer0Cofig();
while
(1)
{
if(Second==80)
{
Second=1;
}
//--主干道通行,45秒--//
if(Second<46)
{
DisplayData[0]=0x00;
DisplayData[1]=0x00;
DisplayData[2]=DIG_CODE[(45-Second)%100/10];
DisplayData[3]=DIG_CODE[(45-Second)%10];
DisplayData[4]=0x00;
DisplayData[5]=0x00;
DisplayData[6]=DisplayData[2];
DisplayData[7]=DisplayData[3];
DigDisplay();
//--主干道通行--//
GPIO_TRAFFIC=0xFF;//将所有的灯熄灭
RED00=1;
GREEN00=1;
GREEN11=0;//主干道绿灯亮
GREEN10=0;//主干道人行道绿灯亮
RED01=0;//支干道红灯亮
RED00=0;//支干道人行道红灯亮
}
//--黄灯等待切换状态,5秒--//
elseif(Second<51)
{
DisplayData[0]=0x00;
DisplayData[1]=0x00;
DisplayData[2]=DIG_CODE[(50-Second)%100/10];
DisplayData[3]=DIG_CODE[(50-Second)%10];
DisplayData[4]=0x00;
DisplayData[5]=0x00;
DisplayData[6]=DisplayData[2];
DisplayData[7]=DisplayData[3];
DigDisplay();
//--黄灯阶段--//
GPIO_TRAFFIC=0xFF;//将所有的灯熄灭
RED00=1;
GREEN00=1;
YELLOW11=0;//主干道黄灯亮
RED10=0;//主干道人行道红灯亮
YELLOW01=0;//支干道红灯亮
RED00=0;//支干道人行道红灯亮
}
//--支干道通行--//
elseif(Second<76)
{
DisplayData[0]=0x00;
DisplayData[1]=0x00;
DisplayData[2]=DIG_CODE[(75-Second)%100/10];
DisplayData[3]=DIG_CODE[(75-Second)%10];
DisplayData[4]=0x00;
DisplayData[5]=0x00;
DisplayData[6]=DisplayData[2];
DisplayData[7]=DisplayData[3];
DigDisplay();
//--黄灯阶段--//
GPIO_TRAFFIC=0xFF;//将所有的灯熄灭
RED00=1;
GREEN00=1;
RED11=0;//主干道红灯亮
RED10=0;//主干道人行道红灯亮
GREEN01=0;//支干道绿灯亮
GREEN00=0;//支干道人行道绿灯亮
}
//--黄灯等待切换状态,5秒--//
else
{
DisplayData[0]=0x00;
DisplayData[1]=0x00;
DisplayData[2]=DIG_CODE[(80-Second)%100/10];
DisplayData[3]=DIG_CODE[(80-Second)%10];
DisplayData[4]=0x00;
DisplayData[5]=0x00;
DisplayData[6]=DisplayData[2];
DisplayData[7]=DisplayData[3];
DigDisplay();
//--黄灯阶段--//
GPIO_TRAFFIC=0xFF;//将所有的灯熄灭
RED00=1;
GREEN00=1;
YELLOW11=0;//主干道黄灯亮
RED10=0;//主干道人行道红灯亮
YELLOW01=0;//支干道红灯亮
RED00=0;//支干道人行道红灯亮
}
}
}
/*******************************************************************************
*函数名:
DigDisplay
*函数功能:
使用数码管显示
*输入:
无
*输出:
无
*******************************************************************************/
voidDigDisplay()
{
unsignedchari;
unsignedintj;
for(i=0;i<8;i++)
{
GPIO_PLACE=DIG_PLACE[i];//发送位选
GPIO_DIG=DisplayData[i];//发送段码
j=10;//扫描间隔时间设定
while(j--);
GPIO_DIG=0x00;//消隐
}
}
/*******************************************************************************
*函数名:
Timer0Cofig
*函数功能:
配置定时器
*输入:
无
*输出:
无
*******************************************************************************/
voidTimer0Cofig(void)
{
TMOD=0x01;//定时器0选择工作方式1
TH0=0x3C;//设置初始值,定时50MS
TL0=0xB0;
EA=1;//打开总中断
ET0=1;//打开定时器0中断
TR0=1;//启动定时器0
}
/*******************************************************************************
*函数名:
Timer0
*函数功能:
定时器0中断函数
*输入:
无
*输出:
无
*******************************************************************************/
voidTimer0()interrupt1
{
TH0=0x3C;//设置初始值
TL0=0xB0;
Time++;
if(Time==20)
{
Second++;
Time=0;
}
}
6.3运行仿真结果
6.3.1主干道通行仿真结果
6.3.2黄灯显示仿真结果
6.3.3支干道通行仿真结果
7设计心得
通过这次课程设计,我受益匪浅,一方面是对学过的课内知识的温习和巩固,一方面是锻炼了我的分析能力、写作能力,为今后的工作做好了铺垫。
8参考文献
[1]吴兵,李晔等.交通管理与控制[M].北京:
人民交通出版社,2010.
[2]袁俊泉.单片机设计及其应用.西安:
西安电子科技大学出版社,2002.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 控制器 设计 讲解