1、 课程设计任务书 课 程 名 称 单片机原理及应用课程设计 摘要本文介绍了一个基于MCS-51及PROTEUS的十字路口交通灯控制系统的设计与仿真,通过对现实路况交通灯的分析研究,理解交通控制系统的实现方法。十字路口交通灯控制系统通常要实现自动控制和在紧急情况下禁止普通车辆,而让紧急车辆优先通行。本文还对MCS-51单片机的结构特点和重要引脚功能进行了介绍,同时对智能交通灯控制系统的设计进行了详细的分析。最后介绍了PROTEUS嵌入式系统仿真与开发平台的使用方法,利用Proteus软件对交通灯控制系统进行了仿真,仿真结果表明系统工作性能良好。关键字:单片机,proteus仿真,中断,十字路口交
2、通灯控制系统前言1,十字路口的交通控制系统指挥着人和各种车辆的安全运行,对交叉口实行科学的管理与控制是交通控制工程的重要研究课题,是保障交叉口的交通安全和充分发挥交叉口的通行能力的重要措施,是解决城市交通问题的有效途径。交通灯信号灯的出现是人类历史上的一次重大改革,使人类的聚居生活,产生了深远的影响。使交通得以有效管制,对于疏导交通流量,提高道路通行能力,减少交通事故有明显效果。如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。随着电子技术的发展,利用单片机技术对交通灯进行智
3、能化管理,已成为目前广泛采用的方法。2,此十字路口交通灯控制系统,分东西道和南北道,设东西道为A道,南北道为B道。规定:A道放行时间为2分钟,B道放行1.5分钟;绿灯放行,红灯停止;绿灯转红灯时,黄灯亮2秒钟;若有紧急车辆要求通过时,此系统应能禁止普通车辆,而让紧急车辆通过。3,应用单片机实现对交通灯的控制,在十字路口用红,黄,绿的指示灯,加上四个以倒计时显示的数码管来控制交通。考虑到紧急车辆,设计紧急车辆开关。一、 正文4.1 芯片介绍AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Me
4、mory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要特性:与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年全静态工作:0Hz-24MHz三级程序存储器锁
5、定1288位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路4.2 交通灯状态北B A A BS1:东西通行,南北禁止 S2:东拐南,西拐北通行S3:南北通行,东西禁止 S4:北拐东,南拐西通行S1状态120秒,S2状态20秒,S3状态90秒,S4状态20秒,循环执行。4.3设计步骤1,利用proteus 7.5 sp3仿真软件绘制仿真实例用traffic lights和一个绿色LED灯表示红、黄、绿,以及允许左拐的信号灯。用P0口控制交通灯,用P1口控制数码管的段选,P2口控制数码管的位选。P3.6和P3.7接收中断信号并
6、返回给INT0接口处理。2,利用Keil软件按要求编写程序实现相应功能。五、硬件设计5.1 通过proteus 7.5 sp3设计如下仿真图:S1状态:黄灯亮:S2状态:黄灯亮:S3状态:黄灯亮:S4状态:黄灯亮:六、软件设计6.1系统流程图主程序开始设置中断工作方式、触发方式、初始化是否有中断运行过程执行中断YN中断结束,退出中断,返回6.2定时器原理定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC
7、可得到如下计算通式:TC=M-C式中,M为计数器模值。计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=TT0。计算通式变为:T=(MTC)T0模值和计数器工作方式有关。在方式0时M为8192;在方式1时M的值为65536;在方式2和3为256。就此可以算出各种方式的最大延时。如单片机的主脉冲频率为12MHZ,经过12分频后,若采用方式最大延时只有8.129毫秒,采用方式最大延时也只有65.536毫秒。这就是为什么扫描周期为50ms的原因,若使用软件则会耽搁程序流程,显然不可行。相反,时间计时方面却不可能只
8、用计数器,因为显然秒钟已经超过了计数器的最大定时间,所以我们还必须采用定时器和软件相结合的办法才能解决这个问题。6.3软件延时原理MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速度很快其他的指令执行时间可以忽略不计。6.4 外部中断原理本系统主要使用了外部中断,中断信号有引脚INT0和INT1输入,低电平有效,CPU每个时钟周期都会检测INT0和INT1上的信号,AT89C51允许外部中断以电平方式
9、或负边沿方式两种中断方式输入中断请求信号,可由用户通过设置TCON中IT0和IT1位的状态来实现。以IT0为例,IT0=0,为电平触发方式,IT0=1,为负边沿触发方式,本设计采用电平方式,IE0为其中断标志位,有中断信号则置位,中断服务子程序响应后,IE0自动清零。IE中的EA为允许中断的总控制位,为1开启,EX0为外部中断允许控制位,为1开启。在优先级的允许下,一旦有外部中断信号产生,单片机CPU首先保护断点,PC值进栈,然后执行相应的中断服务子程序,执行完后,用RETI指令返回,此时CPU会从堆栈中取保存的断点地址,送回PC,程序再正常执行。6.5程序模块设计6.5.1数码管显示子程序6
10、.5.2 T0中断子程序定时计数初值50ms计数(count)加1判断1S(count=20?)到否count清0Time_SN-;Time_EW-恢复现场中断返回NY6.5.3 INT0中断子程序紧急状态按键连接到外部中断引脚P3.2,即INT0捕获到一个低电平,则进入该中断进行相关处理。七 、系统软件调试7.1.1 集成开发环境KEIL IDE Vision2集成开发环境主要由以下部分组成: u Vision2 IDE。ision2 IDE包括:一个工程管理器,一个功能丰富并有交互式错误提示的编辑器选项设置生成工具,以及在线帮助。使用vision2创建源文件并组成应用工程加以管理。visi
11、on2可以自动完成编译汇编链接程序的操作; C51编译器和A51汇编器。Vision2 IDE创建的源文件可以被C51编译器或A51汇编器处理生成可重定位的object文件。KEIL C51编译器遵照ANSI C语言标准支持C语言的所有标准特性,另外还增加了几个可以直接支持at89C51结构的特性。KEIL A51宏汇编器支持at89C51及其派生系列的所有指令集; LIB51库管理器。B51库管理器可以从由汇编器和编译器创建的目标文件建立目标库,这些库是按规定格式排列的目标模块,可在以后被链接器所使用当链接器处理一个库时仅仅使用了库中程序使用了的目标模块而不是全部加以引用;BL51链接器定位
12、器。L51链接器使用从库中提取出来的目标模块和由编译器汇编器生成的目标模块创建一个绝对地址目标模块,绝对地址目标文件或模块包括不可重定位的代码和数据所有的代码和数据都被固定在具体的存储器单元中。利用KEIL开发和调试系统软件流程大致如下:启动Vision2,进入KEIL软件的集成开发环境;利用KEIL内置的文本编辑器进行程序源文件的编辑,因为KEIL集成的文本编辑器对中文支持不是很好,可以选择其他的编辑器(本文使用的文本编辑器是Ultraedit32),Vision2能够自动识别外部改变了的源文件;建立工程,指定针对哪种单片机进行开发,指定对源程序的编译、链接参数,指定调试方式(本文采用外部硬
13、件仿真器仿真调试的方式,即使TKS仿真器仿真),然后对工程进行相关设置;设置好工程后即可进行编译、链接。连接仿真器对软件进行调试。也可以生成下载到单片机存储器上的HEX文件。7.1.2 系统仿真调试系统的仿真调试借助于PROTEUS仿真器,在进行系统仿真的连续调试之前要先进行软件的初调,就是要使各个子程序模块运行正确,程序的运行流程正确,生成hex文件。参考文献:,2007.84余锡存 曹国华.单片机原理及接口技术M.陕西:西安电子科技大学出版社,2000.75雷丽文 等.微机原理与接口技术M.北京:电子工业出版社,1997.26柴钰.单片机原理和应用M.西安电子科技大学出版社.7张靖武.单片
14、机系统的PROTUSE设计和仿真M.电子工业出版社.2007.附:#include #define uchar unsigned char #define uint unsigned int sbit Button_A=P36;/sbit Button_B=P37;uchar table =0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f; /共阴段码表0-9charTime_EW;/东西方向倒计时charTime_SN;/南北方向倒计时uchar EW=89,SN=89,EWJ=29,SNJ=29,EWL=19,SNL=19; /程序初始化
15、赋值uchar count=0;/*/void delay(unsigned char i)/延时i msunsigned char j;while(i-)for(j=0;j=0)P0=0x0c;Display();/*A道+30s*/Time_SN=SNJ; /SNJ=29 Time_EW=EWJ; /EWJ=29 while(Time_EW=2)P0=0x0c;Display();/*A道黄灯*/while(Time_EW=0)P0=0x0a;Display();/*S2*A道左拐*/S2状态Time_SN=SNL;/20 sTime_EW=EWL; /20 swhile(Time_EW=
16、2)P0=0x80;Display();/*A道黄灯*/while(Time_EW=0)P0=0x0a;Display();/*S3*B道放行*/S3状态Time_EW=EW;/90sTime_SN=SN;/90swhile(Time_EW=2)P0=0x21;Display();/*B道黄灯*/while(Time_EW=0)P0=0x11;Display();/*S4*B道左拐*/S4状态Time_SN=SNL;/20 sTime_EW=EWL;/20 swhile(Time_EW=2)P0=0x40;Display();/*B道黄灯*/while(Time_EW=0)P0=0x11;Display();