单片机课程设计与制作报告.docx
《单片机课程设计与制作报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计与制作报告.docx(14页珍藏版)》请在冰豆网上搜索。
单片机课程设计与制作报告
课程设计报告
系(部):
专业班级:
学生姓名:
学号:
课程:
微处理器与接口技术课程设计
设计题目:
简易交通灯
完成日期 2016 年 11月 05 日
指导教师评语:
_________________________________________________________________________________________________________________________________________________________
___________________________________________________
成绩(五级记分制):
指导教师(签字):
_____________________
桂林航天工业学院课程设计任务书
设计题目6:
简易交通灯
学生姓名
课程名称
微处理器与接口技术
专业班级
2013级通信工程专业3班
地点
南实510
起止时间
2016年10月29日—11月5日
设计内容
硬件设计及样品制作
设计参数
1。
模拟十字路口交通灯情况,设计左转、前进红绿灯控制,具有倒计时显示
2。
数码管作为作为显示器;
3.具有紧急控制功能,紧急控制按键后,四个方向的红灯闪烁全部禁止通行,以便交警人工指挥。
设计进度
1.2015年6月29日—30日查阅资料,确定设计方案
2.2015年7月1日-2日程序设计和硬件调试
3.2015年7月5日撰写课程设计报告,答辩
设计成果
1.设计说明书一份(不少于2000字);
2.样品一套.
参考资料
1.楼然苗,李光飞,单片机课程设计指导,北京航空航天大学出版社,2012
2.李全利,单片机原理及应用,清华大学出版社,2014
说明
1.本表应在每次实施前由指导教师填写一式2份,审批后所在系(部)和指导教师各留1份.2.多名学生共用一题的,在设计内容、参数、要求等方面应有所区别。
3.若填写内容较多可另纸附后。
系(部)分管领导:
教研室主任:
指导教师:
2015年7月5日
摘要
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致,交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果.本文基于单片机STC89C52RC为中心器件机设计了一个简易交通灯,该系统的主要功能含十字路口交通灯的状态显示以及倒计时。
本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、复位电路等几大部分组成。
系统除基本的交通灯功能外,还具有倒计时功能,具有系统实用性强、操作简单、扩展性强等特点并较好的模拟实现了十字路口可能出现的状况。
软件上采用C语言编程,主要编写了主程序,中断程序,LED数码管显示程序。
关键字:
交通灯;STC89C52RC;数码管显示
1绪论
1。
1交通灯背景
当今,红绿灯安装在个个道口上,已经成为疏导交通车辆最常见和最有效的手段.交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分.交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果.近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
本文就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间,较好的模拟实现了十字路口可能出现的各种状况。
单片机是指在一个集成芯片中,集成微处理器(CPU)、存储器、基本I/O接口以及定时/计数、通信部件,即在一个芯片上实现一台微型计算机的基本功能。
单片机以其体积小、功能强、价格低廉、使用灵活等优势广泛地应用于各种仪器仪表,使仪器仪表智能化,提高它们的测量速度和测量精度,加强控制功能.本系统采用单片机STC89C52为中心器件来设计交通灯控制器,具有系统实用性强、操作简单、扩展性强等特点.
1.2交通灯设计的内容与意义
1。
2.1设计的内容
1、设计一款东西、南北两干道通行的交通灯,其中东西方向和南北方向各允许通行30s
2、黄灯亮(5s)提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间
3、带紧急按钮功能,当紧急按钮(S1)按下时,所有方向均亮起红灯
4、实现显示到计时功能
1。
2.2设计的意义
本设计是单片机控制的交通灯控制系统.随着社会经济的发展城市交通问题越来越引起人们的关注,人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一.城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
中国车辆数量不断增加,交通控制在未来的交通管理中起着越来越重要的作用。
2交通灯设计系统
2.1系统设计任务
1.熟悉52单片机集成开发环境,运用C语言编写文件;
2。
熟练应用所选用单片机的内部结构、资源,以及软硬件调试设备的基本方法;
2。
2系统设计要求
1.模拟十字路口交通灯情况,设计南北、东西方向红绿灯控制,具有倒计时显示
2.用数码管作为显示器
3。
具有紧急控制功能,紧急控制按键后,四个方向的红灯闪烁全部禁止通行,以便交警人工指挥。
2.3交通管理的方案
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行.红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。
当遇到紧急情况时,所有路口灯光都变为红色,警报解除回到正常工作状态。
3系统硬件设计
3.1简易交通灯基本组成部分
简易交通灯主要是由复位电路、时钟电路、键盘电路、数码管显示电路这几部分组成。
此系统核心元件为单片机STC89C52,对其编写相关程序来控制交通信号灯和数码管的时间显示。
系统共采用6个发光二极管来模拟各路交通信号灯,4个七段数码管以倒计时的方式显示各个方向上允许通行或禁止通行的信号灯剩余的时间。
停30S,准备5S,之后通行30S,在东西和南北两个方向上这两种状态不断循环。
源程序采用C语言编写,并通过keil软件进行编译,最后导入STC89C52单片机中,运行系统。
3.2时钟电路设计
STC89C52内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序但STC89C52单片机需外置振荡电容。
单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:
内部振荡和外部振荡。
单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。
中外接晶体以及电容C2和C1构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值为30P左右,晶振频率选12MHz。
3。
3复位电路
STC89C52的ALE及/PSEN两引脚输出高电平,RST引脚高电平到时,单片机复位.RST/VPD端的高电平,若直接由启动瞬间产生,则为启动复位,若通过按动按钮产生高电平复位称手动复位。
上电时,接通电源,+5V加到了RST/VPD端,该高电平使全机复位。
若运行过程中,需要程序从头执行,只需按动按钮S,则直接把+5V加到了RST/VPD端,从而复位。
3.4电路设计原理
单片机最小系统。
一个STC89C52单片机做为控制电路,运用其P1口来控制LED彩灯,通过P1给LED彩灯输入不同的电平信号,来实现LED彩灯按要求点亮,P3口接中断按钮。
电路设计原理图见图3.4
输入高电平
图3.4电路设计原理图
4系统软件设计
4。
1软件调试平台
采用C语言编写程序,程序由一个主函数,一个中断程序和多个延时子程序构成.由主函数实现LED彩灯在正常情况下的点亮和关闭。
中断程序实现紧急情况下LED彩灯的闪亮。
4.2软件设计流程
4。
2。
1总体设计框图
利用单片机实现交通灯的控制,该任务分以下几个方面:
a.实现红、绿、黄灯的循环控制。
要实现此功能需要表示三种不同颜色的LED灯分别接在P1个管脚,用软件实现。
b.用数码管显示倒计时.可以利用动态显示或静态显示,串行并出或者并行并出实现。
c。
实现急通车。
这需要人工实现,编程时利用到中断才能带到目的,只要有按钮按下,那么四个方向全部显示红灯,禁止车辆通行。
当情况解除,让时间回到只能隔断处继续进行。
见程序总体框图4。
2
图4。
2程序总体图
4。
2。
2总体程序流程图
系统总体流程图及中断流程图分别见图4.3和4.4
4。
2。
3循环控制思路图
循环控制思路图见下图4。
5
图4。
5循环控制图
5设计成果
在于硬件方面,由于我所运用的是Keil开发板,所以不需要考虑太多硬件方面的问题.只需检查开发板上数码管与发光二极管是否能够正常使用,以及正常显示的问题。
在于软件方面运用C语言进行编程。
需要分为几个部分:
1。
端口、开关定义以及全局变量的定义;2。
编写下面需要用到的函数(显示函数、开关函数。
延时函数。
判忙函数、初始化函数);3.主函数中主要编写定时器、中断的程序,接着编写中断执行程序(判断倒计时时间,自动跳转红绿灯)。
导入单片机后,接通电源观察显示有如上图的效果,数码管倒计时30s显示正常且每过三十秒会有五秒的黄灯等待;按下模拟紧急开关S1,出现LED灯变红且闪烁,这些结果说明设计符合要求(能够倒计时并切换红绿黄灯)。
其导入单片机后显示的结果如下图5。
1
图5.1单片机显示结果图
6总结
本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、复位电路等几大部分组成。
系统除基本的交通灯功能外,还具有倒计时等功能,较好的模拟实现了十字路口可能出现的状况。
软件上采用C52编程,主要编写了主程序,LED数码管显示程序,中断程序延时程序等。
经过整机调试,实现了对十字路口交通灯的模拟。
通过本次的课程设计,我学会了单片机的一般设计过程,通常都要进行系统扩展与配置,因此,要完成一个单片机的设计工作,必须依次做到下述工作:
1、Keil开发板的调试;2、应用软件的编写、调试;3、完整应用软件的调试和运行.通过这次设计使我对单片机有了更深入的了解,培养了我的动手与实践能力。
7心得体会
本次单片机的课程设计是设计模拟交通灯控制系统。
通过这一学期对单片机的学习,已经对单片机有了基本的了解,但要说到真正理解还差的很多,此次设计就是个很好的例子,一开始很多地方编写时不知从何下手,看了很多资料并多次询问老师后才开始编写程序。
编写的过程中运用到了蛮多老师以前讲的知识,中断,定时器,延迟程序,函数声明,位声明等,很多有用的新东西.而本次课程设计也算给了我们一个深入学习、提高动手能力的难得机会.
这次课程设计了解了单片机系统开发的一般过程。
对STC89C52RC单片机有了深入的理解并且能够较熟练的使用Keil软件。
这次单片机实习我选的是交通灯设计,通过这次设计我感觉到要想做成功,必须花时间多准备,查阅大量资料、画好流程图、理清思路,分析每一步每一个模块要实现的功能,然后分步进行,最后再整合成一个整体。
通过这次实习,也学会了做事情得有耐心,在初次编程的时候难免会有困难,程序总是会出错需要我们不厌其烦的分析寻找错误之处,可能程序导入到单片机又不一定会实现相应功能,又需要经过多次思考,反复分析并改正.在这次实习中,经历了多次失败的洗礼,也发现了自身所学知识存在许多的不足,同时也学到了不少东西,提高了自己的动手实践能力。
明白了在以后的学习和实践中,要努力掌握知识,多动手,多思考,尽量少犯错.
参考文献
[1]李全利。
单片机原理及应用(C51编程)[M].北京:
高等教育出版社,2012.
[2]李全利.单片机原理及接口技术[M]。
2版。
北京:
高等教育出版社,2009.
[3]张毅刚.单片机原理及应用[M].2版。
北京:
高等教育出版社,2010。
[4]胡学海。
单片机原理及应用系统设计[M]。
北京:
电子工业出版社,2005。
[5]欧阳文。
ATMEL89系列单片机的原理与开发实践[M]。
北京:
中国电力出版社,2007.
附录
#includeh〉
#defineucharunsignedchar
bitflag1=0,flag2=0;
sbitS1=P3^0;
sbitS2=P3^1;
ucharcodeseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0};//段码
uchardis[8];
ucharns=30,we=30;
uchart1_counter=0;
voiddelayms(ucharms)
{
uchari;
while(ms—-)
for(i=0;i〈123;i++);
}
voiddisplay(uchardis[])
{
uchari;
for(i=0;i〈8;i++)
{
P0=seg[dis[i]];
P2=i;
delayms
(1);
}
}
voidmain(void)
{TR1=1;EA=1;ET1=1;
TMOD=0x10;//定时器设置、中断功能设置
while
(1)
{
dis[0]=ns/10;
dis[1]=ns%10;
dis[2]=11;
dis[3]=11;
dis[4]=11;
dis[5]=11;
dis[6]=we/10;
dis[7]=we%10;//显示数组各个元素赋值
display(dis);//调用显示函数
if(!
S1)
{
delayms(10);
while(!
S1);
if(S1)
{
delayms(10);
if(S1)
{
while
(1)//红灯闪烁程序段
{
P1=0xcc;
delayms(100);
P1=0xff;
delayms(100);
EA=0;//关中断
if(!
S2)
{
delayms(10);
while(!
S2);
if(S2)
{
delayms(10);
if(S2)
{
break;
}
}
}
}
}
}
}
if(!
S2)
{
delayms(10);
while(!
S2);
if(S2)
{
delayms(10);
if(S2)
{
P1=0x3c;
EA=1;
}
}
}
}
}
voidt1_int(void)interrupt3
{
TH1=15536/256;TL1=15536%256;
if(++t1_counter==20)
{
t1_counter=0;
if(flag1==0)
{
if(flag2==0)P1=0xdb;
elseP1=0x7e;
if((——ns==0)||(--we==0))
{
flag2=~flag2;ns=6;we=6;flag1=~flag1;
}
}
if(flag1==1)
{
P1=0xb7;
if((--ns==0)||(--we==0))
{
flag1=~flag1;ns=30;we=30;
}
}
}
}