单片机课设自动交通管理系统课程设计.docx
- 文档编号:4958155
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:26
- 大小:1.10MB
单片机课设自动交通管理系统课程设计.docx
《单片机课设自动交通管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课设自动交通管理系统课程设计.docx(26页珍藏版)》请在冰豆网上搜索。
单片机课设自动交通管理系统课程设计
华东交通大学
课程设计任务书
自
动
交
通
管
理
系
统
姓名:
。
。
。
专业:
信息工程
班级:
10信息工程
学号:
组员:
目录
一、概述-3-
1.1课题名称-3-
1.2设计目的-3-
1.4设计要求-3-
二、硬件设计-4-
2.1MCS-51单片机及ADC0832简介-4-
2.2系统硬件设计-9-
2.2.1自动交通管理系统方案论证-9-
2.2.2系统总框图-10-
2.2.3硬件接线图-11-
三、软件设计-17-
3.1程序流程图-17-
3.2初值计算-18-
3.2.1相应程序代码-18-
四、运行调试-20-
五、心得体会-21-
六、参考文献-21-
七、附录-22-
7.3硬件连线图-26-
一、概述
摘要:
本文研究的是以AT89C51单片机为控制器的自动交通控制系统,该系统用红、绿、黄三支共两组发光二极管表示交通信号灯,利用单片机模拟有时间显示的定时交通信号灯控制管理,并附带有撞红灯警告功能以及紧急按钮。
本设计是以软件和硬件相结合的方式来实现,文中给出了具体的硬件电路图和软件流程图及程序源码。
关键词:
智能交通灯,AT89C51,LED
1.1课题名称
自动交通管理系统
1.2设计目的
要求我们掌握单片机各模块的基本工作原理,培养单片机应用系统的设计能力,熟练使用proteus进行设计仿真。
1.3设计内容
设计用单片机控制的十字路口交通灯及撞红灯报警控制系统,并实现这些功能。
1.4设计要求
用红、绿、黄三支共两组发光二极管表示交通信号灯,利用单片机模拟有时间显示的定时交通信号灯控制管理。
信号灯的变化规律可如下:
1.放行线:
绿灯亮放行25秒,黄灯亮警告5秒,然后红灯亮禁止。
2.禁示线:
红灯亮禁止30秒,然后绿灯亮放行。
3.当某一方向的红灯亮时,若该方向有车通过,则LED亮报警。
(撞红灯信号可用3-5V模拟量表示)
4.同时用2位数码管进行30秒钟递减时间显示。
5.增加手动按钮,按下紧急按钮后,所有红灯亮,禁止通行且时间持续为10秒。
二、硬件设计
2.1MCS-51单片机及ADC0832简介
MCS-51单片机内部结构
8051是MCS-51系列单片机的典型产品,以这一代表性的机型进行系统的讲解。
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
·中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
·数据存储器(RAM)
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
图1-内部结构
·程序存储器(ROM):
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
·定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
·并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
·全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
·中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
·时钟电路:
8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
下图是MCS-51系列单片机的内部结构示意图2。
图2-单片机的内部结构
MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:
MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:
如图3
图3-单片机外部引脚图
Pin9:
RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。
8051的复位方式可以是自动复位,也可以是手动复位,见下图4。
此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
图4
·Pin30:
ALE/
当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。
而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。
更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。
如果单片机是EPROM,在编程其间,
将用于输入编程脉冲。
·Pin29:
当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。
·Pin31:
EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。
如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。
显然,对内部无程序存储器的8031,EA端必须接地。
在编程时,EA/Vpp脚还需加上21V的编程电压。
ADC0832软件简介
ADC0832是一种8位分辨率,双通道AD转换芯片。
它能够对两路模拟信号进行模数转换,可以在单端输入方式和差分输入方式下工作。
ADC0832引脚图如下图:
引脚说明如下:
/CS:
片选端,低电平时选中芯片
CH0:
模拟输入通道0
CH1:
模拟输入通道1
GND:
电源地
DI:
数据信号输入,通道选择控制端
DO:
数据信号输出,转换后的数据由此端口输出
CLK:
时钟输入端
VCC:
电源
当ADC0832未工作时,必须将片选端CS置于高电平。
此时,芯片禁用。
当需要进行A/D转换时,应将片选端CS置于低电平并保持到转换结束。
芯片开始工作后,还需让单片机想芯片的CLK端输入时钟脉冲,在第一个时钟脉冲的下降沿之前将DI端的输出必须是高电平,表示开始转换。
在第2、3个脉冲的下降沿之前。
DI端口输入两位数据,这两位数据用于选择数据采集通道。
当DI端依次输入1、0时,选择通道0;
当DI端依次输入1、1时,选择通道1;
当DI端依次输入0、0时,CH0作为正输入端,CH1作为负输入端;
当DI端依次输入0、1时,CH0作为负输入端,CH1作为正输入端;
在第三个脉冲下降沿后,DI端口就失去作用了。
此后数据输出端DO开始输出转换后的数据。
在第四个脉冲的下降沿输出转换后数据的最高位直到第11个脉冲下降沿输出数据的最低位。
至此,一个字节的数据输出完成。
然后从此位开始输出下一个相反字节的数据,即从第11个脉冲的下降沿输出数据的最低位,直到第19个脉冲时数据输出完成,也标志着一次AD转换结束。
后一相反字节的8个数据位是作为校验位使用的,一般只读出第一个字节的前8个数据位即能满足要求,对于后8位数据,可以将其丢弃。
正常情况下,ADC0832与单片机的接口应为4条数据线:
CS,CLK,DI,DO。
但由于DI和DO两个端口在通信时并未同时使用,而是先有DI端口输入两位数据来选择通道,再由DO端口输出数据,因此,实际使用中可以将DI和DO并联在一根数据线上使用。
2.2系统硬件设计
2.2.1自动交通管理系统方案论证
水平、垂直两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为显示干道的同行时间,指示灯燃亮的方案如下表。
水平道
30秒
25秒
5秒
红灯
绿灯
黄灯
垂直道
25秒
5秒
30秒
绿灯
黄灯
红灯
紧急按钮
10秒
10秒红灯倒计时完成后,继续被打断前的计时状态
水平垂直方向均为红灯
说明:
A当水平方向为红灯时,时间持续30秒,此时水平方向的道路为禁行线,垂直方向的道路为放行线,绿灯25秒正常通行,黄灯5秒提醒路人交通灯的状态即将变化;
B当垂直方向为红灯时,时间持续30秒,此时垂直方向的道路为禁行线,垂水平向的道路为放行线,绿灯25秒正常通行,黄灯5秒提醒路人交通灯的状态即将变化;
C水平方向的交通灯按红-绿-黄三种颜色循环变化,垂直方向的交通灯按绿-黄-红三种颜色循环变化,这样行人和车辆就可以安全畅通的通行。
D当手动按下紧急按钮后,水平方向和垂直方向都会有十秒的红灯,十秒倒计时结束后,红灯继续完成被打断前的计时,直到数码显示管显示0,继续按设定的自动交通灯变化规律变化
2.2.2系统总框图
2.2.3硬件接线图
1.红绿灯接线图
本设计利用单片机的p3口来驱动和控制各种信号灯的燃亮和燃亮时间,在实际中,交通灯的信号灯需要用高电压控制,在这里我们只是模拟一下它的控制信号,所以我们就只用单片机的信号引脚直接来控制发光二极管,其接线图如下:
2.撞红灯系统接线图
作为单通道模拟信号输入时ADC0832的输入电压是0—5V,当ADC0832模拟量输入端输入5V,时,输出为255,所以若ADC0832采集到的模拟量数值大于3V也就是153/255x5=3,驱动LED发光。
我采用了滑动变阻器控制ADC的输入电压。
3.时间显示接线图
采用了P2口驱动数码显示管显示时间,选用7SEG-MPX2-CA共阳极数码管显示。
P3.0口选择LEDA,P3.1口选择LEDB。
4.紧急按钮接线图
通过P1.0口外接一个紧急按钮,按下后红灯持续亮10秒。
5.单片机最小系统
单片机最小系统如上,以80S51为核心,外加时钟和复位电路,电路结构简单,抗干扰能力强,成本相对较低,非常符合本设计的所有要求。
89C51单片机系列是MCS-51系列的基础上发展起来的,是当前8位单片机的典型代表,采用CHMOS工艺,即互补金属氧化物的HMOS工艺,CHMOS是CMOS和HMOS的结合,具有HMOS高速度和高密度的特点,还具有CMOS低功耗的特点。
时钟电路在单片机的外部通过XTAL1,XTAL2这两个引脚跨接晶体振荡器和微调电容,构成稳定的自激振荡器.本系统采用的为12MHz的晶振,一个机器周期为1us,C2,C3为30pF。
6.运行效果图
(正常运行)
(按下紧急按钮后进行十秒倒计时)
(调节滑动变阻器使得电压大于3V时模拟撞红灯,LED亮)
7.硬件总接线图
见附录
三、软件设计
3.1程序流程图
3.2初值计算
本程序中,初值定为25ms,12M,故T0的初值为:
TH0=0x9e
TL0=0x58
计数器计算公式:
T=(M-TC)T计数或TC=M-T/T计数
T计数是单片机时钟周期TCLK的12倍;TC为定时初值
如单片机的主脉冲频率为TCLK12MHZ ,经过12分频
方式0 TMAX=213 *1微秒=8.192毫秒
方式1 TMAX=216 *1微秒=65.536毫秒
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题.
3.2.1相应程序代码
(1)主程序
/*主函数*/
voidmain(void)
{
chari;
init();//初始化
while
(1)
{
dx_R=1;dx_Y=0;dx_G=0;
nb_R=0;nb_Y=0;nb_G=1;
for(i=N;i>0;i--)
{
deal(i);
}
dx_R=1;dx_Y=0;dx_G=0;
nb_R=0;nb_Y=1;nb_G=0;
N=5;
for(i=N;i>0;i--)
{
deal(i);
}
dx_R=0;dx_Y=0;dx_G=1;
nb_R=1;nb_Y=0;nb_G=0;
N=25;
for(i=N;i>0;i--)
{
deal(i);
}
dx_R=0;dx_Y=1;dx_G=0;
nb_R=1;nb_Y=0;nb_G=0;
N=5;
for(i=N;i>0;i--)
{
deal(i);
}
//if(ADC_0832()>153)beep=0;elsebeep=1;//如果采集到的模拟量数值大于3V也就是153/255x5=3
}
}
(2)中断服务子程序
voidtimer0()interrupt1using0//T0定时定时25ms
{
TH0=0x9e;
TL0=0x58;
time++;
if(time==20)
{
if(ADC_0832()>153)beep=0;elsebeep=1;//0.5s扫描一次是不是大于3
time=0;
}
if(!
button)_red();//每25ms扫描一次是不是有按键按下
}
(3)紧急按钮程序
void_red(void)//当手按下后红灯亮10s;
{
chari,t;
N=10;
dx_R=1;dx_Y=0;dx_G=0;
nb_R=1;nb_Y=0;nb_G=0;
for(i=N;i>0;i--)//消振;
{
t=60;
while(t--)display(i);
}
}
(4)显示模块
voiddisplay(chardat)
{
led_A=led_B=0;
P2=0XFF;//初始点亮两块LED
P2=~tab_disp[dat/10];//求LEDA上显示计时的十位数
if(dat/10)led_A=1;
delay(1000);
P2=0XFF;led_A=led_B=0;
P2=~tab_disp[dat%10];//LEDB上显示计时的个位数
led_B=1;
delay(1000);
四、运行调试
仿真成功。
功能实现。
五、心得体会
通过这次实现我熟悉了51单片机汇编语言程序的编写和单片机设计仿真工具PROTEUS的使用。
首先要尽可能地采用结构化的程序设计方法,将功能模块化,由不同的模块完成不同的功能;PROTEUS不仅是模拟电路,数字电路,模/数混合电路的设计与仿真平台,更是目前世界上最先进,最完整的多种型号单片机系统的设计与仿真平台。
它真正实现了在计算机上完成从原理图设计,电路分析与仿真,单片机代码级调试与仿真,系统测试与功能验证到形成PCB的完整的电子设计,研发过程。
通过这次交通灯的课程设计,使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。
使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。
综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。
在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。
还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能力得到了很好锻炼,能够为我们以后的工作于学习打下基础。
通过合作,我们的合作意识得到加强。
合作能力得到提高。
在设计的过程中,我们用了分工与合作的方式,每个人互责一定的部分,同时在一定的阶段共同讨论,以解决分工中个人不能解决的问题。
在设计的过程中我们还得到了老师的帮助与意见。
在学习的过程中,不是每一个问题都能自己解决,向老师请教或向同学讨论是一个很好的方法.
最后,对帮助我的所有同学和老师表示衷心的感谢!
六、参考文献
1、张毅坤.单片微型计算机原理及应用,西安电子科技大学出版社1998
2、余锡存曹国华.单片机原理及接口技术[M].陕西:
西安电子科技大学出版社,2000.7
3、雷丽文等.微机原理与接口技术[M].北京:
电子工业出版社,1997.2
4、余发山王福忠单片机原理及应用技术[M].徐州:
中国矿业大学出版社2008.
5、蔡伟智LED道路交通灯的研制液晶与显示第20卷第五期
6、刘乐善微型计算机接口技术及应用[M].北京:
华中科技大学出版社2004.
7、李伯成.基于MCS-51单片机的嵌入式系统的设计[M].北京:
电子工业出版社,2004.
8、吴黎明,王桂棠,洪添胜,等.单片机原理及应用技术[M].北京:
科学出版社,2005.
9、韩克,柳秀山,等.电子技能与EDA技术[M].广州:
暨南大学出版社,2004.
七、附录
7.1器材清单
7.2程序清单
#include
sbitADC_CS=P1^4
sbitADC_CLK=P1^5;
sbitADC_DI=P1^6;
sbitbeep=P1^7;
sbitbutton=P1^0;
sbitled_A=P3^0;//数码管
sbitled_B=P3^1;
sbitdx_R=P3^2;//东南西北红绿黄三种led灯的定义
sbitdx_Y=P3^3;
sbitdx_G=P3^4;
sbitnb_R=P3^7;
sbitnb_Y=P3^6;
sbitnb_G=P3^5;
charN=25;//定义初始的倒计时25s
unsignedchardata1,time
chartab_disp[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x80};//共阴极
/*延时子函数*/
voiddelay(intt){while(t--);}
//ADC0832的模拟量读取
intADC_0832(void)
{
chari;
ADC_CS=0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用.
ADC_CLK=0;
ADC_DI=1;
ADC_CLK=1;
ADC_CLK=0;//1down
ADC_DI=1;
ADC_CLK=1;
ADC_CLK=0;//2down
ADC_DI=0;
ADC_CLK=1;
ADC_CLK=0;//3down
ADC_DI=1;
ADC_CLK=1;
ADC_CLK=0;//4down
for(i=8;i>0;i--)
{
data1<<=1;
ADC_CLK=0;
ADC_CLK=1;
if(ADC_DI==1)data1|=0x01;
ADC_DI=1;
}
ADC_CS=1;
returndata1;
}
//初始化中断定时器,保证1s中刷新一次
voidinit(void)//声明中断初始化
{
EA=1;//中断总开关
EX0=0;//关中断0开关
IT0=1;//下降沿有效
TMOD=0x01;//T0方式1
ET0=1;
TH0=0x9e;//初始值25ms12M
TL0=0x58;
EX0=1;TR0=1;
}
//显示模块,两个数码管显示数据
voiddisplay(chardat)
{
led_A=led_B=0;
P2=0XFF;
P2=~tab_disp[dat/10];
if(dat/10)led_A=1;
delay(1000);
P2=0XFF;led_A=led_B=0;
P2=~tab_disp[dat%10];
led_B=1;
delay(1000);
}
//延时消振
voiddeal(charm)
{
intt=60;
while(t--)display(m);
}
/*当手按下后红灯亮10s操作*/
void_red(void)
{
chari,t;
N=10;
dx_R=1;dx_Y=0;dx_G=0;
nb_R=1;nb_Y=0;nb_G=0;
for(i=N;i>0;i--)
{
t=60;
while(t--)display(i);
}
}
/*主函数*/
voidmain(void)
{
chari;
init();//初始化
while
(1)
{
dx_R=1;dx_Y=0;dx_G=0;
nb_R=0;nb_Y=0;nb_G=1;
for(i=N;i>0;i--)
{
deal(i);
}
dx_R=1;dx_Y=0;dx_G=0;
nb_R=0;nb_Y=1;nb_G=0;
N=5;
for(i=N;i>0;i--)
{
deal(i);
}
dx_R=0;dx_Y=0;dx_G=1;
nb_R=1;nb_Y=0;nb_G
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 自动 交通管理 系统 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)