资源描述
苏州科技学院单片机课程设计报告苏州科技学院单片机课程设计单片控制的交通灯控制系统设计姓 名: XX 学 号: zzzzzzzzz 专业班级: xxxx 指导老师: 徐树梅 所在学院: 机电工程系 2012年6月1日摘要本设计是单片机控制的交通灯控制系统设计。随着经济的发展,交通运输中出现了一些传统方法难以解决的问题。道路拥挤现象日趋严重,造成的经济损失越来越大,并一直保持大比例的增长。现在交通系统已不能满足经济发展的需求。由于生活水平的提高,人们对交通运输的安全性及服务水平提出了更高的要求。在交通中管理引入单片机交通灯控制代替交管人员在交叉路口服务,有助于提高交通运输的安全性、提高交通管理的服务质量。并在一定程度上尽可能的降低由道路拥挤造成的经济损失,同时也减小了工作人员的劳动强度。 当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯绿灯”转换间隔,并自动切换。它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。现在我们利用“自动控制”控制交通灯的方法。将事先编制好的程序输入单片机,利用单片机的定时、查询、中断功能;能够根据十字路口两个方向上车辆动态状况,采用查询的方式,根据具体情况,自动给予时间通行,其中利用中断方式来处理特殊情况。这样既方便驾驶员、路人,同时还可以紧急处理一些紧急实况。同样具有红、黄、绿灯的显示功能,为驾驶员、路人“照明”。中国车辆数量不断增加,交通控制在未来的交通管理中起着越来越重要的作用。智能交通灯的管理比重修一条马路无论在经济、交通运行速率上都有很好的效益、更加节约资源。使交管人员有更多的精力投入到管理整个城市交通控制,带来更大的经济和社会效益,为创造美好的城市交通形象发挥更多的作用。1 系统总体方案1.1设计要求:1)南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行间为20秒。2)在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;3)黄灯亮时,要求每秒闪亮一次。4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。5)当有突发事情发生时(如有救护车通过时),可通过按键将各个路口设置成红灯,只让救护车通过。1.2设计任务:1)东西、南北车辆交替运行2)绿灯转为红灯时,黄灯闪亮(间隔1秒)。3)能显示剩余时间。4)能对交通运行进行控制。1.3总体设计单片机中断按键复位电路晶振电路数码显示LED显示2 硬件设计2.1单片机选型:AT89C52与MCS-51单片机产品兼容 、8k可反复擦写(大于1000次)Flash ROM、 时钟频率:0Hz24Hz 、 三级加密程序存储器 、 32个双向I/O口 、2个串行中断,可编程UART串行通道、3个16位可编程定时/计数器中断 、2个外部中断源,共8个中断源、低功耗空闲和掉电模式、软件设置睡眠和唤醒功能、2个读写中断口线、3级加密位、看门狗定时器 、双数据指针。功能特性描述AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。AT89C52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路,8 位微控制器 8K 字节在系统可编程 Flash ROM。P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入端用。 在访问外部数据存储器或程序存储器时,P0口被分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。 在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端口引脚号第二功能: P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。 在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX RI 指令)时,P2 口输出P2 锁存器的内容。 Flash 编程或校验时,P2亦接收高位地址和一些控制信号。P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。 P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,P3口也接收一些控制信号。 P3端口引脚第二功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INTO(外中断0)P3.3 INT1(外中断1)P3.4 TO(定时/计数器0)P3.5 T1(定时/计数器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)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。 引脚结构图如下所示:引脚结构图2.2复位电路:上电+按钮 复位电路原理图当8051的ALE及/PSEN两引脚输出高电平,RST引脚高电平到时,单片机复位。RST/VPD端的高电平,若直接由启动瞬间产生,则为启动复位,若通过按动按钮产生高电平复位称手动复位。图中,上电时,接通电源,电容器C相当于瞬间短路,+5V加到了RST/VPD端,该高电平使8051全机复位。若运行过程中,需要程序从头执行,只需按动按钮开关,则直接把+5V加到了RST/VPD端,从而复位。显然,该电路即可以上电复位,也可以手动复位,是常用复位电路之一。2.3晶振电路 晶振电路原理图晶振电路采用外部晶振电路,使用两个1uF电容并联接地,并在中间再并联晶振,保持外部晶振电路的振荡频率与8051的内部频率一致,保持了电路中所提供的始终频率稳定。2.4数码管显示:7SEG-MPX2-CC数码管结构图 此处采用的数码管时共阴极数码管,G、F、E、D、C、B、A七个端口是输入端口,对其各位进行赋值,置位则亮,复位则灭,用此来显示出相应的数字;1、2两端口用来控制高位和低位的选通显示,只要对端口置位,便可以选择该端口,并对其所代表的位进行赋值,显示。2.5发光二极管显示 每个路口都采用了三个LED灯来显示,分别代表了红黄绿三种灯,来模拟路口交通灯的变换。2.6键盘:独立键盘+中断 采用开关来控制进入中断,可以在路口出现紧急情况时,拉动开关,来使得红绿灯发生相应的改变,已处理紧急情况下的车辆通行。3 软件设计3.1总体流程图调支路通行子程开 始中断初始化调主干道黄灯闪烁子程调主干道通行子程序调支路黄灯闪烁子程判断是否有开关中断?中断处理中断返回(到子程序处)NOYES 3.2 紧急中断子程序流程图断点入栈保护状态参数设置送状态字至端口状态响应断点返回开 始开 始3.3循环流程控制思路:中断东西绿灯南北红灯东西黄灯闪南北红灯亮东西红灯南北绿灯东西红灯亮南北黄灯闪4 Proteus软件仿真4.1 正常运行状态 4.2 中断运行状态 4.3 黄灯闪烁状态5 源程序代码#include#include#define uint unsigned int#define uchar unsigned charuchar temp,aa,nn;sbit rn=P20; sbit yn=P21;sbit gn=P22;sbit rw=P23;sbit yw=P24;sbit gw=P25;sbit shi=P36;sbit ge=P37; /*对要使用的单片机各个口进行定义*/bit flag=0;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /*将数字0123456789的16进制数定义成数组用以显示*/void delay(uint z);void disp(uint n);void yn_flash(void);void yw_flash(void);void xint0();void timer0();void LED_ON();void xint1();void LED_OFF();void rnzhu();void rwzhi(); /*将所使用的子函数定义*/void main()uint num;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)rnzhu();yn_flash();rwzhi();yw_flash(); /*主函数中显示部分*/ void delay(uint z) /*延时子函数*/uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void timer0() interrupt 1 /*定时器初始化*/TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa+;if(aa=18)aa=0;flag=1;void disp(uint n) /*显示子函数*/ while(!flag) ge=0; P0=tablen%10; delay(50); shi=1;ge=1; shi=0; P0=tablen/10; delay(50); shi=1;ge=1; if(flag=1) flag=0;void rnzhu() /*主干道的红绿灯和数码管显示子函数*/uint num;num=30;disp(num);while(num0) num-; P2=0xde; disp(num);void rwzhi() /*支路的红绿灯和数码管显示子函数*/uint num; num=20;while(num0)P2=0xf3; disp(num);num-;void yn_flash(void) /*主干道的黄灯和数码管显示子函数*/uint a;for(a=5;a0;a-)P2=0xdd; yn=1; delay(100);yn=0;disp(a);void yw_flash(void) /*支路的黄灯和数码管显示子函数*/uint a;for(a=5;a0;a-) P2=0xeb; yw=1; delay(100); yw=0; disp(a);void xint0() interrupt 2 /*中断定义*/TH0=(65536-50000)/256;TL0=(65536-50000)%256; LED_ON(); void LED_ON() /*开关控制灯的子函数*/ uint b;rn=0;rw=0;gn=1;gw=1; yn=1;yw=1; for(b=5;b0;b-)ge=0;shi=1;P0=tableb;delay(1000);ge=1; shi=1;return;6 原理图 6.1 系统原理图6.2 PCB版图课程设计体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。这次的单片机课程设计大概用了一周的时间,在这一周的时间当中,虽然开始遇到了很多的困难,但是由于合理地进行设计安排,分工合作,并各自查阅了相关的资料,最后在大家共同努力下我们顺利地完成了本次单片机课程设计,同时也学到了很多东西。回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。例如我们在设计数码管显示的时候,刚开始的时候,由于对数码管引脚的不熟悉,我们都无法让数字显示,后来发现时十位和个位的置位、复位发生了问题,我们对此进行了修改,可以正确的显示出十位及个位的数值,但是数字的显示不稳定,不停的跳动,我们为此查阅了很多的资料,但还是未能解决,最后我们不停地对程序进行修改,终于发现了问题所在,在显示子程序上存在缺陷未能快速的切换对十位、个位的置位和复位,经过这样的修改,终于可以完美的显示时间了。我们也更好地掌握了对数码管的使用,这都是课堂上学不到的知识。 这次的单片机课程设计是通过实践操作和理论相结合,提高动手实践能力,提高科学的思维能力。与此同时,我们也对分工合作有了进一步的认识,只有通过合理的分工合作,我们们才能够在短短一周的时间内完成设计任务,相信这对以后在社会上工作和学习会有很多帮助,让我们能更好的进入工作状态。最重要的是,这次课程设计也增加了我们对问题的研究和探讨,们以后的学习中会有更多的帮助。单片机为我们的主要专业课之一,对我们还是很有帮助的,课程设计也是为我们以后的工作提前进行了一次练手,也是我们学习生活之中少有的一次自己探索、研究,发现问题、解决问题的机会。当然要做好一个课程设计也不是很简单的,我认为有以下几步:(1) 在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;(2) 要有一个清晰的思路和一个完整的的软件流程图,善于将大的程序段缩小为每个子函数来实现;(3) 在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;(4) 要养成注释程序的好习惯,写程序是应该思路清晰,结构明了,应该让人一看就能明 白你的思路,方便资料的保存和交流;(5) 我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的 ; 在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,或者与其他小组成员讨论,共同解决,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。通过这次课程设计我们也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。 通过这次课程设计使我更加懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正将一个东西学好学透,从而提高自己的实际动手能力和独立思考的能力。我想这对于我今后的学习生活和工作都会是有很大帮助的!17
展开阅读全文