51单片机的交通灯设计_第1页
51单片机的交通灯设计_第2页
51单片机的交通灯设计_第3页
51单片机的交通灯设计_第4页
51单片机的交通灯设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

绪论1.1摘要 交通信号灯常用于交叉路口,用来控制车的流量,提高交叉口车辆的通行能力,减少交通事故。交通灯主要通过单片机来控制,单片机的代码采用c语言编程,最后烧录到单片机内,使其完成相应的应用。在本控制电路中,采用了数码管显示时间,这样可以很方便的看出来红绿灯的亮灭计时,这相对于其他电路的红绿灯设计是非常有优势的。在本电路中采用的是七十秒的总计时,每七十秒进行一次红绿灯切换,使两个路口的人能够交替通行。在红绿灯切换之前,先有黄灯的长亮来提示红绿灯即将替换,后有红绿灯的闪烁来提示。通过本次大作业的设计。A,加强对单片机和C51语言的认识,充分掌握和理解设计各部分的工作原理、设计过程、选择芯片器件、模块化编程等多项知识。B,用单片机模拟实现具体应用,使个人设计能够真正使用。C,把理论知识与实践相结合,充分发挥个人能力,并在实践中锻炼。D,提高利用已学知识分析和解决问题的能力。E,提高实践动手能力。1.2关键字交通灯、控制器、c51、电路仿真、数码管、proteus。1.3设计要求a,设计一个70秒的交通灯,每七十秒进行一次红绿灯的切换。b,在倒数十秒时,黄灯亮,直到倒数五秒。c,倒数五秒时,红绿灯闪烁,直到0秒。d,第0秒时,红绿灯切换。1.4设计内容(1)填写实验报告。(2)进行总体设计,画出原理图。(3)用Protel软件画出PCB仿真。(4)编写并调试程序。1.5软件介绍。1.5.1keilcKeilC51是美国KeilSoftware公司(ARM公司之一)出品的51系列兼容单片机C语言软件开发系统。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。KeilC51目前由ARM国内授权代理商提供技术支持和销售等相关服务。产业标准的KeilC编译器、宏汇编器、调试器、实时内核、单板计算机和仿真器,支持所有的251系列微控制器,帮助你如期完成项目进度。以下图表显示Keil的开发工具以及它们相互之间的接口。KEILC51开发工具旨在解决嵌入式软件开发商面临的复杂问题。当你开始一个新项目,只需简单的从设备数据库选择使用的设备,uVisionIDE将设置好所有的编译器、汇编器、链接器和存储器选项。包含大量的例程,帮助你着手使用最流行的嵌入式8051设备。KeilμVision调试器准确地模拟8051设备的片上外围设备(IC、CAN、UART、SPI、中断、I/O端口、A/D转换器、D/A转换器和PWM模块)。模拟帮助你了解硬件配置,避免在安装问题上浪费时间。此外,使用模拟器你可以在没有目标设备的情况下编写和测试应用程序。当你准备在目标硬件上测试软件应用时,可以使用MON51、MON390、NONADI、或者FlashMON51目标监视器、ISD51In-System调试器、ULINKUSB-JTAG适配器在目标系统上下载并测试程序代码。1.5.2proteusProteus软件是英国LabCenterElectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前比较好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。设计思路2.1交通灯状态分析。交通灯控制器的控制过程分为五个阶段,对应的输出有五种状态,分别用S0、S1、S2、S3,S4表示。S0状态:A的红灯,B的绿灯亮,B可以通信,A禁止。S1状态:B的黄灯和绿灯亮,A红灯亮。S2状态:A的绿灯亮,B的红灯亮,A通信,B禁止。S3状态:A的黄灯和绿灯亮,B红灯亮。S4状态,红绿灯交替闪烁。这是一个特殊状态,这个状态在倒数五秒的时候出现。状态AB时间(s)S0红灯亮,禁止通行绿灯亮,允许通行60S1红灯亮,禁止通行黄绿灯亮,允许通5S2绿灯亮,允许通红灯亮,禁止通行60S3黄绿灯亮,允许通红灯亮,禁止通5S4红绿闪烁,禁止红绿闪烁,禁止52.2流程图第三章设计实现(一)代码部分设计思路3.1以下为主程序的开始部分,通过这一部分程序可以实现一个开机的初始化。//主程序voidmain(void){lukou=0;//交通灯部分初始化部分P1=0XFF;//复位时,全部灯闪烁三次delayms(500);P1=0X00;//灯全灭 第一次闪烁delayms(500);P1=0XFF;//灯全亮 delayms(500);P1=0X00;//灯全灭 第二次了闪烁delayms(500);P1=0XFF;//灯全亮delayms(500);P1=0X00;//灯全灭第三次闪烁delayms(500);P1=0X81;//红绿灯初始化,红灯和另一路绿灯亮.对这部分初始化程序的解释如下:这部分程序控制交通灯的所有灯在上电后,进行三次的亮灭闪烁。每一次亮灭,都会调用一次延时程序。这让会形成一个亮一秒,灭一秒的闪烁。总共闪烁三次。在闪烁完之后,通过单片机的P3口对交通灯进行控制,对P3口赋初值以达到控制的目的。这里用的初始值是0x81,控制了一个路口的灯为红灯和一个路口的灯为绿灯。3.2中断的打开和设置。这里写入了计数初值,TMOD的初值。//数码管控制部分time=13;//时间为70s的倒计时****************第一处:为了便于验证,暂时改为13TMOD=0X10;EA=1;ET1=1;TH1=(65536-46083)/256;TL1=(65536-46083)%256;TR1=1;这里写入的计数初值可以看出,每50ms产生一次中断益处,在通过中断程序的计数,每20次中断使时间计数time减1,这就完成了计时,让time表示一秒。以下是中断程序部分//中断程序voidtimer() interrupt3{jishu=jishu+1;if(jishu==20){jishu=0;time--;}//每次时间减1TH1=(65536-46083)/256;//重新写入计数初值TL1=(65536-46083)%256;}3.3数码管控制部分,主要用来控制数码管的位选和显示。while(1)//这里只是循环的一部分。{ P3=0XFF;//P3控制六个灯shi=time/10; ge=time%10; P2=0X40;//选通十位 P0=table[shi]; delayms(10); P2=0X80;//选通个位 P0=table[ge]; delayms(10);对上述代码做如下解释:通P2口来做位选,这里最高只有70,所以只用了两位数码管。通过P0口来控制数码管显示的内容。P2口的实现方法是通过控制个位和十位,在程序里可以看出。3.4交通灯的控制部分。通过这里的代码,实现了对以下三个目的:倒数10s的时候,其中一个路口的黄灯开始亮,一直亮到倒数5秒。倒数5s的时候,红绿灯开始闪烁。最后一秒的时候,两个路口的红绿灯交替,实现了红绿灯变换。//交通灯变化控制部分if(lukou==0){if(time==10)P1=0XC1;}//倒数10s,根据lukou信号控制两个黄灯亮灭if(lukou==1){if(time==10)P1=0X26;}//倒数10s,黄灯亮if(time==5)P1=0x00;//倒数5s,红绿灯闪烁if(time==4)P1=0xa5;if(time==3)P1=0x00;if(time==2)P1=0xa5;if(time==1)P1=0x00;if(time==0){if(lukou==0)P1=0X24;//红绿灯变换if(lukou==1)P1=0X81;time=13;//重新写入时间初值,时间复位 ****************第二处:为了便于验证,暂时改为13 if(lukou==0)lukou=1;//lukou取反 elselukou=0;对上述代码做如下解释:通过lukou信号来控制黄灯的显示。因为只需要绿灯的路口才显示黄灯,红灯不需要,所以通过路口这一信号来控制不同的黄灯显示,代码中式通过两个if语句的嵌套,lukou为1和0来选择不同的黄灯。倒数5秒的时候,灯全灭,倒数4秒的时候,灯全亮,3秒的时候,灯全灭,2秒的时候全亮,1秒的时候全灭,0秒的时候,根据lukou信号来判断,从而实现对不同红绿灯的控制,通过lukou信号来作为if语句的条件,这一对灯的控制非常方便,这里也是用到了两个if嵌套。最后是一个对路口信号取反的语句,本来是想用lukou=~lukou实现取反的,但是在实践的时候,发现这样达不到效果,于是用了上述代码的取反语句,用一个if条件选着来实现对lukou信号的取反。3.5对总的程序做如下解释。a,延时语句和宏定义语句在述解释中没有提到。b,调试过程中为了方便,把总的倒计时70秒改为了13秒。,电路部分3.6交通灯模块,这一模块通过P1口控制,最高三位控制一个路口,最低三位控制一个路口。图中的一条十字路口线为标记线,为了方便看,并没有实际用途。3.7数码管部分电路。这里的U2,U3,PR1,PR2是用来放大P0,P2口的输出信号,数码管只是用最后两个,通过代码实现对最后两个的位选。整个程序代码3.7整体代码其中大部分代码都有注释,并且也在学校实验室调试成功,通过电路仿真,实现的功能和预期想要达到效果一样。//********交通灯控制***********//陈明松(20111302026)//课题名字:交通灯控制//********交通灯控制***********#include"AT89x52.h"#defineucharunsignedchar#defineuintunsignedintuchartime=0,shi=0,ge=0;//定义计时时间time,时间的十位shi,和个位geucharjishu;//定义jishu用来计数chartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xaa,0x86,0x8e};ucharlukou;//路口监控信号,用来控制两条路的不同黄灯显示和红绿灯切换//延时函数voiddelayms(uintdelay_ms){unsignedchari;while(delay_ms--)for(i=0;i<200;i++);}//主程序voidmain(void){lukou=0;//交通灯部分初始化部分P1=0XFF;//复位时,全部灯闪烁三次//delayms(500);P1=0X00;//灯全灭 第一次闪烁//delayms(500);P1=0XFF;//灯全亮 //delayms(500);P1=0X00;//灯全灭 第二次了闪烁//delayms(500);P1=0XFF;//灯全亮delayms(500);P1=0X00;//灯全灭第三次闪烁delayms(500);P1=0X81;//红绿灯初始化,红灯和另一路绿灯亮.//数码管控制部分time=13;//时间为70s的倒计时****************第一处:为了便于验证,暂时改为13TMOD=0X10;EA=1;ET1=1;TH1=(65536-46083)/256;TL1=(65536-46083)%256;TR1=1;while(1){shi=time/10; ge=time%10; P2=0X40;//选通十位 P0=table[shi]; delayms(10); P2=0X80;//选通个位 P0=table[ge]; delayms(10);//交通灯变化控制部分if(lukou==0){if(time==10)P1=0XC1;}//倒数10s,根据lukou信号控制两个黄灯亮灭if(lukou==1){if(time==10)P1=0X26;}//倒数10s,黄灯亮if(time==5)P1=0x00;//倒数5s,红绿灯闪烁if(time==4)P1=0xa5;if(time==3)P1=0x00;if(time==2)P1=0xa5;if(time==1)P1=0x00;if(time==0){if(lukou==0)P1=0X24;//红绿灯变换if(lukou==1)P1=0X81;time=13;//重新写入时间初值,时间复位 ****************第二处:为了便于验证,暂时改为13 if(lukou==0)lukou=1;//lukou取反 elselukou=0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论