单机课程设计报告电气1201班邓涛李瑞贾玉梅孟豪2105年11月20日-2-单片机控制交通灯控制系统设计第1章概述1.1单片机认识MCS-51单片机是Intel公司在1980年继MCS-48系列8位单片机之后推出的高档8位单片机。MCS-51单片机在性能和片内功能方面大大优于MCS-48系列单片机。MCS-51的典型产品有:8051、8031、8751、80C51、80C31、87C51等,8051内部有4kBROM,8751内部有4kBEPROM,8031片内无ROM。除此之外,三者的内部结构及引脚完全相同。89S51是一种低功耗、高性能CMOS8位微控制器,具有4K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,AT89S51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。1.2单片机的应用单片机是应工业测控需要而产生的,最能反映其功能及形态的名称是在一个应用系统中,Single-chipMicro-controller。按照测控系统的特点和要求,单片机的应用可分为单机应用和多机应用两大类。我们这次要完成的单片机课程设计就是它的单机应用,下面在介绍一下单片机在单机应用领域内的主要内容。(1)智能产品单片机与传统机械产品相结合,使传统机械产品结构简化,控制智能化,购成新一代机电一体化产品。目前,利用单片机构成的智能产品已广泛应用于家用电器、办公设备、数控机床、纺织机械、工业设备等行业。(2)智能仪表-3-目前,各种传感器、变送器、控制仪表已普遍采用单片机应用系统。它集测量、处理、控制功能于一体,具有各种智能化功能,如存储、数据处理、查找、判断、联网和语音等功能。单片机构成的智能仪表,能使仪表具有数字化、智能化、多功能化、综合化、柔性化等优点,赋予测量仪表以崭新的面貌,使传统的仪器、仪表发生根本性的变革,它代表了仪器仪表的发展趋势。(3)测控技术用单片机构成的各种工业控制系统中的数据采集系统具有工作稳定可靠、抗干扰能力强的优点,如炉温恒温控制系统、电镀生产自动控制系统等。(4)智能接口在计算机系统,特别是较大型的工业测控系统中,除通用外部设备外,还由许多外部通信、采集、多路分配管理、驱动控制等接口。这些外部设备与接口如果完全由主机进行管理,势必会造成主机负担过重,运行速度降低,接口的管理水平也不可能提高。如果用单片机进行接口的控制与管理,单片机与主机可并行加工处理,可以大量降低接口的通信密度,极大的提高了接口控制管理水平。在一些通用计算机外部设备上,已实现了单片机的键盘管理、打印机控制、绘图仪控制、硬盘驱动控制等。1.3设计任务1)A道和B道上均有车辆要求通过时,A,B道轮流放行。A道放行5分钟(调试时改为5秒钟),B道放行4分钟(调试时改为4秒钟)。2)一道有车而另一道无车(实验时用开关K0和K1控制),交通灯控制系统能立即让有车道放行。3)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A,B道均为红灯,紧急车由K2开关模拟。4)绿灯转为红灯时,黄灯亮1秒-4-第2章系统总体方案及硬件设计2.1交通管理的方案A、B两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为A、B两干道的公共停车时间。设A道比B道的车流量大,指示灯燃亮的方案如表2-1-1。141514……A道黄灯亮红灯亮黄灯亮绿灯亮黄灯亮红灯亮……B道黄灯亮绿灯亮黄灯亮红灯亮黄灯亮绿灯亮……表2-1-1说明:(1)当为黄灯时A、B两道同时为黄灯;以提示行人或车辆下一个灯色即将到来时间1秒。(2)当A到为红灯,A道车辆禁止通行,A道行人可通过;B道为绿灯,B道车辆通过,行人禁止通行。时间为4秒。(3)当A道绿灯,A道车辆通行;B道为红灯,B道车辆禁止通过,行人通行。时间为5秒。A道车流大通行时间长(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。(5)此表可根据车流量动态设定在没有特殊情况下,即在两道均有车辆要求通过时,交通灯按常规运行。通过控制开关可以输入要模拟的其它状态,交通灯将按照其输入状态的情况进行运行。2.2总体硬件设计-5-交通灯控制系统的结构框图如图2-2-1所示。总体设计方案共有五个部分组成,分别是:单片机AT89C51、红、绿、黄灯显示电路、LED数显时间电路、晶振及复位控制电路、控制与调时开关电路。在进行仿真调试过程中,程序运行正确,五个部分就同时工作,从而实现了交通灯的基本功能及调时功能。系统的总的原理框图如图2-1所示。AT89S51单片机电源部分数码管显示路灯系统时钟复位紧急按键图2-2-1硬件设计方案2.3系统时钟电路晶振采用了内部时钟信号源的方式。对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本系统的实际应用中一定要注意正确选择参数(30±10PF),并保证对称性(尽可能匹配)。图2-3-1系统时钟电路2.4系统复位电路复位电路我采用上电+按钮复位的方式。当开关打开时,RST通过电阻接地,当有开关闭合时由于电容的作用使电源VCC通过电阻施加在单片机复位端RST上,实现单片机复位。只是可惜,在进行仿真器调试过程中,该复位电路是不起作用的。具体电路如图2-4-1所示。-6-图2-4-1系统复位电路2.5数码管显示电路数码管工作原理这里我们介绍8段数码管的工作原理。8段数码管又称为8字型数码管,分为8段:A、B、C、D、E、F、G、DP。其中,DP为小数点。数码管常用的有10根管脚,每一段有一根管脚,另外两根管脚为一个数码管的公共段,两根之间相互连通。发光二极管的发光原理,我们已经介绍过了,同理,8段LED数码管,则是在一定形状的绝缘材料上,利用不同形状点划的发光二极管组合,排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示0-9的数字。从电路上,按数码管的接法不同又分为共阴和共阳两种。图2-5-1是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。图2-5-1数码管的内部电路接法在设计时,为了系统图的美观,我采用了6个数码管组成的数码管组,采用共阴极接法。如图2-5-2。-7-图2-5-2系统数码管电路2.6路灯指示电路在设计路灯时,采用了发光二极管代替路灯。先介绍一下二极管,见图2-6-1。二极管工作原理是单向导通,即只有正极电压高于负极电压某特定值时才会导通,而负极电压高于正极电压是不导通的。图2-6-1发光二极管示意图发光二极管是一种特殊的二极管,导通时会发光(发光二极管导通压降一般为1.7V~1.9V)。此外,工作电流要满足该二极管的工作电流。发光二极管的正负极可以用万用表进行判断,把万用表拨至二极管档或电阻挡,用两个表笔分别接触二极管的两个引出脚。若发光二极管被点亮,则与红表笔相接的引出脚为正极。从外观上看,发光二极管的正极引脚的长度也比较长。一般发光二极管与I/O端口之间都会再连接一个电阻,其作用在于限制通过二极管的电流,从而达到减少功耗或者满足端口对最大电流的限制。一般发光二极管的点亮电流为5mA至10mA。路灯设计时我采用了红、黄、绿三种发光二级管。如图2-6-2所示。图2-6-2路灯设计电路-8-2.7按键电路设计按键工作方式可以是中断方式也可以是扫描方式,对扫描方式来说,扫描是一直调用按键扫描程序,也可以用定时调用按键扫描程序,不管哪一种,都需要占用系统宝贵的时间资源,相比较而言中断就有优势,中断键盘只有在有按键按下时才去执行键盘程序,在没有按键按下的情况下,可以处理其他的事务,使资源得到充分的利用,故中断键盘有占用资源少,响应速度快的优点,但在有按键按下时有数码管闪烁的缺点,这是因为处理中断时,数码管停止了扫描,对显示要求不高的场合下,这也是完全可以满足要求的。但实际应用中,为了保证安全查询键值和响应,通常还要进行按键去抖和等待键释放(查询按键是否抬起)的动作,由于按键本身是机械开关,所以在触点闭合或断开的瞬间会出现电压抖动的现象。按键设计如图2-7-1所示。图2-7-1按键电路-9-第3章软件系统设计3.1设计思路及关键技术一个完整的交通灯相当于一个简单的单片机系统,该系统有交通灯设置电路、单片机、显示电路等构成。单片机是集成的IC芯片,只需根据实际设计要求选型。其他部分都需要根据应用要求和性能指标自行设计。首先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。3.2软件流程系统总体流程图如图3-2-1所示:-10-定义局部变量i,ji--j--j100i==100j==100i100yyNN图3-2-1整体软件设计流程图3.3交通灯的设计程序说明这部分中定义了一些全局变量的数组和变量以及位标志,只是些定义的东西不需要画流程图了。这部分程序如下:#includereg51.h#defineucharunsignedchar#defineuintunsignedintsbitnom=P3^7;ucharcodeled_table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示数码表ucharcodelight_state[]={0x21,0x12,0x0c,0x12};//交通灯状态存储表ucharcodeem_state[3]={0x24,0x21,0x0c};//紧急灯状态显示表ucharlight_time[][2]={{0,4},{0,1},{0,5},{0,1}};//显示时间存储表ucharstatebef,time1s=100,state=0;//存储紧急灯状态,定时基数,状态基数uinttime;//显示时间变量bitmd_flag,state_flag=1,red;//显示时间更改状态,状态切换标志位,红绿切换标志位3.4延时函数延时函数的流程图如图3-4-1。延时程序如下:/*--------------------------------延时函数------------------------*/voiddelay(void){uchari,j;for(i=100;i0;i--){for(j=100;j0;j--);//循环10000次}-11-定义局部变量value读P3口状态value右移4位取value低三位状态改变?return0return1YNstatebef=value}图3-4-1延时函数的流程图3.5延时函数读状态函数的流程图如图3-5-1。读状态函数如下:/*--------------------------读状态函数:判断是否有紧急灯状况出现---------------------*/ucharrd_emstate(void){ucharvalue;value=P3;value=4;value&=0x07;if(value!=statebef){statebef=value;return1;}//判断是否有紧急灯状况发生,//保存按键值,置返回标志为1elsereturn0;}3.6显示函数显示函数如下:voiddisplay(void){if(md_flag==1)//显示更改时间状态{if(1==red){//南北方向红灯时间显示P2=0xf6;P0=led_table[light_time[0][0]];dela