单片机课程设计城市十字路口交通灯控制系统的设计_第1页
单片机课程设计城市十字路口交通灯控制系统的设计_第2页
单片机课程设计城市十字路口交通灯控制系统的设计_第3页
单片机课程设计城市十字路口交通灯控制系统的设计_第4页
单片机课程设计城市十字路口交通灯控制系统的设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

摘要本系统由单片机系统、键盘、LED显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间、违规车辆检测以及根据具体情况手动控制等功能。本文通过查询相关资料及对系统设计要求和交通灯电路逻辑的分析,结合MCS-51的使用特点提出了一套系统实现的软、硬件方案,并通过MCS-51开发装置实现了该设计方案的基本功能,对交通灯系统设计进行了一种经济、有效的尝试。关键词MCS-51单片机KEILC51编译器LED显示时序

目录第1章引言··································································1第2章总体方案设计·························································5第3章第4章第5章系统调试·····························································23结论·········································································24参考文献·····································································25附录·········································································26第1章引言51的编程语言常用的有二种,一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,本文在程序编写时选择了C语言来作为编译语言。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2IDE可为它们提供单一而灵活的开发环境。C51是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。工程(project)是由源文件、开发工具选项以及编程说明三部分组成的。一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组”。开发工具选项可以对应目标,组或单个文件。uVision2包含一个器件数据库(devicedatabase),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(extradatapointer)或者加速器(mathaccelerator)的特性。uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模。uVision2编辑器包含了所有用户熟悉的特性。彩色语法显像和文件辩识都对C源代码进行和优化。可以在编辑器内调试程序并且可以编写或使用类似C的数语言进行调试。KEILC51编译器在遵循ANSI标准的同时,为8051微控制器系列特别设计。语言上的扩展能让用户使用应用中的所有资源。C51允许用户使用C语言编写中断服务程序,快速进、出代码和寄存器区的转换功能使C语言中断功能更加高效。可再入功能是用关键字来定义的。多任务,中断或非中断的代码要求必须具备可再入功能。C51提供了灵活高效的指针。通用指针用3个字节来存储存储器类型及目标地址,可以在8051的任意存储区内存取任何变量。特殊指针在声明的同时已指定了存储器类型,指向某一特定的存储区域。由于地址的存储只需1-2字节,因此,指针存取非常迅速。uVision2调试器具备所有常规源极调试,符号调试特性以及历史跟踪,代码覆盖,复杂断点等功能。DDE界面和shift语言支持自动程序测试。第2章总体方案设计车人行驶行人灯车人行驶行人灯行人灯白圈代表红灯左弯灯右弯灯黑圈代表绿灯图2-1标号设定图2-2规则状态图图2-3(a)车辆行驶状态S1图2-3(b)车辆行驶状态S2图2-3(c)车辆行驶状态S3图2-3(d)车辆行驶状态S42-3交通灯四种状态S1的状态ABCDEFGH逻辑值显示时间从40秒到0秒S2的状态ABCDEFGH逻辑值显示时间从30秒到0秒S3的状态ABCDEFGH逻辑值显示时间从70秒到30秒S4的状态ABCDEFGH逻辑值显示时间从30秒到0秒表2-1交通灯的循环逻辑表图2-4电源电路

第3章硬件系统设计图3-1LED控制电路图3-2(a)E10501外形图图3-2(b)E10501等效电路图图3-2(c)数码管显示图3-3违规检测电路

