基于单片机的交通灯的设计.docx
- 文档编号:24704323
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:23
- 大小:327.14KB
基于单片机的交通灯的设计.docx
《基于单片机的交通灯的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯的设计.docx(23页珍藏版)》请在冰豆网上搜索。
基于单片机的交通灯的设计
北方民族大学
课程设计报告
院(部、中心)电气信息工程学院
姓名学号20100259
专业测控技术与仪器班级测控技术与仪器101
同组人员
课程名称
设计题目名称
起止时间 2012.12.27---2013.1.1
成绩
指导教师签名
北方民族大学教务处制
教师评语:
报告成绩(30%)
平时成绩(50%)
答辩成绩(20%)
总评成绩
目录
一:
设计方案及思路
(1)设计方案····················································4
(2)设计思路····················································4
二:
硬件设计···················································5
(1)系统构成·····················································5
(2)七段数码管···················································5
(3)发光二极管···················································5
(4)晶振作用······················································6
(5)手动按钮复位··················································6
(6)控制端口······················································6
(7)74HC573驱动端口··············································7
三:
软件设计··················································7
(1)流程设计······················································7
(2)Protel99SE图·················································8
(3)PCB图·······················································9
(4)Proteus7Professional仿真图·······································9
(5)程序设计·····················································10
四:
实物······················································17
(1)实物图···················································17
(2)电源实物图···············································17
五:
元器件清单··············································18
六:
设计感想·················································18
七:
参考文献·················································19
一、设计方案及思路
(1)设计方案
设计本系统能够实现带倒计时的A、B两个方向车辆绿灯通行、红灯停止的基本功能,并具备紧急中断功能。
1)起始状态为A方向红灯,倒计时显示为15,B方向为绿灯,倒计时显示为12。
2)按下开关K1:
电路正常运行
3)按下开关K2:
紧急中断,A、B方向倒计时停。
4)按下开关K3:
紧急情况,黄灯全亮。
5)按下开关K4:
解除中断,再次按下开关K1,系统恢复中断前状态。
(2)设计思路
设计出来的作品是根据实际需要来执行其相应功能的。
每当我们站在十字路口等待绿灯时,各个路口的交通灯都会很规律的变化,归纳就是如下三个功能。
倒计时功能:
根据国家标准和道路的实际情况,数码管采用两位共阴数码管就能满足需要,它能够提醒驾驶者通行和停止的剩余时间,帮助驾驶者在复杂的道路情况下做出通行或者停车的合适选择,这种直观的显示使得路口更加畅通,有效的保障了人们的生命安全。
信号等变化:
机动车信号灯和非机动车信号灯表示:
绿灯亮时,准许车辆通行,但转弯的车辆不得妨碍被放行的直行车辆、行人通行;黄灯亮时,已越过停止线的车辆可以继续通行;红灯亮时,禁止车辆通行。
在本设计中,设有红绿黄三种LED灯。
紧急中断:
交通路口出现紧急状况在所难免,如特大事件发生,消防车、救护车等急行车通过时,应该保证车辆的顺利通行,毕竟这种情况应该是分秒必争的,时时刻刻关系着公共财产安全和个人安危。
因此需要在设计中加入按键进行中断控制,当紧急情况发生时,各路口全部黄灯,倒计时显示停在当前时间。
路面情况正常后,再次按键,交通灯恢复中断前状态,数码管继续倒计时。
二、硬件设计
(1)系统构成
交通灯控制系统可用单片机直接控制信号灯的状态变化,又接入数码管就可以显示倒计时以提醒驾驶者,更具人性化。
增加按键中断,可以对紧急事件进行控制。
单片机电路主要完成的任务是控制红绿灯的规律转换,数码管倒计时的显示和中断延时控制。
整个系统由单片机电路、数码管倒计时显示电路、LED红绿灯、中断按键、电源和串口通讯等部分构成。
系统硬件框图如图2-1所示。
图2-1系统硬件框图
(2)七段数码管
LED有着显示亮度高、响应速度快的特点,最常用的是七段式LED显示器,又称数码管。
七段式LED显示器内部由7个条形发光二极管和一个小圆点发光二极管组成,根据各管亮暗组成字符。
显示原理是通过同名管脚上所加电平的高低来控制发光二极管是否点亮,而显示不同的字形。
(3)发光二极管
发光二极管因其驱动电压低、功耗小、寿命长、可靠性高等优点广泛应用于显示电路中。
发光二极管具有单向导电性,红色一般开启电压在1.6~1.8V之间,正向电流越大,发光越强。
使用时,应特别注意不要超过最大功耗、最大正向电流和反向击穿电压等极限参数,因此我们添加了保护电阻。
电路连接时,将发光二极管正极接电源,负极接,再接P1.0——P1.5,依次为A方向绿黄红灯,B方向绿黄红灯。
(4)晶振作用:
给单片机正常工作提供稳定的时钟信号。
原理:
在石英晶体的两个极板上加一个电场,晶片会产生机械变形,对极板施加机械力使其变形,又会在极板上产生相应的电荷,这叫压电效应。
如果在两个极板上加上交变的电压,晶片便会产生机械变形震荡,同时这种机械震荡还会产生交变的电场(比较的微小),但是当外加交变的电压的频率与晶片固有的频率(由其形状和尺寸决定)相等时,机械振动的幅度会加剧,产生交变电场也增大。
叫做压电谐波。
(5)手动按钮复位
手动按钮复位需要人为在复位输入端RST上加入高电平。
一般采用的办法是在RST端和正电源Vcc之间接一个按钮。
当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。
手动按钮复位的电路如所示。
由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。
(6)控制端口
(7)74HC573驱动端口
三.软件设计
(1)流程设计
图3-1软件总体流程
图3-2紧急通车中断流程
(2)Protel99SE图
(3)PCB图
(4)Proteus7Professional仿真图
(5)程序设计
/**************************************************************
1,key1:
正常工作方式"急车强行通过"
2,key2:
目前道路正在使用的工作方式
3,key3:
小型路口,黄闪,自己人为判断解决
4,key4;交通灯,解决十字路口绿灯时:
左,右行车辆和人的矛盾
(因为目前人通过马路是和主干道绿灯保持一致,左转车也和绿灯保持一致
)
*****************************************************************/
#include
#defineuintunsignedint
#defineucharunsignedchar
#definetime45872
#defineON0
#defineOFF1
sbitEWR=P1^0;//东西红灯
sbitEWY=P1^1;//东西黄灯
sbitEWG=P1^2;//东西绿灯
sbitNSR=P1^3;//南北红灯
sbitNSY=P1^4;//南北黄灯
sbitNSG=P1^5;//南北绿灯
sbitEWB=P1^6;//东西蓝灯
sbitNSB=P1^7;//南北蓝灯
sbitkey4=P3^4;//交通灯,解决十字路口绿灯时:
左,右行车辆和人的矛盾
sbitkey3=P3^5;//小型路口,黄闪,自己人为判断解决
sbitkey2=P3^6;//启动目前正常工作方式
sbitkey1=P3^7;//正常工作方式"急车强行通过"
/*===============倒计时=========================*/
uintN=15,Y=12,Z=15,M=27,G=30,U=30,NBB=5,DXB=20;//南北,东西
/*****NZ南北18秒Y东西12秒M=12+3+12;G=U=15+15,NBB:
******
****南北蓝灯,DXB:
东西蓝灯。
蓝色(人通过5)蓝灭(车过8)*******/
uintC50ms=0;
voidInitialT1()//初始化
{
TMOD=0x10;//选择定时器方式
TH1=(65536-time)/256;
TL1=(65536-time)%256;
EA=1;//开总中断
ET1=1;//开定时器中断
TR1=1;//启动定时器
}
voidISRT1()interrupt3
{
TH1=(65536-time)/256;
TL1=(65536-time)%256;
C50ms++;//循环改变量,初始值为0。
if(C50ms>19)
{
C50ms=0;//清0,在计时
N--;
M--;
NBB--;
Y--;
Z--;
G--;
U--;
DXB--;
}
}
/*=================延时=======================*/
voidDelay10uS(uintsecond)
{
uinti,j;
for(i=second;i>0;i--)
for(j=110;j>0;j--);
}
/*==================led控制========================*/
ucharcodediscode[10]={0x13,0xf3,0x89,
0x91,0x71,0x19,0x09,0xb3,0x01,0x11};
uintnum1,num2,num3,num4;
voiddisplay(uintnum1,uintnum2,uintnum3,uintnum4)
{
P2=0x1f;
P0=discode[num1];
Delay10uS
(1);
P2=0x2f;
P0=discode[num2];
Delay10uS
(1);
P2=0x4f;
P0=discode[num3];
Delay10uS
(1);
P2=0x8f;
P0=discode[num4];
Delay10uS
(1);
}
//紧急情况通路
voidscan()
{
uchark;
k=P1;//K存放按下前的值
if(key1==0)
{
Delay10uS(5);
if(key1==0)//判断key1按下
{
/*======初始状态:
东西南北都红灯==========*/
while(!
key1);//等待中断发生
TR1=~TR1;//1变为0关闭定时器
if(TR1==0)
{
P1=0xF6;//11110110
}
P1=k;//从被打断的地方继续亮灯
}
}
}
/*******************第一种**********************/
/***********************目前大街正常工作方式***************************/
/*******************************************/
voiddajie()
{
while
(1)
{
InitialT1();//初始化计时器
scan();
/*=============状态1:
东西绿灯(12s)南北红灯(15s)==================*/
/*=============状态2:
东西黄灯(3s)南北红灯(15s)=================*/
EWG=ON;
NSR=ON;
while(N!
=0)//南北15倒计时
{
scan();
display(N/10,N%10,Y/10,Y%10);
while(N==3)
{
scan();
while(Z!
=0)
{
scan();
display(N/10,N%10,Z/10,Z%10);
EWG=OFF;
EWY=ON;
}
}
}
NSR=OFF;
EWG=OFF;
EWY=OFF;
P0=0xff;//全关掉
/*=============状态3:
东西红灯(15s)南北绿灯(12s)==================*/
/*=============状态4:
东西红灯(15s)南北黄灯(3s)==================*/
EWR=ON;
NSG=ON;
while(G!
=0)
{
scan();
display(M/10,M%10,G/10,G%10);//南北绿灯(12s)
while(G==3)
{
scan();
while(U!
=0)
{
scan();
display(U/10,U%10,G/10,G%10);//南北绿灯(3s)
NSG=OFF;
NSY=ON;
}
}
}
EWR=OFF;
NSG=OFF;
NSY=OFF;
/*=====================重新赋值===============================*/
N=15,Y=12,Z=15,M=27,G=30,U=30;
}
}
/******************第二种*******************/
/***************小型路口,黄闪,自己人为判断解决*******************/
/*******************************************/
voidhuangsan()
{
EWY=0;
NSY=0;
Delay10uS(5);
EWY=1;
NSY=1;
Delay10uS(5);
}
/***************第三种**********************/
/**************************交通灯*********************************/
/*******************************************/
voidjiaotongdeng()
{
while
(1)
{
InitialT1();//初始化计时器
scan();
/*=============状态1:
东西绿灯(12s)南北红灯(18s)==================*/
/*=============状态2:
东西黄灯(3s)南北红灯(15s)=================*/
EWG=ON;
NSR=ON;
EWB=ON;
while(N!
=0)//南北15倒计时
{
scan();
display(N/10,N%10,Y/10,Y%10);
if(NBB==0)EWB=OFF;
while(N==3)
{
scan();
while(Z!
=0)
{
scan();
display(N/10,N%10,Z/10,Z%10);
EWG=OFF;
EWY=ON;
}
}
}
EWB=OFF;
NSR=OFF;
EWG=OFF;
EWY=OFF;
P0=0xff;//全关掉
/*=============状态3:
东西红灯(15s)南北绿灯(12s)==================*/
/*=============状态4:
东西红灯(15s)南北黄灯(3s)==================*/
EWR=ON;
NSG=ON;
NSB=ON;
while(G!
=0)
{
scan();
display(M/10,M%10,G/10,G%10);//南北绿灯(12s)
if(DXB==0)NSB=OFF;
while(G==3)
{
scan();
while(U!
=0)
{
scan();
display(U/10,U%10,G/10,G%10);//南北绿灯(3s)
NSG=OFF;
NSY=ON;
}
}
}
NSB=OFF;
EWR=OFF;
NSG=OFF;
NSY=OFF;
/*=====================重新赋值===============================*/
N=15,Y=12,Z=15,M=27,G=30,U=30,NBB=5,DXB=20;
}
}
voidmain()
{
if(key2==0)dajie();
if(key3==0)huangsan();
if(key4==0)chaungxinjiaotongdeng();
}
四.实物图
(1)实物图
(2)电源实物图
五.元器件清单
名称
型号
数量(个)
单片机
AT89C51
1
数码管(两位)
MT05621CR
4
发光二级管(红、黄、绿各三个)
LED
12
排阻
1K
1
74HC573
1
电阻
一个1k、一个10k
2
晶振
12M
1
电容
2个30pf、1个10uf
开关
2个四引脚、1个三引脚
六.设计感想
在写这份报告之时,我很想表达自己对组长马贵书的感谢。
长期以来,我们都是以学习理论为主,马贵书作为组长,很早就默默地开始了行动,他的行动也渐渐带动了队员们的行动。
“说起来容易,做起来难”,这句话就是我们实训开始时的最深的感受。
和课本上的知识,我们已经打了十几年的交道了,以至于,当我们拿到项目的一开始都不约而同地笑道,“就一个交通灯嘛,小意思!
”直到真正动手的时候,我们才明白,我们是多么的缺乏实践。
设计电路、布线,我们在电脑前整整呆了两个上午,选择元件、用protel软件画电路图及封装,还有最后的用proteus软件仿真,这一切简直就是对我们耐心和细心的考验,我现在还记得,每一次布线出现交叉提示时我们脸上沮丧的神情。
“没事,我们再来一次。
”这是队友们的相互鼓励。
有时,我们遇到了处理不了的问题,学长、学姐就细心的帮我们检查、调试。
我现在还记得当程序、电路一切准备就绪时,在新实验楼里,我们一起印板子的场景。
大家分工明确,腐蚀板子的腐蚀板子,打孔的打孔。
肚子饿了时,我们就一起在实验室里吃盒饭,大家的脸上挂满了信心和激情。
马贵书总是吐词不清的微笑着,张夏总是一言不发的微笑着,王斯博总是乐天的微笑着,马宝福总是一脸茫然的微笑着,我们就这样微笑着,始终不放弃,最后,将交通灯做了出来。
本以为一切已经结束了,谁知道,麻烦才刚刚开始。
我们的二极管可以正常的执行我们预期的功能,可是数码管却在捣乱。
问了毛院长,他判断是我们使用的代码不对,因为我们用的是共阴数码管,但是,代码是阳极管代码。
在马贵书的带领下,我们依旧没有气馁,继续分工合作,我们一遍一遍地检查电路板的焊接,由于我们单片机的知识有限,所以,我们请了学长们帮忙,虽然,还是整天关在实验室里和电脑、烙铁打交道,但是我们依旧很振奋,因为这一次,我们都成长了。
现在回想这次的实训,我们都变了,我们学会了真正的团队合作,我们也学会了在挫折面前绝不低头的精神,我们深信,我们一定可以做到最好!
这或许就是传说中的痛并快乐着吧!
七.参考文献
《单片机原理及实用技术》李刚民曹巧媛曹琳琳陈忠平编著高等教育出版社
参考网站
www.baidu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 交通灯 设计