中北大学单片机课程设计说明书第1页共14页1引言随着世界范围内城市化和机动化进程的加快,城市交通越来越成为一个全球化的问题。在我国,随着经济实力的飞速发展,城市机动车量也随之增加,许多大中城市出现了交通超负荷运行的情况,道路超负荷承载的程度进一步加大,致使交通事故逐年增加,每年因交通事故死亡的人数占所有事故死亡总人数的比例逐年上升。在一个交通十字路口,如果还是像以前一样由单纯的一种信号灯和交通警察的协调来维持交通是不够的。所以这就需要一个更为合理和智能且成本不高的路口交通灯控制系统。与此同时,随着科学技术的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测技术日新月异。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,它可以嵌入到任何微型或小型仪器或设备中,同时结合具体的硬件结构进行相关的软件设计,来弥补单片机在某些方面的不足。本次课程设计采用了一个MCS-51系列单片机和可编程并行I/O接口设计交通灯控制器的实现方法。交通灯控制系统由AT89C51单片机、LED指示灯组成,实现了对交通的有效控制。通过对交通灯智能控制,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。2系统功能用单片机AT89S51实现十字路口交通信号灯的控制,完成系统的软硬件设计及调试。交通灯控制器的具体功能如下:1、正常情况下交通信号灯的控制时序给定。南北绿灯、黄灯、红灯分别用P1.0,P1.1,P1.2控制,东西绿黄红分别用P1.3,P1.4,P1.5控制。2、设定东西方向、南北方向紧急切换按钮各一个,当紧急按钮按下时,相应方向紧急切换为绿灯,以便特种车辆通行。中北大学单片机课程设计说明书第2页共14页实际设置的功能如下:东西红灯亮10s,南北绿灯亮6s;南北绿灯亮6s后,南北黄灯闪烁4s;南北黄灯闪烁4s后,南北红灯开始亮,东西红灯变绿灯;东西绿灯亮6s,南北红灯亮10s;6s之后,东西黄灯闪烁4s,东西变为红灯,南北红灯变绿灯,开始循环。3工作分工所用工作均由个人独立完成。4硬件电路设计及描述4.1交通灯设计理论东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,此表说明:(1)当为一道绿灯结束时另一道为黄灯;以提示行人或车辆下一个灯色即将到来。(2)当南北道为红灯,南北道车辆禁止通行,南北道行人可通过;东西道为绿灯,东西道车辆通过,行人禁止通行。(3)当南北道为绿灯,南北道车辆通行;东西道为红灯,东西道车辆禁止通过,行人通行。(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。4.2硬件设备选用设备为89C51单片机一个,晶振一个,电容两个,红、黄、绿LED灯各两枚,开关两枚,电源线一根,导线若干。东西道绿灯亮绿灯亮红灯亮黄灯亮绿灯亮绿灯亮……南北道红灯亮黄灯亮绿灯亮绿灯亮红灯亮黄灯亮……中北大学单片机课程设计说明书第3页共14页4.3系统框图4.4硬件连线图5软件设计流程及描述89C51LED模块按键中断模块中北大学单片机课程设计说明书第4页共14页5.1系统流程图5.2定时器原理定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC可得到如下计算通式:TC=M-C式中,M为计数器模值。计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=T/T0。计算通式变为:T=(M-TC)T0模值和计数器工作方式有关。在方式0时M为8192;在方式1时M的值为65536;在方式2和3为256。就此可以算出各种方式的最大延时。如单片机的主主程序开始设置中断工作方式、触发方式、初始化是否有中断运行过程执行中断YN中断结束,退出中断,返回中北大学单片机课程设计说明书第5页共14页脉冲频率为12MHZ,经过12分频后,若采用方式0最大延时只有8.129毫秒,采用方式1最大延时也只有65.536毫秒。这就是为什么扫描周期为50ms的原因,若使用软件则会耽搁程序流程,显然不可行。相反,时间计时方面却不可能只用计数器,因为显然1秒钟已经超过了计数器的最大定时间,所以我们还必须采用定时器和软件相结合的办法才能解决这个问题。5.3软件延时原理STC89C51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速度很快其他的指令执行时间可以忽略不计。5.4外部中断原理本系统主要使用了外部中断,中断信号有引脚INT0和INT1输入,低电平有效,CPU每个时钟周期都会检测INT0和INT1上的信号,AT89C51允许外部中断以电平方式或负边沿方式两种中断方式输入中断请求信号,可由用户通过设置TCON中IT0和IT1位的状态来实现。以IT0为例,IT0=0,为电平触发方式,IT0=1,为负边沿触发方式,本设计采用电平方式,IE0为其中断标志位,有中断信号则置位,中断服务子程序响应后,IE0自动清零。IE中的EA为允许中断的总控制位,为1开启,EX0为外部中断允许控制位,为1开启。在优先级的允许下,一旦有外部中断信号产生,单片机CPU首先保护断点,PC值进栈,然后执行相应的中断服务子程序,执行完后,用RETI指令返回,此时CPU会从堆栈中取保存的断点地址,送回PC,程序再正常执行。5.5程序模块设计5.5.1交通灯循环程序图东西红灯亮10s,南北绿灯亮6s。东西黄灯闪4s,南北红灯继续亮东西绿等亮6s,南北红灯亮10s南北黄灯闪4s,东西红灯继续亮中北大学单片机课程设计说明书第6页共14页5.5.2中断子程序图5.5Proteus仿真图(1)程序未执行时:中断保存P1当前值P1赋新值,实现强制转换红绿灯功能延时显示5sP1值改回初始值中断返回中北大学单片机课程设计说明书第7页共14页(2)开始执行程序,东西道路红灯亮,南北道路绿灯亮:(3)之后东西红灯熄灭黄灯闪烁3次,南北绿灯继续发亮:中北大学单片机课程设计说明书第8页共14页(4)然后东西变为绿灯亮,南北变为红灯亮:(5)之后同理南北变为黄灯闪烁,东西变为绿灯亮之后然后循环上述顺序:中北大学单片机课程设计说明书第9页共14页(6)当输入中断0、1时会分别变成东西红灯和南北绿灯以及南北红灯和东西绿灯两种情况,对应于东西或者南北车道需要紧急通车时的需要:中断0输入时中北大学单片机课程设计说明书第10页共14页中断1输入时6源程序代码汇编程序:ORG0000HAJMPMAIN//跳转主程序ORG0003HAJMPINSER1ORG0013HAJMPINSER2ORG0030HMAIN:MOVP1,#0FFH//P1全部置1,之后可以随时读取MOVP1,#00H//P1口清零SETBEA//开外部中断0和外部中断1SETBEX0SETBEX1CLRIT0CLRIT1START1:MOVP1,#00100001B//东西红灯亮,南北绿灯亮中北大学单片机课程设计说明书第11页共14页LCALLDELAY5S//延时5SMOVR1,#3CLRP1.5//南北的绿灯灭START2:SETBP1.4//南北黄灯闪烁LCALLDELAY1SCLRP1.4LCALLDELAY1SDJNZR1,START2START3:MOVP1,#00001100B//东西绿灯亮,南北红灯亮LCALLDELAY5S//延时5SMOVR2,#3CLRP1.2//东西绿灯灭START4:SETBP1.1//东西黄灯开始闪烁LCALLDELAY1SCLRP1.1LCALLDELAY1SDJNZR2,START4LJMPSTART1ORG0100HINSER1:MOVA,#00100001B//外部中断0MOVR5,P1MOVP1,A//强制东西红灯亮,南北绿灯亮LCALLDELAYMOVP1,R5RETIORG0200HINSER2:MOVA,#00001100B//外部中断1MOVR6,P1MOVP1,A//强制东西绿灯亮,南北红灯亮LCALLDELAYMOVP1,R6RETIDELAY1S:MOVR3,#10//延时函数,延时0.5SMOVTMOD,#01HLOOP:MOVTH0,#3CHMOVTL0,#0B0HSETBTR0LOOP1:JBCTF0,LOOP2SJMPLOOP1LOOP2:CLRTR0DJNZR3,LOOPRETDELAY5S:MOVR4,#100//延时函数,延时5S中北大学单片机课程设计说明书第12页共14页MOVTMOD,#01HLOOP3:MOVTH0,#3CHMOVTL0,#0B0HSETBTR0LOOP4:JBCTF0,LOOP5SJMPLOOP4LOOP5:CLRTR0DJNZR4,LOOP3RETDELAY:MOVR0,#0FCH//中断延时函数LOOP6:MOVR7,#9FHLOOP7:DJNZR7,LOOP7DJNZR0,LOOP6RETENDC语言#includereg51.h#defineuintunsignedint#defineucharunsignedcharunsignedinta,b,c;voiddelay(uintz);sbitp5=P1^5;sbitp4=P1^4;sbitp1=P1^1;sbitp2=P1^2;staticucharcount=0;voidmain(){P1=0XFF;//P1全部置1,之后可以随时读取P1=0X00;EA=1;EX0=1;//开外部中断0和外部中断1EX1=1;IT0=0;IT1=0;while(1){P1=0x21;//东西红灯亮,南北绿灯亮delay(5);//延时5Sp5=0;//南北的绿灯灭for(a=3;a0;a--)//南北黄灯闪烁中北大学单片机课程设计说明书第13页共14页{p4=1;delay(1);p4=0;delay(1);}P1=0x0c;//东西绿灯亮,南北红灯亮delay(5);p2=0;//东西绿灯灭for(b=3;b0;b--)//延时10S{p1=1;delay(1);p1=0;delay(1);}}}voidfirst()interrupt0//外部中断0{c=P1;//强制东西红灯亮,南北绿灯亮P1=0x21;delay(5);P1=c;}voidsecond()interrupt2//外部中断1{c=P1;//强制东西绿灯亮,南北红灯亮P1=0x0c;delay(5);P1=c;}voiddelay(uintz)//延时函数,延时Z*1S{uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}7课程设计体会中北大学单片机课程设计说明书第14页共14页在本次单片机原理及其接口技术课程设计中,通过查阅相关资料,我对设计内容、意义方面有了比较深的认识和理解。也进一步锻炼了我用专业知识、专业技能分析和解决问题的能力,使我在单片机的基本原理、应用系统开发过程以及编程设计技巧上有了很大的进步。另外,在设计中完成了整个设计系统的总体结构设计,并绘制了硬件电路原路图以及对设计电路原理图的说明分析。对我而言,这是一次时间与理论相结合的锻炼。通过本次课程设计,在老师的精心指导和严格要求下,我不仅获得了丰富的理论知识,也极大地提高了实践能力,更培养了我科学严谨、认真负责的学习态度和良好的学习习惯,为我后以后的进步和发展成打下了良好的基础。并对当前电子领域的发展状况和方向有了一定的了解,这对我今后进一步学习计算机方面的知识有极大的帮助。参考文献1.