单片机交通灯课程设计.docx
- 文档编号:18240231
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:18
- 大小:178.14KB
单片机交通灯课程设计.docx
《单片机交通灯课程设计.docx》由会员分享,可在线阅读,更多相关《单片机交通灯课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
单片机交通灯课程设计
单片机课程设计
带时间显示的交通灯设计
系、部:
学生姓名:
指导教师:
职称
专业:
电气自动化技术
班级:
学号:
完成时间:
2011-11-24
附录:
原理图17
第一章引言
1.1:
传统交通灯的简介
在今天,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师,纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两灯以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
1914年,电气启动的红绿灯出现在美国。
这种红绿灯由红绿黄三色圆形的投光器组成,安装在纽约市5号大街的一座高塔上。
红灯亮,表示“停止”,绿灯亮,表示“通行”。
而中国最早的马路交通灯却是诞生于1928年的上海英租界。
从最早的手牵皮带到20世纪50年代的电气控制,从采用计算机控制到现代化的电子定时监控,交通信号灯在科学化、自动化上不断地更新、发展和完善。
但是,随着社会的不断进步,传统的交通灯的缺陷也日益出现,其中设计过于死板,达不到道路的最大通行效率是最明显的问题,红绿灯交替变换时间过于程式化。
随着我国经济的高速发展,人们对各种交通车辆的需求量不断增大,城市的交通拥护问题日益严重,目前,大部分城市的十字路口的交通控制灯,通常的做法是:
事先经过车辆流量的调查,利用传统的方法设计好红绿灯的延时,然而,实际上的车流量是不断变化的,有的路口在不同的时间段车流量的大小甚至有很大的差异,所以说,统计的方法已不能适应迅速发展的交通现状。
1.2基于单片机的智能交通灯控制系统设计的意义
目前,国内的交通灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯。
加上一个倒计时的显示计时器来控制行车。
对于一般情况下的安全行车,车辆分流尚能发挥作用,但根据实际行车过程中出现的情况,还存在以下缺点:
1.两车道的车辆轮流放行时间相同且固定,在十字路口,经常一个车道为主干道,车辆较多,放行时间应该长些;另一车道为副干道,车辆较少,放行时间应该短些。
2.没有考虑紧急车通过时,两车道应采取的措施,臂如,消防车执行紧急任务通过时,两车道的车都应停止,让紧急车通过。
针对道路交通拥挤,交叉路口经常出现拥堵的情况。
利用单片机控制技术.提出了软件和硬件设计方案及两点改进措施:
1、根据各道路路口车流量的大小自动调节通行时间。
2、考虑特殊车辆通行情况,设计紧急切换开关。
第二章智能交通灯控制系统设计流程
目前,国内的交通灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯。
加上一个倒计时的显示计时器来控制行车。
对于一般情况下的安全行车,车辆分流尚能发挥作用,但根据实际行车过程中出现的情况,还存在以下缺点:
1.两车道的车辆轮流放行时间相同且固定,在十字路口,经常一个车道为主干道,车辆较多,放行时间应该长些;另一车道为副干道,车辆较少,放行时间应该短些。
2.没有考虑紧急车通过时,两车道应采取的措施,臂如,消防车执行紧急任务通过时,两车道的车都应停止,让紧急车通过。
2.1、设计目的
1.巩固《单片机技术》课程所学的有关知识。
2.通过硬件设计、软件设计,使学生掌握用单片机组成应用系统的方法,提高软件设计能力。
3.掌握单片机用于各种功能控制的方法。
4.学会产品设计方法。
2.2单片机实现交通灯的任务
系统完成内容如下:
1南北方向:
绿灯亮30S放行,黄灯亮4S警告,然后红灯亮54S禁止。
2东西方向:
绿灯亮50S放行,黄灯亮4S警告,然后红灯亮34S禁止。
3.南北方向红灯亮时,同时用2位LED进行54S递减时间显示。
4.东西方向红灯亮时,同时用2位LED进行34S递减时间显示。
5.单片机程序设计、调试。
第三章智能交通灯控制系统的硬件设计
3.1AT89S52单片机简介
AT89S52是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S52单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
3.2AT89S52单片机的主要性能参数
与单片机产品兼容8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
3.3AT89S52芯片内部结构简介
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(内部RAM):
数据存储器用于存放变化的数据。
AT89S52中数据存储器的地址空间为256个RAM单元,但其中能作为数据存储器供用户使用的仅有前面128个,后128个被专用寄存器占用。
程序存储器(内部ROM):
程序存储器用于存放程序和固定不变的常数等。
通常采用只读存储器,且其又多种类型,在89系列单片机中全部采用闪存。
AT89S52内部配置了4KB闪存。
定时/计数器(ROM):
定时/计数器用于实现定时和计数功能。
AT89S52共有2个16位定时/计数器。
并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
每个口都由1个锁存器和一个驱动器组成。
它们主要用于实现与外部设备中数据的并行输入与输出,有些I/O口还有其他功能。
全双工串行口:
A89S51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
时钟电路:
时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。
中断系统:
中断系统的作用主要是对外部或内部的终端请求进行管理与处理。
AT89S52共有5个中断源,其中又2个外部中断源和3个内部中断源。
图一AT89S52系列单片机的内部结构示意图
3.4主要引脚功能
AT89S52引脚图如图二所示:
图二引脚图
·VCC:
电源电压
·GND:
地
·P0口:
P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
·P1口:
Pl是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
Flash编程和程序校验期间,Pl接收低8位地址。
表1具有第二功能的P1口引脚
端口引脚
第二功能:
P1.5
MOSI(用于ISP编程)
P1.6
MOSI(用于ISP编程)
P1.7
MOSI(用于ISP编程)
·P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其它控制信号。
·P3口:
P3口是一组带有内部上拉电阻的8位双向I/0口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。
作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如下表所示:
表2具有第二功能的P1口引脚
端口引脚
第二功能:
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外中断0)
P3.3
/INT1(外中断1)
P3.4
T0(定时/计数器0外部输入)
P3.5
T1(定时/计数器1外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD外部数据存储器读选通)
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
·RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRT0位(地址8EH)可打开或关闭该功能。
DISRT0位缺省为RESET输出高电平打开状态。
·ALE/————PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
·————PSEN程序储存允许(————PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次————PSEN有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的————PSEN信号。
·——EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。
F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。
·XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
第四章智能交通灯系统源程序
///////智能交通信号灯程序
#include
#defineucharunsignedchar
#defineuintunsignedint
voidDisp(uintdisp_value);
voidBcd(uintbcd_value);
voidDelay_ms(uintdelay);
bitflag1;
sbitp32=P3^2;
uintcunt;/////累计中断次数变量
ucharcodeLED_Val[]={0xc0,0xf9,0xa4,0x0b0,0x99,0x92,0x82,0x0f8,0x80,0x90};//0-9共阳极
//ucharcodeLED_Val[]={0x3f,0x06,0x5b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9共阴极
uchardatanum[2];
uchardataled_point[4]={0xfe,0xfd,0xfb,0xf7};//三极管控制数码管的信号
voidpass_a(uinttime);
voidpass_b(uinttime);
voidstop_ab(void);
uintsecond;
sbitp10=P1^0;
sbitp11=P1^1;
sbitp12=P1^2;
sbitp13=P1^3;
sbitp14=P1^4;
sbitp15=P1^5;
sbitp16=P1^6;
sbitp20=P2^0;
sbitp21=P2^1;
sbitsa=P3^0;
sbitsb=P3^1;
sbitp35=P3^5;
////////////////////////
voidSystem_Init()///中断初始化定时器初始化
{
/////中断
EA=1;//CPU开放中断
EX0=1;//允许外部中断0(INT0)
EX1=1;
IT0=1;//边沿触发方式
IT1=1;
PX0=1;//优先级
PX1=1;
////定时器
TMOD=0x10;//方式1(16位定时器)
TH1=-50000/256;//50ms
TL1=-50000%256;
ET1=1;//定时器1(P3.5)允许溢出中断
TR1=1;//定时器1运行
}
///////////////////////////////
voidDelay_ms(uintdelay)///延时
{
ucharj;
while(delay--)
{
for(j=125;j>0;j--)
{;}
}
}
/////////////////////////////////
voidDisp(uintdisp_value)
{
uchari;
P2=1;
Bcd(disp_value);
for(i=0;i<2;i++)
{
P0=LED_Val[num[i]];//P0显示数字在LED上
P2=led_point[4];
Delay_ms
(2);//控制好延时时间使眼睛看到的像为静态的
}
}
//////////////////////////////////
voidBcd(uintbcd_value)//把两位数分离成4个元素由数组NUM保存
{
num[0]=bcd_value/1000;
num[1]=(bcd_value%1000)/100;
num[2]=((bcd_value%1000)%100)/10;
num[3]=((bcd_value%1000)%100)%10;
}
//////////////////////////////////
voidInit0_Srv(void)interrupt0using0
{
flag1=~flag1;
}
/////////////////////////////////
voidT1_Srv(void)interrupt3/////1秒累加,50MS触发一次
{
staticucharcount;
TH1=-50000/256;
TL1=-50000%256;
count++;
if(count==20)
{
count=0;
second++;
if(second==100)second=0;
}
}
/////////////////////////////////
voidpass_a(uinttime)//A路口状态60秒
{
uinti=1;
second=0;
while(i)
{
i=time-second;
Disp(i);
if(sa==1)p35=0;
if(sb==1)p35=0;
if(i>5)
{
P1=0xde;
}
else
{
P1=0xdd;
}
}
}
voidpass_b(uinttime)//B路口状态30秒
{
uinti=1;
second=0;
while(i)
{
i=time-second;
Disp(i);
if(i>5)
{
P1=0xf3;
}
else
{
P1=0xeb;
}
}
}
voidstop_ab(void)//通过紧急车辆状态
{
while(flag1)
{
P1=0xdb;
Disp(0);
}
}
/////////////////////////////////
voidmain()
{
System_Init();
flag1=0;
cunt=0;
P2=1;
while
(1)
{
if(flag1)
{
stop_ab();
}
else
{
pass_a(60);
pass_b(30);
}
}
Disp(60);
}
第五章系统仿真图
第六章课设总结
这次课程设计历时一个星期,通过这个星期的学习,发现了自己的很多不足,无论是对知识的理解还是实践能力以及理论联系实际的能力还急需提高。
在这个过程中,我也曾经因为错误失落过,也曾经因为小有成绩而热情高涨。
正如生活一样,汗水预示着结果也见证着收获。
虽然这只是一次的极简单的课程设计,可是平心而论,也耗费了我们不少的心血,这才意识到老一辈对我们社会的付出,为了人们的生活更美好,他们为我们社会所付出多少心血啊!
通过这次课程设计,我感到:
为完成这次课程设计我们确实很辛苦,但苦中仍有乐,和团队人员这几天的一起工作的日子,让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的设计,我感觉我和同学们之间的距离更加近了。
这个工程确实很累,但当我们实验成功的时候,我们的心中就不免兴奋,不免激动。
以前种种艰辛这时就变成了最甜美的回忆!
对我而言,知识上的收获重要,精神上的丰收更加可喜。
让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为我人生旅途上一个非常美好的回忆!
参考资料
[1]李广弟,朱月秀,王秀山编著《.单片机基础》.北京:
北京航空航天大学出版社,2001
[2]马忠梅编著《单片机的C语言应用程序额设计》北京:
北京航空航天大学出版社,2001
致谢
廖代文老师
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 交通灯 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)