基于单片机的交通灯显示系统的设计及研究.docx
《基于单片机的交通灯显示系统的设计及研究.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯显示系统的设计及研究.docx(25页珍藏版)》请在冰豆网上搜索。
![基于单片机的交通灯显示系统的设计及研究.docx](https://file1.bdocx.com/fileroot1/2023-4/16/18713d14-9cf7-4bfe-87c9-4d263ba3e2ea/18713d14-9cf7-4bfe-87c9-4d263ba3e2ea1.gif)
基于单片机的交通灯显示系统的设计及研究
萍乡学院课程设计
课程单片机课程设计
题目交通灯系统
院系机电系
专业班级
学生姓名
学生学号
指导教师
2016年03月20日
目录
摘要3
引言3
1.设计目的4
2.设计要求4
3.系统总体方案硬件设计4
3.1设计思想及总体设计4
3.2硬件设计5
3.3复位电路9
3.4数码管显示9
3.5红绿灯显示10
3.6键盘:
独立键盘+中断10
3.7系统原理图11
4软件设计11
4.1总体流程11
4.2循环流程控制思路12
4.3源程序12
5调试运行17
5.1正常运行状态17
5.2左右行显示18
5.3黄灯闪烁显示18
6.设计心得体会19
7参考文献19
摘要
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
本系统采用单片机AT89C51为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展强。
本设计就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间。
本设计系统由单片机,交通灯状态显示系统、LED数码显示系统等几大部分组成。
系统除基本的交通灯功能外,还具有倒计时、紧急情况处理等功能,较好的模拟实现了十字路口可能出现的状况。
本系统采用单片机C语言编写,主要编写了主程序,LED数码管显示程序等。
总体上完成了软件的编写。
关键词:
交通灯;控制;AT89C51;倒计时显示
引言
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果交通信号灯在大多数城市得到了广泛的应用。
传统的交通信号灯控制一般采用了电子线路和继电器控制,结构复杂,可靠性低,故障率高。
本次设计是基于AT89C51单片机的交通灯控制系统,东西南北的通行时间可调,倒计时显示通行时间灯功能,该系统具有设计周期短、可靠性高维护方便、使用简单等优点。
1.设计目的
1.1巩固和加深对单片机原理和接口技术知识的理解;
1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;
1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;
1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;
1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
2.设计要求
1)东西干道和南北干道的通行分左行,右行,直行,其中左行,右行固定15秒;直行固定30秒。
2)信号灯分绿灯,红灯,黄灯,每次绿灯换红灯时,黄灯亮3秒。
3)东西干道和南北干道交替控制,每次干道绿灯交替时,有3秒钟所有干道的交通灯都是黄灯闪烁3秒钟,提示已经进入路口的车辆迅速通过。
4)当遇到突发状况时,各个方向静止通行,显示红灯,并维持5秒倒计时。
3.系统总体方案硬件设计
3.1设计思想及总体设计
1)分析目前交通路口的基本控制技术以及各种通行方案,并以此为基础提出自己的交通控制的初步方案。
2)确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,在这里,本设计除了有信号灯状态控制能实现基本的交通功能,还增加了倒计时显示提示。
3)进行显示电路,灯状态电路,按键电路的设计和各器件的选择及连接,大体分配各个器件及模块的基本功能要求。
4)进行软件系统的设计,对于本系统,本人采用C语言编写,对单片机内部结构和工作情况做了充足的研究,了解定时器,中断以及延时原理,总体上完成了软件的设计。
图1系统框图
3.2硬件设计
1)单片机选型:
AT89C51
与MCS-51单片机产品兼容,8k字节在系统可编程Flash存储器,1000次可檫写周期,全静态操作:
0Hz~33Hz,三级加密程序存储器,32个可编程I/O口线,三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
功能特性描述:
AT89C51是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89C51具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89C51可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8位微控制器8K字节在系统可编程FlashAT89C52
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个
TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节。
引脚号第二功能
P1.0T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5MOSI(在系统编程用)
P1.6MISO(在系统编程用)
P1.7SCK(在系统编程用)
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个
TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)
时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89C51特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
端口引脚第二功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INTO(外中断0)
P3.3INT1(外中断1)
P3.4TO(定时/计数器0)
P3.5T1(定时/计数器1)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST——复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。
FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
引脚图如下:
图289C51引脚图
3.3复位电路
图3复位电路
当8051的ALE及/PSEN两引脚输出高电平,RST引脚高电平到时,单片机复位。
RST/VPD端的高电平,若直接由启动瞬间产生,则为启动复位,若通过按动按钮产生高电平复位称手动复位。
图中,上电时,接通电源,电容器C相当于瞬间短路,+5V加到了RST/VPD端,该高电平使8051全机复位。
若运行过程中,需要程序从头执行,只需按动按钮S,则直接把+5V加到了RST/VPD端,从而复位。
显然,该电路即可以上电复位,也可以手动复位,是常用复位电路之一。
3.4数码管显示
图4数码管显示
此处采用的数码管时共阴极数码管,G、F、E、D、C、B、A七个端口是输入端口,对其各位进行赋值,置位则亮,复位则灭,用此来显示出相应的数字;1、2两端用来控制高位和低位的选通显示,只要对端口置位,便可以选择该端口,并对其所代表的位进行赋值,显示。
正常通行状况下,数码管从30秒开始倒计时,各个方向,对应点亮红绿黄灯。
遇到突发状况,数码管从5秒开始倒计时,各方向禁止通行,点亮红灯。
3.5红绿灯显示
图5红绿灯显示
每个路口都采用了3个LED灯来显示,分别代表红绿黄三种灯,来模拟路口交通的变换。
其中D7和D8表示转弯模块。
以南北方向举例,正常状况下,从30秒开始倒计时,南北方向可直行,即绿灯(D6)亮起,东西方向禁止通行,亮红灯(D2)。
当显示至15秒时,南北方向可直行和转弯,即两个绿灯(D6和D7)亮起,东西方向禁止通行,亮红灯(D2)。
当显示至3秒时,通知车辆快速通过,南北黄灯(D5)闪烁,东西方向禁止通行,亮红灯(D2)。
3.6键盘:
独立键盘+中断
图6独立键盘+中断
采用开关来控制进入中断,可以在路口出现紧急情况时,拉动开关。
使红绿灯发生相应的改变,已处理紧急情况下车辆通行。
当发生突发情况时,如救护车通过,接通上面的按键,各个方向中止当前状态,即禁止通行,各个方向点亮红灯,并维持5秒倒计时。
当结束5秒倒计时,各个方向恢复到中止前的状态。
3.7系统原理图
图7总电路图
4软件设计
4.1总体流程
图8流程图
4.2循环流程控制思路
图9流程控制图
4.3源程序
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
uchartemp,aa,nn;
sbitrn=P2^0;
sbitnb=P2^1;
sbitgn=P2^2;
sbitrw=P2^3;
sbitdx=P2^4;
sbitgw=P2^5;
sbitshi=P3^6;
sbitge=P3^7;/*对要使用的单片机各个口进行定义*/
bitflag=0;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*将数字0123456789的16进制数定义成数组用以显示*/
voiddelay(uintz);
voiddisp(uintn);
voidnb_flash(void);
voiddx_flash(void);
voidxint0();
voidtimer0();
voidLED_ON();
voidxint1();
voidnanbei();
voiddongxi();/*将所使用的子函数定义*/
voidmain()
{
uintnum;
num=0;
aa=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
EX0=1;
IT0=0;
EX1=1;
IT1=1;/*中断初始化*/
while
(1)
{
nanbei();
nb_flash();
dongxi();
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==9)
{
aa=0;
flag=1;
}
}
voiddisp(uintn)/*显示子函数*/
{
while(!
flag)
{
ge=0;
P0=table[n%10];
delay(50);
shi=1;ge=1;
shi=0;
P0=table[n/10];
delay(50);
shi=1;ge=1;
}
if(flag==1)
flag=0;
}
voidnanbei()/*南北方向的红绿灯和数码管显示子函数*/
{
uintnum;
num=30;
disp(num);
while(num<=30&&num>15)
{
num--;
P2=0xf3;
disp(num);
}
while(num<=15&&num>4)/*南北方向及转弯的红绿灯和数码管显示子函数*/
{
num--;
P2=0xb3;
disp(num);
}
}
voidnb_flash(void)/*南北方向的黄灯和数码管显示子函数*/
{
uinta;
for(a=3;a>0;a--)
{
P2=0xf5;
nb=1;
delay(100);
nb=0;
disp(a);
}
}
voiddongxi()/*东西方向的红绿灯和数码管显示子函数*/
{
uintnum;
num=30;
while(num<=30&&num>15)
{
P2=0xde;
disp(num);
num--;
}
while(num<=15&&num>3)/*东西方向及转弯的红绿灯和数码管显示子函数*/
{
num--;
P2=0x5e;
disp(num);
}
while(num<=3&&num>0)/*东西方向的黄灯和数码管显示子函数*/
{
P2=0xee;
dx=1;
delay(100);
dx=0;
disp(num);
num--;
}
}
voidxint0()interrupt2/*中断定义*/
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
LED_ON();
}
voidLED_ON()
{
uintb;
rn=0;
rw=0;
gn=1;
gw=1;
nb=1;
dx=1;
for(b=5;b>0;b--)
{
ge=0;shi=1;
P0=table[b];
delay(1000);
ge=1;shi=1;
}
return;
}
5调试运行
5.1正常运行状态
图10正常运行状态
5.2左右行显示
图11左右行显示
5.3黄灯闪烁显示
图12黄灯闪烁显示
6.设计心得体会
一周的单片机课程设计很快就结束了,在这一周当中,虽然开始有点困难,但是经过我们们分工合作,合理地进行设计安排,再加上老师的耐心指导,我们们终于顺利地完成了本次单片机课程设计,同时也学到了很多东西。
在本次课程设计中,我们通过动手实践操作,进一步学习和掌握了单片机原理的有关知识,特别是程序的编程方面,加深了对单片机原理及应用技术的认识,进一步巩固了对单片机知识的理解,掌握简单单片机应用系统的设计、制作、调试的方法。
在设计时根据课题要求,复习相关的知识,查询相关的资料。
根据实验条件,找到适合的方案,找到需要的元器件及工具,进行实验。
这次的单片机课程设计重点是通过实践操作和理论相结合,提高动手实践能力,提高科学的思维能力,更在一周的时间了解了更多的有关单片机的知识,使知识更加丰富,使自己更加充实。
与此同时,我们也对团队分工合作有了进一步的认识,只有通过合理的分工合作,我们们才能够在短短一周的时间内完成设计任务,相信这对以后在社会上工作和学习会有很多帮助,让我们能更好的进入工作状态。
最重要的是,这次课程设计也增加了我们对问题的研究和探讨,们以后的学习中会有更多的帮助。
单片机为我们的主要专业课之一,但要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我们受益终身。
在完成单片机课程设计后,我们们发现我们们还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能被动完成。
但通过学习这一次实践,增强了我们们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。
从中增强了我们的团队合作精神,并让我们们认识到把理论应用到实践中去是多么重要。
7参考文献
[1]李全利.《单片机原理及应用》(C51)高等教育出版
[2]刘海宽.包建华.张兴奎.南京东南大学出版社.2009.1
[3]郭天祥.新概念51单片机C语言教程北京:
电子工业出版社2009.1
[4]张洪润.单片机原理及应用系统.北京:
机械工业出版社,2004.2
[5]胡雪梅.单片机原理及应用.北京:
清华大学出版社,2009.5
[6]穆兰.单片机原理及接口技术.北京:
机械工业出版社,2006.5
附件1评价表
萍乡学院课程设计成绩评价表
课程名称
题目名称
学生姓名
学号
指导教师姓名
序号
评价项目
指标
满分
评分
1
工作量、工作态度和出勤率
按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。
20
2
课程设计质量
课程设计选题合理,计算过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。
60
3
仿真实践
设计的硬件和程序在proteus能仿真运行,效果良好。
20
总分
评语:
指导教师:
年月日
附件2任务书
萍乡学院课程设计任务书
课程
题目
专业姓名学号
主要内容、基本要求、主要参考资料等
完成期限
指导教师
专业负责人
年月日