单片机设计交通信号灯实验报告.doc_第1页
单片机设计交通信号灯实验报告.doc_第2页
单片机设计交通信号灯实验报告.doc_第3页
单片机设计交通信号灯实验报告.doc_第4页
单片机设计交通信号灯实验报告.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

单片机C语言程序设计专题实习专周报告班 级: 学 号: 姓 名: 指导老师: 专周成绩: 一、硬件设计 1.设计要求:A、B两通道都有车,两道正向放行35s,然后左向行驶放行15s。当A道放行时(绿),B道禁止(红),反之亦然,放行时间中包含有闪烁时间绿灯红灯转换必须经5s的警视状态设置紧急情况处理器,当紧急情况发生时,两道都亮红灯,让紧急车辆通过,完备再回到当前的状态具有数码管显示倒计时功能。 2.图样: 3.硬件选择:选用8052单片机一片,红、黄、绿LED交通显示灯各4个,导线若干,7SEG数码显示管。单片机模块:主控芯片采用AT89C52单片机, AT89C52是AT89C5X系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。AT89C52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。AT89C52共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输,其内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序。管脚图如下图所示。倒计时显示模块:由于黄灯5秒闪烁时间不单另计时,四个路口的倒计时是同步的。故倒计时采用两个七段数码显示管。紧急模式模块:交通路口出现紧急状况在所难免,如特大事件发生,救护车等急行车通过等,我们都必须尽量允许其畅通无阻,毕竟在这种情况下是分秒必争的,时时刻刻关系着公共财产安全,个人生死攸关等。由此在交通控制中增设禁停按键,就可达到此目的。二、软件设计 1.设计思路:本系统以单片机为核心,由状态灯,LED显示,按键等组成。其中P0用于送显两片LED数码管,P1、P2、P3用于控制红绿黄发光二极管,采用自带晶振时钟电路,REST引脚接上复位电路,P3.1接紧急模式设置键,P3.2、P3.3、P3.4用于调解预置交通灯时间。系统上电或手动复位之后,系统等待模式选择设置键按下,模式分两种:红绿灯时间自动和紧急模式。系统默认运行时间自动,若此时3.1键按下,则设置为紧急模式,再次按3.1,回到自动时间红绿灯模式。接下来,系统必须先显示状态灯及LED数码管,将状态码值送显P1、P2、P3口,将要显示的时间值的个位和十位分别送显P0口,在此同时以50ms为周期,用软件方法计时1秒,到达1s就要将时间值减1,刷新LED数码管。 时间到达一个状态所要全部时间,则要进行下一状态判断及衔接,并装入次状态的相应状态码值以及时间值。三、程序流程图四、程序及说明#include #include #defineuint unsigned int#define uchar unsigned charuchar night_flag=0;/紧急标志位uchar time_cl=0;/定义时间控制标志位 取0uchar flag=0;/方向通行标志位uchar B_N_D_flag=1;/定义北南通灯行标志位uchar X_D_D_flag=1;/定义西东通灯行标志位uchar i,j;/定义变量iuchar t=3;/数码管动态扫描延时时间基数uchar num=0;/时间基数初始化为0/uchar num_night=0;/紧急模式时间基数为0uchar time=35;/time初始化定为35秒int bei,nan,xi,dong; /定义 北 南 西 东uchar code Data=0x18,0x7B,0x89,0x49,0x6A,0x4C,0x0C,0x79,0x08,0x48,0xEF;/定义数组 数码管 0 1 2 3 4 5 6 7 8 9 -/*定义 红黄绿灯*/sbit M=P03;sbit B_R=P12;/北面 红灯sbit B_Y=P11;/北面 黄灯sbit B_G=P10;/北面绿灯sbit N_R=P20;/南面红灯sbit N_Y=P21;/南面黄灯sbitN_G=P22;/南面绿灯sbit X_R=P25;/西面红灯sbit X_Y=P26;/西面黄灯sbit X_G=P27;/西面绿灯sbit D_R=P37;/东面 红灯sbit D_Y=P36;/东面黄灯sbit D_G=P35;/东面 绿灯sbit s1=P34;/时间减sbit s2=P33;/时间加sbit s3=P31;/紧急模式控制切换口sbit s4=P32;/进入时间可以设置状态的切换口/*定义 数码管*/#defineSMG_XSP0/数码管数据显示#defineSMG_KZP2/数码管控制显示sbit smg1=P24;/定义数码管1控制口sbit smg2=P23;/定义数码管2控制口void delay(uint time);/ 定义延时程序void disp_init();/显示初始化void disp(bei,nan,xi,dong); void Time0_init()/定时器0初始化函数TMOD=0x01;/定时器0为方式1TL0=(65536-50000)%256;TH0=(65536-50000)/256;/12M晶振 定时时间50msET0=1;/开定时器0中断EA=1;/开总中断TR0=1;/启动定时器0void night_mode()/紧急模式B_R=1;B_R=B_R;/北 红灯取反B_G=1;N_R=1;N_R=N_R;/南 红灯取反N_G=1; X_R=1;X_R=X_R;/西 红灯取反X_G=1;D_R=1;D_R=D_R;/东 红灯取反D_G=1;void B_N_G()/北南通(绿灯) 西东(红灯)B_G=0;/北 绿灯亮N_G=0;/南 绿灯亮B_R=1;B_Y=1;N_R=1;N_Y=1; X_R=0;/西 红灯亮D_R=0;/东 红灯亮X_Y=1;X_G=1;D_Y=1;D_G=1;void X_D_G()/西东通(绿灯) 北南(红灯)B_G=1;N_G=1;B_R=0;/北 红灯亮B_Y=1;N_R=0;/南 红灯亮N_Y=1; X_R=1;D_R=1;X_Y=1;X_G=0;/西 绿灯亮D_Y=1;D_G=0;/东 绿灯亮void B_N_tong()/北南 通行if(B_N_D_flag=1)/当北南通灯行标志位为1B_N_G();/北南通(绿灯) 西东(红灯)B_N_D_flag=0;/北南通灯行标志位置0while(num=20)/当1s时间到M=0;num=0;/num清0bei-;/北时间 减1nan-;/南时间 减1xi-;/西时间 减1dong-;/东时间 减1M=1;if(bei=0|nan=0)/当北和南时间在0到6秒之间if(bei5|nan5)/进一步判断北和南时间是否在5到6秒之间B_G=B_G;/北 绿灯取反N_G=N_G;/南 绿灯取反if(bei=5&nan=5)/进一步判断北和南时间是否在5秒以内B_G=1;/北 绿灯不亮N_G=1;/南 绿灯不亮B_Y=0;/北 黄灯亮N_Y=0;/南 黄灯亮else/否则(即北和南时间不在0到6秒之间)B_G=0;/北 绿灯亮N_G=0;/南 绿灯亮B_Y=1;/北 黄灯不亮N_Y=1;/南 黄灯不亮void X_D_tong()/西东 通行if(X_D_D_flag=1)/当西东通灯行标志位为1X_D_G();/西东通(绿灯) 北南(红灯)X_D_D_flag=0;/西东通灯行标志位置0while(num=20)/当1s时间到M=0;num=0;/num清0bei-;/北时间 减1nan-;/南时间 减1xi-;/西时间 减1dong-;/东时间 减1M=1;if(xi=0|dong=0)/当西和东时间在0到6秒之间if(xi5|dong5)/进一步判断西和东时间是否在5到6秒之间X_G=X_G;/西 绿灯取反D_G=D_G;/东 绿灯取反if(xi=5&dong=5)/进一步判断西和东时间是否在5秒以内X_G=1;/西 绿灯不亮D_G=1;/东 绿灯不亮X_Y=0;/西 黄灯亮D_Y=0;/东 黄灯亮else/否则(即西和东时间不在0到6秒之间)X_G=0;/西 绿灯亮D_G=0;/东 绿灯亮X_Y=1;/西 黄灯不亮D_Y=1;/东 黄灯不亮void Time0() interrupt 1/定时器0中断服务函数TH0=(65536-50000)/256;/重新载装初值,设置50ms中断一次TL0=(65536-50000)%256;num+;/时间基数加1void main()/主函数入口bei=nan=xi=dong=time;/把time值赋给北 南 西 东disp_init();/显示初始化Time0_init();/定时器0初始化函数while(1)/无限循环if(s3=0)/当P3.7按下(开/关 紧急模式)delay(5);/延时去抖 s3=1;/关闭数码管显示if(s3=0)night_flag=night_flag;/紧急标志位取反(开/关紧急模式),1表示开,0表示关if(night_flag=1)/如果紧急模式开TR0=0;/关闭定时器0num=0;/时间基数清0TL0=(65536-50000)%256;TH0=(65536-50000)/256;/12M晶振 定时时间50msTR0=1;/开启定时器0SMG_KZ=0xff;/关闭数码管显示else /否则night_flag=0表示紧急模式关(红绿灯正常运行)void disp_init()/显示初始化for(i=0;i0;x-)for(y=110;y0;y-);五、调试1. Proteus软件仿真:在此次设计中,用Proteus对硬件部分进行模式。在Proteus中输入原理图后,在单片机中载入汇编程序生成的hex文件,运行仿真,结果如下:2. 调试过程:调试时老师询问了时钟电路,以及最小系统等问题,并随机选择了程序中的句子叫我及其他组员做答辩。最后验收附带要求我们添加时钟跟随LED,于是我们在159行时钟满一秒添加了E=1,在随后的下一秒关闭额外的LED灯即E=0。在Proteus实际仿真中我们的E放置的是显色明显的黄色LED。六、心得体会 通过这次交通灯的课程设计,使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。在此,由于自身能力有限,在课程设计中碰

温馨提示

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

评论

0/150

提交评论