第4章软件系统设计图4-1主程序流程图////////////////////////////主函数//////////////////////////Voidmain(){t=5;TIME_Init();//定时器初始化sec=COUNT_DOWN;//定时初值while(1){key_scan();//按键扫描switch(key_flag){case0:t++;if(t>=30)t=5;break;//设置时间case1:TR2=1;break;//恢复case2:EW_ON;P1=LED[4];TR2=0;break;//南北禁行,定时器停止case3:SN_ON;P1=LED[4];TR2=0;break;//东西禁行,定时器停止}//==========状态S1========if((aspect_flag==0)&(interim_flag==0)&(key_flag==0)){EW_ON;P1=LED[0];P2=LED7Code[(sec-INTERIM)/10];//东西方向绿灯,少5秒Delay1Ms(1);P2=0XFF;P1=LED[1];P2=LED7Code[(sec-INTERIM)%10];Delay1Ms(1);P1=LED[2];P2=LED7Code[sec/10];//南北方向红灯Delay1Ms(1);P2=0XFF;P1=LED[3];P2=LED7Code[sec%10];Delay1Ms(1);}//==========状态S2========if((aspect_flag==0)&(interim_flag==1)&(key_flag==0)){if(half_sec%2==1)EW_Y_ON;elseEW_Y_OFF;P1=LED[0];P2=LED7Code[sec/10];//东西方向黄灯Delay1Ms(1);P2=0XFF;P1=LED[1];P2=LED7Code[sec%10];Delay1Ms(1);P1=LED[2];P2=LED7Code[sec/10];//南北方向红灯Delay1Ms(1);P2=0XFF;P1=LED[3];P2=LED7Code[sec%10];Delay1Ms(1);}//==========状态S3========if((aspect_flag==1)&(interim_flag==0)&(key_flag==0)){SN_ON;P1=LED[0];P2=LED7Code[sec/10];//东西方向红灯Delay1Ms(1);P2=0XFF;P1=LED[1];P2=LED7Code[sec%10];Delay1Ms(1);P1=LED[2];P2=LED7Code[(sec-INTERIM)/10];//南北方向绿灯,少5秒Delay1Ms(1);P2=0XFF;P1=LED[3];P2=LED7Code[(sec-INTERIM)%10];Delay1Ms(1);}//==========状态S4========if((aspect_flag==1)&(interim_flag==1)&(key_flag==0)){if(half_sec%2==1)SN_Y_ON;elseSN_Y_OFF;P1=LED[0];P2=LED7Code[sec/10];Delay1Ms(1);P2=0XFF;P1=LED[1];P2=LED7Code[sec%10];Delay1Ms(1);P1=LED[2];P2=LED7Code[sec/10];Delay1Ms(1);P2=0XFF;P1=LED[3];P2=LED7Code[sec%10];Delay1Ms(1);}}}4-2按键子程序流程图图4-3按键设置图4-4矩阵键盘的原理图 图4-5键闭合和断开时的电压抖动voidkey_scan(){if(KEY1==0){Delay1Ms(10);//按下延时消颤if(KEY1==0){if(key_flag==1)key_flag=0;//取消elsekey_flag=1;//确定}while(KEY1==0);Delay1Ms(5);//弹起延时消颤while(KEY1==0);}if(KEY2==0){Delay1Ms(10);//按下延时消颤if(KEY2==0){if(key_flag==2)key_flag=0;//取消elsekey_flag=2;//确定}while(KEY2==0);Delay1Ms(5);//弹起延时消颤while(KEY2==0);}if(KEY3==0){Delay1Ms(10);//按下延时消颤if(KEY3==0){if(key_flag==3)key_flag=0;//取消elsekey_flag=3;//确定}while(KEY3==0);Delay1Ms(5);//弹起延时消颤while(KEY3==0);}if(KEY4==0){Delay1Ms(10);//按下延时消颤if(KEY4==0){if(key_flag==4)key_flag=0;//取消elsekey_flag=4;//确定}while(KEY4==0);Delay1Ms(5);//弹起延时消颤while(KEY4==0);}}第5章系统调试图5-1ISP下载软件结论

参考文献及网站

