51单片机交通灯设计报告.docx
《51单片机交通灯设计报告.docx》由会员分享,可在线阅读,更多相关《51单片机交通灯设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
51单片机交通灯设计报告
课程设计说明书
课程名称:
《单片机技术》
设计题目:
交通灯设计
学院:
电子信息与电气工程学院
学生姓名:
学号:
专业班级:
指导教师:
2017年4月20日
课程设计任务书
设计题目
交通灯电路设计
学生姓名
所在学院
电子信息与电气工程学院
专业、年级、班
设计要求:
1、设计制作一个给予单片机的交通灯设计;
2、能够根据时钟芯片提供的时间指标控制电路;
3、能够按照程序要求进行工作;
4、系统能够正常工作。
学生应完成的工作:
参考文献阅读:
[1]李建忠.单片机原理及应用[M].西安电子科技大学出版社,2008
[2]胡辉.单片机原理及应用设计[M].中国水利水电出版社,2006
[3]徐爱钧.8051单片机实践教程[M].北京电子工业出版社,2005
[4]楼然苗,李光飞.51系列单片机设计实例[M].北京航空航天大学出版社,2006
[5]邱关源.电路[M].北京:
北京高等教育出版社,2006
[6]张毅刚.单片机原理及接口技术.哈尔滨:
哈尔滨工业大学出版社,1999
[7]全国大学生电子设计竞赛组委会.北京:
北京理工大学出版社,2004年8月.
工作计划:
4月1号—4号完成原理图的设计;4月5号—7号进行PCB设计;4月8号—10号制作PCB板;4月11号—14号电路板安装与调试,提交课程设计报告。
任务下达日期:
2017年4月1日
任务完成日期:
2017年4月14日
指导教师(签名):
学生(签名):
交通灯设计
摘要:
近年来随着科技的发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面的知识是不够的,还应该根据具体硬件结构软硬结合,加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊,那么靠什么来实现这井然秩序呢?
靠的就是交通信号灯的自动指挥系统。
交通信号灯控制方式很多。
本系统采用51系列单片机ATMEL89C51为核心控制器件来设计交通信号灯控制器,实现亮绿灯通行,亮黄灯闪烁并发声警示,亮红灯禁止通行的功能,并显示通行或禁止通行倒计时,紧急按键信号灯加时和紧急按键南北、东西红绿灯跳变。
本系统使用性强,操作简单,容易实现,扩展功能强,可自行修改程序扩展自己想要实现的功能。
关键词:
交通灯,单片机,复位电路
1.设计背景
1.1设计原因
随着社会的进步,交通的高速发展,红绿灯已经成为了我们生活中不可或缺的一部分,如今,红绿灯已经安装在各个道路的交接口处,已经成为疏导交通车辆最常见和最有效的手段。
根据单片机具有物美价廉、功能强、使用方便灵活、可靠性高等特点,不少人提出了一种用S-51单片机自动控制交通信号灯及时间显示的方法,同时给出了软硬件的实现方法,为交通指挥自动化提供了一种新的廉价手段,具有一定的推广意义。
1.2个人意义
本设计是由单片机控制的交通信号灯,运用89S51单片机实现交通灯的控制,实现红绿灯自动跳变,倒计时显示,黄灯蜂鸣器警示灯功能。
在这次设计作品中,不仅可以增加对整套系统运行的合理安排,为未来做大的项目打下基础,也可以增加对软硬件的在系统中的作用的了解,同时也培养了我们团队的合作能力。
2.设计方案
2.1总体方案提出
实现一种系统功能或者技术指标都具有多种可行的设计方案,每一种设计方案针对不同的应用场合都具有它自己的缺点。
在设计的过程中要考虑到其功能,系统稳定性,技术指标,成本和所需要的技术条件等方面的因素。
方案一:
PLC控制交通灯
PLC主要应用于强电方面的工业控制,或者整条流水线的控制。
虽然比较稳定,但是功耗要大,成本也比较高。
方案二:
单片机控制交通灯
单片机具有结构简单、编程方便、经济、易于连接等优点,特别是其内部定时器计数器、中断系统资源丰富可对交通灯进行精确的控制,有应用价值,可扩展功能多,灵活性比较强,线路也非常简单,成本也是比较低的。
由于此次课程设计是单片机设计,还有结合从各方面优缺点来看,以及简便方面,成本方面,和结构、控制方面来看。
为了同时满足课程设计要求,综上所述,选择了方案二,做为本设计的方案选择。
2.2稳压电源方案设计与分析
方案一:
采用电源变压器,整流滤波电路和稳压电路,其中稳压电路是使用分立元件,通过取样,放大,比较和调整四个环节,晶体管选用3DD或3DG等型号
方案二:
采用电源变压器,整流滤波电路和稳压电路,其中稳压电路时使用集成电路LM7805三端稳压器,该电路能输出固定的正5V的直流电压,
方案一一般来说比较复杂,而且验证过程也比较麻烦且所有用到的分立元件较多且误差较多,因此不采用这种方案制作电源,方案二的电源设计较方案一结构简单,所用元器件比较少,且容易调试,因此,本次电源设计采用方案二。
2.3复位电路方案设计与分析
方案一:
根据复位原理,只需要在复位引脚提供两个机器周期以上的高电平信号,单片机便会从地址零开始运行。
对此,可以在复位引脚通过按键连接到电源正极,当按键按下的时候,复位引脚即可获得高电平信号,实现电路的复位。
方案二:
通过RC电路实现复位功能,当按键没有按下的时候,复位引脚时低电平,电容充满电,当按键按下的时候,电容放电,直至电容两端电压为零时,复位引脚才会达到5V的高电平信号。
方案一通过按键直接使复位引脚接收高电平信号,由于按键会产生机械震动,使得信号产生不稳定,电平信号宽度达不到两个机器周期以上,使得电路复位发生错位,方案二,利用电容两端电压不突变的特性,实现消除抖动,而且还有复位延时作用,消除了复位信号不稳定的因素,因此,该设计采用方案二的复位电路设计。
3.方案实施
3.1总体设计框图
交通灯组成框图,如图3-1所示
图3-1系统总体框图
据此,本设计系统以单片机为控制核心,连接成最小系统,和按键设置模块等产生输入,信号灯状态模块,LED倒计时模块和接受输出。
3.2硬件设计
3.2.1电源设计
电源电路采用拨动开关。
原理图部分如下:
图3.2.1电源电路
3.2.2复位电路设计
单片机在可靠的复位之后,才会从0000H地址开始有序的执行应用程序。
同时,复位电路也是容易受到外部噪声干扰的敏感部分之一。
因此,复位电路应该具有两个主要的功能:
1.必须保证系统可靠的进行复位;
2.必须具有一定的抗干扰的能力;
复位电路部分原理图如下:
图3.2.2复位电路
3.2.3时钟震荡电路设计
如下图3.2.3所示,晶振是给单片机提供工作信号脉冲的,这个脉冲就是单片机的工作速度,比如该系统采用的12M晶振,单片机工作速度就是每秒12M当然,单片机的工作频率是有范围的,不能太大,一般24M就不上去了,不然不稳定。
晶振与单片机的脚XTAL0和脚XTAL1构成的振荡电路中会产生偕波(也就是不希望存在的其他频率的波)这个波对电路的影响不大,但会降低电路的时钟振荡器的稳定性为了电路的稳定性起见ATMEL公司只是建议在晶振的两引脚处接入两个10pf-50pf的瓷片电容接地来削减偕波对电路的稳定性的影响,所以晶振所配的电容在10pf-50pf之间都可以。
图3.2.3时钟震荡电路
3.2.4数码管显示电路设计
数码管显示电路,通过P0口和P2口的控制输出,其中P0口要加多上拉电阻才能使用,由于其内部无上拉电阻,作为I/O用时候要加上拉电阻。
P0口作为显示倒计时的输出端口控制2个2位的数码管,其中还需要用到P3.7,P3.6,P3.5,P3.4来进行控制位选。
J2是东西显示数码管,J5是南北显示数码管,REDCC是流量显示数码管,P2口接流量显示数据。
电路接线图如下3.2.4所示:
图3.2.4数码管显示电路
3.2.5红绿灯显示电路设计
红绿灯电路设计主要是由12盏灯进行控制,东西6转盏灯,南北6盏灯,分别由单片机的6个I/O进行控制。
电路图如3.2.5所示:
图3.2.5红绿灯显示电路
3.3软件设计
3.3.1程序设计流程图
对于单片机的控制系统来说,软件系统的设计是必不可少的,这是采用KEIL软件为开发平台,C语言为程序设计语言,以模块化结构进行程序设计,建立工程,设置工程,接着编译程序,最后调试与下载,不过这里KEIL软件不包含STC系列单片机,因此,在程序编译成功后,要通过STC系列单片机专用的下载软件将程序写入单片机的FLASH程序存储器。
全部控制程序实际上分为若干模块:
键盘设置处理程序,状态灯控制程序,LED显示程序,消抖动延时程序,次状态判断及处理程序,紧停或违规判断程序,中断服务子程序,车流量计数程序,红绿灯时间调整程序等。
整个软件程序方面主要分两大部分:
按键处理程序和50ms扫描程序。
流程图如图3.3.1所示:
图3.3.1系统程序流程图
3.3.2子程序模块
按键模块的控制是调用中断来实现控制的,独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。
将常开按键的一端接地,另一端接一个I/O口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。
当有键按下时,此I/O口与地短路迫使I/O口为低电平。
按键释放后,单片机内部的上拉电阻使I/O口仍然保持高电平。
我们所要做的就是在程序中查寻此I/O口的电平状态就可以了解我们是否有按键动作了。
图3.3.2中断子程序
参考程序:
unsignedcharkey()
{
if(key1==0)
{
delayms(10);
{
if(key1==0)
{
while(key1==0)dis();
return1;
}
}
}
if(key2==0)
{
delayms(10);
{
if(key2==0)
{
while(key2==0)dis();
return2;
}
}
}
return0;
}
定时中断子程序是本设计的重点,定时器一但启动,它便在原来的数值上开始加1计数,若在程序开始时,我们没有设置TH0和TL0,它们的默认值都是0,假设时钟频率为12MHz,12个时钟周期为一个机器周期,那么此时机器周期为1us,记满TH0和TL0就需要216-1个数,再来一个脉冲计数器溢出,随即向CPU申请中断。
因此溢出一次共需65536us,约等于65.6ms,如果我们要定时50ms的话,那么就需要先给TH0和TL0装一个初值,在这个初值的基础上记50000个数后,定时器溢出,此时刚好就是50ms中断一次,当需要定时1s时,我们写程序时当产生20次50ms的定时器中断后便认为是1s,这样便可精确控制定时时间啦负责完成数码管输出数据刷新和各个状态的处理切换。
中断子程序包括数码管输出数据刷新程序和各状态处理程序。
中断程序的流程图如图所示。
图3.3.3定时中断流程图
参考程序:
voidmain()
{
//unsignedcharnum;
TMOD|=0X11;
TH1=0X3c;
TL1=0xb0;
TH0=0XF0;
TL0=0XF0;
EA=1;
IP=0X08;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
shuju[0]=~duanma[shu/10];
shuju[1]=~duanma[shu%10];
while
(1)
{
sxpass();
zjzj=1;
while(flag);flag=1;
sxpassHU();
zjzj=2;
while(flag);flag=1;
zypass();
zjzj=3;
while(flag);flag=1;
zypassHU();
zjzj=4;
while(flag);flag=1;
}
}
复位参考程序:
voidtimer1_help(void)interrupt3
{
staticunsignedcharzj=0;
TH1=0X3c;//50ms一个周期
TL1=0Xb0;
if(zj==20)
{
zj=0;
shuju[0]=~duanma[shu/10];
shuju[1]=~duanma[shu%10];
if(shu==0){shu=31;flag=0;}//复位标志位
shu--;
}
zj++;
}
3.4电路仿真
一、电路仿真步骤如下:
1.在PROTEUS中找到相应的电子元器件。
2.在PROTEUS中新建原理图,选择A4大小的纸张规格,按照设计原理排放元器件,画好能用于仿真的线路图,为避免元器件之间的连接带来原理图的可读性变差,在此采用编号连接的方式,似的原理图模块坏,便于分析,即所用的元件都应有仿真模型,保存后就可以仿真了!
3.编制相应的单片机程序,可以在PROTEUS中编译,也可以在相应的单片机开发平台中编译(不同厂家的单片机的开发平台不同)。
a)如在PROTEUS中编译,要在“源程序”->“定义生成代码工具”中设定,不同的单片机设定不同,然后可以调入源程序;编译,把编译后的代码插入单片机中(在单片机属性中设定),接着就可以仿真,如果仿真结果不对,修改程序,重新编译、运行,直到正确为止;
b)如在单片机平台下编译,则进入单片机开发平台,编译正确后(指语法没问题),再到PROTEUS平台中把生成的代码调入,仿真运行。
如果仿真有问题,回到单片机开发平台,重新编译,再进到PROTEUS中仿真,直到正确为止。
有时在仿真时可能会发现PROTEUS图有问题,就直接改图,直到正确为止。
由于软件的原因,只能在软件内部编辑,而无法进行编译,而且外部编译比较方便,因此,此时设计采用单片机程序编译选择外部KEIL软件单独编译,不采用内部集成的编译环境,
4.查看仿真结果。
3.5制板子与安装过程
(1)用AltiumDesigner画出原理图(见附录),PCB图(见附录)。
(2)图纸打印。
将画好的PCB图利用打印机把图形打印在“专用转印机”的亚光面。
(3)图纸转印。
按实际尺寸裁切覆铜板,覆铜板去油污锈渍,图纸与覆铜板的铜箔面对正贴实,并固定好,以防止转印时图纸脱落。
启动转印机进行图纸转印,待自然冷却到室温后揭去转印纸。
(4)修板。
用“油性”签字笔或用“酒精松香溶液”(助焊剂)修复转印中形成的“砂眼”“断线”。
(5)蚀刻。
溶液量基本淹没过电路板为宜,用长矛软刷轻刷印制板或晃动腐蚀液,(5-10分钟)即可蚀刻完毕,从腐蚀液中取出,用清水冲洗。
腐蚀液妥善存放,以备后用,如失效,倒入回收桶中保存。
(6)钻孔。
压住印制板,钻孔过程中不得移动,以防钻头折断,钻头进刀速度适中,以防毛刺过大。
(7)表面处理。
用少许棉丝式碎布,蘸去污粉用力擦拭,直至焊盘与线条光亮无污渍,再用清水清洗。
按照自己设计的电路,在在通用板上焊接。
焊接完毕后,应对照电路图仔细检查,看是否有错接、漏接、虚焊的现象。
对安装完成的电路板的参数及工作状态进行测量,以便提供调整电路的依据。
经过反复的调整和测量,使电路的性能达到要求。
3.6软硬件调试
3.6.1硬件调试:
(1)观察板子,焊接状况,确认单片机电源正负极是否连接正常,确定单片机最小系统是否连接正常。
(2)给单片机提供5V电源,观察电源指示灯是否正常发光,
(3)用万用表测试发光二极管从单片机IO口到电源地是否导通。
3.6.2软件测试
(1)根据元器件的连接,分别写出相应的程序,下载到单片机观察电路工作,
(2)确认子电路可以在程序的引导下成功工作后,进行总体程序设计,下载后,观察电路总体运行情况。
4.结果与结论
在本次设计中,本小组成员尽心尽力的设计,共同合作,完成了前期的原理图设计,在PCB板布线设计的时候遇到了问题,幸好在最后小组成员的共同努力下还是完成了工作,其他环节都还算顺利。
不过很遗憾的是,尽管我们按照预先设计好的方案进行了交通灯的设计,并且在遇到问题的时候也努力的去解决了,可在所有的工作都完成后,我们的交通灯还是无法按照预先的设计进行工作。
LED灯也只是可以工作却无法是按照程序那样像交通灯一样的工作。
5收获与致谢
在设计的过程中,我们深深体会到,理论与现实的差距,实践的重要性,在调试的过程中遇到了很多问题,这些问题往往是自己理论认为是可以行的通,但是实际并非如此,给我调试带来了很多不解的困惑,我们小组的成员也都努力的完成自己的分工,尽心尽力的去配合工作,想要得到一个好的结果。
然而到了最后我们还是未能完成这次课程设计的要求,使我们的交通灯作品进行工作。
虽然这次课程设计没能够顺利完成,但是我却感觉我收获了很多。
这次课程设计,不仅有团队的共同努力,而且还有指导老师的细心指导,关心和教诲。
在此,我要感谢关心我的单片机课程老师,传授我们专业知识,教会了做技术的严谨与认真的重要性,让我们在今后的工作和生活中收益无穷,还有我们的小组成员,让我明白了团结合作的重要性,明白了学习探索过程中也可以十分有趣。
6.参考文献
[1]李建忠.单片机原理及应用[M].西安电子科技大学出版社,2008
[2]胡辉.单片机原理及应用设计[M].中国水利水电出版社,2006
[3]徐爱钧.8051单片机实践教程[M].北京电子工业出版社,2005
[4]楼然苗,李光飞.51系列单片机设计实例[M].北京航空航天大学出版社,2006
[5]邱关源.电路[M].北京:
北京高等教育出版社,2006
[6]全国大学生电子设计竞赛组委会.北京:
北京理工大学出版社,2004年8月.
[7]韩全立.赵德申编著.微机控制技术[M].北京:
机械工业出版社,2008
[8]王守中,聂元铭.51单片机开发入门与典型实例[M].北京:
人民邮电出版社,2009
[9]钟富昭,张晨.8051单片机典型模块设计与应用[M].北京:
人民邮电出版社,2007
[10]胡学海.单片机及应用系统设计[M].北京:
北京电子工业出版社,2001
[11]陈小忠,黄宁.单片机接口技术实用子程序[M],北京:
北京人民邮电出版社,2005
[12]李广弟.单片机基础.北京:
北京航空航天大学出版社,1992.
[13]何立民.单片机应用技术大全.北京:
北京航空航天大学出版社,1994.
[14]张毅刚.单片机原理及接口技术.哈尔滨:
哈尔滨工业大学出版社,1999
7.附件
7.1硬件电路图
图7.1系统原理图
图7.1.2PCB电路图
7.2元器件清单
名称
规格
数量
主要功能或作用
按钮
6*6*5
2
分别控制黄灯常亮(深夜模式)、禁行(紧急模式)、东西通行、南北通行、时间加、时间减、切换、确定。
电容
30P
2
单片机时钟振荡
电容
10UF
1
单片机复位
电阻
220
3
限流
排阻
10K
2
单片机
单片机
AT89S51
1
CPU
晶体
12M
1
单片机时钟振荡
三极管
9012
1
驱动蜂鸣器
蜂鸣器
12*9.5MM
1
信号灯切换时报警
两位一体共阴数码
0.36
4
倒计显示
芯片底座
40脚
1
保护引脚
芯片底座
20脚
1
保护引脚
发光二极管(红)
5MM
4
交通灯路口显示
发光二极管(绿)
5MM
4
交通灯路口显示
发光二极管(黄)
5MM
4
交通灯路口显示
发光二极管
3MM
1
电源显示
自锁开关
8*8MM
1
控制VCC
USB电源线
60MM
1
连接USB口
DC座
3.5*1.3MM
1
直流电源插座
插针
2
外接电源接线
PCB板
155MMX100MM
1
7.3作品实物图
图7.3
7.4源程序:
#include
sbitwei1=P1^0;
sbitwei2=P1^1;
sbitwei3=P1^5;
sbitwei4=P1^6;
unsignedcharcodeduanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
#defineweima1{wei1=1;wei2=0;wei3=1;wei4=0;}
#defineweima2{wei1=0;wei2=1;wei3=0;wei4=1;}
sbitled1=P2^7;
sbitled11=P2^6;
sbitled111=P2^5;
sbitled1111=P2^4;
sbitled2=P2^3;
sbitled22=P2^2;
sbitled222=P2^1;
sbitled2222=P2^0;
sbitled3=P3^7;
sbitled33=P3^6;
sbitled333=P3^5;
sbitled3333=P3^4;
sbitled4=P1^3;
sbitled44=P1^4;
sbitled444=P3^1;
sbitled4444=P1^2;
sbitkey1=P3^3;
sbitkey2=P3^2;
unsignedcharshuju[2];
unsignedcharshu=30;//全局变量30s
unsignedcharshu1=60;//全局变说量60S
unsignedcharshu2=10;//全局变量5s
unsignedcharflag=1;
unsignedcharzjzj=0;
voiddelayms(unsignedintdat);
voiddelayus(unsignedintdat);
voiddis();
voidsxpass();
voidsxpassHU();
voidzypass();
voidzypassHU();
unsignedcharkey();
voidmain()
{
//unsignedcharnum;
TMOD|=0X11;
TH1=0X3c;
TL1=0xb0;
TH0=0XF0;
TL0=0XF0;
EA=1;
IP=0X08;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
shuju[0]=~duanma[shu/10];
shuju[1]=~duanma[shu%10];
while
(1)
{
sxpass();
zjzj=1;
while(flag);flag=1;
sxpassHU();
zjzj=2;
while(flag);flag=1;
zypas