附录//******************************************************//程序名称:十字路口简易交通灯//功能介绍:// KEY1按下,设置时间//KEY2按下,恢复//KEY3按下,东西禁止通行//KEY4按下,南北禁止通行//******************************************************#include<reg52.h>#include<intrins.h>//===========================================================#defineucharunsignedchar#defineuintunsignedint//=====================指示灯状态定义========================#defineALL_OFF(P0=0xdb)//全部禁行#defineEW_ON(P0=0xeb)//东西绿灯,南北红灯#defineSN_ON(P0=0xdd)//南北绿灯,东西红灯#defineEW_Y_ON(P0=0xF3)//南北红灯,东西黄灯亮#defineEW_Y_OFF(P0=0xFB)//南北红灯,东西黄灯灭#defineSN_Y_ON(P0=0xDE)//东西红灯,南北黄灯亮#defineSN_Y_OFF(P0=0xDF)//东西红灯,南北黄灯灭#defineCOUNT_DOWN70//定时时间#defineINTERIMt//黄灯过渡时间//====================按键定义===============================sbitKEY1=P2^4;//时间设置sbitKEY2=P2^5;//恢复sbitKEY3=P2^6;//东西禁行sbitKEY4=P2^7;//南北禁行//====================函数定义===============================voidTIME_Init();//定时器初始化voidDelay1Ms(uchart);//延时t*1MsvoidDelay1s(uchart);//延时t*1svoidkey_scan();//键盘扫描//======================数码管选择定义=======================constucharLED7Code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//段码constucharLED[]={0x01,0x02,0x04,0x08,0x00};//共阳数码管位选//====================变量定义===============================uchart50ms=0;//50ms累加位ucharhalf_sec,sec;//半秒,秒寄存器ucharkey_flag;//键值标记位uintt;bitaspect_flag=0;//0:东西通行,1:南北通行bitinterim_flag=0;//0:东西黄灯,1:南北黄灯////////////////////////////主函数//////////////////////////Voidmain(){t=5;TIME_Init();//定时器初始化sec=COUNT_DOWN;//定时初值while(1){key_scan();//按键扫描switch(key_flag){case0:t++;if(t>=30)t=5;break;//设置时间case1:TR0=1;break;//恢复case2:EW_ON;P1=LED[4];TR0=0;break;//南北禁行,定时器停止case3:SN_ON;P1=LED[4];TR0=0;break;//东西禁行,定时器停止}//==========状态S1========if((aspect_flag==0)&(interim_flag==0)&(key_flag==0)){EW_ON;P1=LED[0];P2=LED7Code[(sec-INTERIM)/10];//东西方向绿灯,少5秒Delay1Ms(1);P2=0XFF;P1=LED[1];P2=LED7Code[(sec-INTERIM)%10];Delay1Ms(1);P1=LED[2];P2=LED7Code[sec/10];//南北方向红灯Delay1Ms(1);P2=0XFF;P1=LED[3];P2=LED7Code[sec%10];Delay1Ms(1);}//==========状态S2========if((aspect_flag==0)&(interim_flag==1)&(key_flag==0)){if(half_sec%2==1)EW_Y_ON;elseEW_Y_OFF;P1=LED[0];P2=LED7Code[sec/10];//东西方向黄灯Delay1Ms(1);P2=0XFF;P1=LED[1];P2=LED7Code[sec%10];Delay1Ms(1);P1=LED[2];P2=LED7Code[sec/10];//南北方向红灯Delay1Ms(1);P2=0XFF;P1=LED[3];P2=LED7Code[sec%10];Delay1Ms(1);}//==========状态S3========if((aspect_flag==1)&(interim_flag==0)&(key_flag==0)){SN_ON;P1=LED[0];P2=LED7Code[sec/10];//东西方向红灯Delay1Ms(1);P2=0XFF;P1=LED[1];P2=LED7Code[sec%10];Delay1Ms(1);P1=LED[2];P2=LED7Code[(sec-INTERIM)/10];//南北方向绿灯,少5秒Delay1Ms(1);P2=0XFF;P1=LED[3];P2=LED7Code[(sec-INTERIM)%10];Delay1Ms(1);}//==========状态S4========if((aspect_flag==1)&(interim_flag==1)&(key_flag==0)){if(half_sec%2==1)SN_Y_ON;elseSN_Y_OFF;P1=LED[0];P2=LED7Code[sec/10];Delay1Ms(1);P2=0XFF;P1=LED[1];P2=LED7Code[sec%10];Delay1Ms(1);P1=LED[2];P2=LED7Code[sec/10];Delay1Ms(1);P2=0XFF;P1=LED[3];P2=LED7Code[sec%10];Delay1Ms(1);}}}/******************************************************************名称:voidTIME_Init();功能:定时器初始化指令:调用:无返回:无/******************************************************************/voidTIME_Init(){TMOD=0x01;RCAP2H=(65536-50000)/256;//定时50ms自动重装RCAP2L=(65536-50000)%256;EA=1;//总中断使能ET0=1;//定时器0中断开TR0=1;//关定时器0}/******************************************************************名称:voidTim0()interrupt1功能:T0中断,参数:调用:返回:******************************************************************/voidPWM_Time0()interrupt1{RCAP2H=(65536-50000)/256;//定时50ms自动重装RCAP2L=(65536-50000)%256;TF2=0;//清零中断标志位//ET2=0;//定时器0中断禁止if(++t50ms==10){half_sec++;t50ms=0;}if(half_sec==2){half_sec=0;//清零if(--sec==INTERIM){interim_flag=1;//黄灯闪烁标志}if(sec==0){sec=COUNT_DOWN;aspect_flag=!aspect_flag;//换向interim_flag=0;//黄灯闪烁关闭}}}/******************************************************************名称:voidkey_scan()功能:按键扫描参数:调用:返回:******************************************************************/voidkey_scan(){if(KEY1==0){Delay1Ms(10);//按下延时消颤if(KEY1==0){if(key_flag==1)key_flag=0;//取消elsekey_flag=1;//

温馨提示

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

评论

0/150

提交评论