单片机课程设计报告十字路口交通灯控制.pdf
1宁夏大学新华学院宁夏大学新华学院课课 程程 考考 核核课程名称微机接口姓 名学 号专 业年级班 级系 别分 数任课教师签字批改日期备 注2绪绪论论主要内容:主要内容:随着各种交通工具的发展和交通指挥的需要,第一盏名副其实的三色灯(红、黄、绿三种标志)于 1918 年诞生。它是三色圆形四面投影器,被安装在纽约市五号街的一座高塔上,由于它的诞生,使城市交通大为改善。黄色信号灯的发明者是我国的胡汝鼎,他怀着“科学救国”的抱负到美国深造,在大发明家爱迪生为董事长的美国通用电器公司任职员。一天,他站在繁华的十字路口等待绿灯信号,当他看到红灯而正要过去时,一辆转弯的汽车呼地一声擦身而过,吓了他一身冷汗。回到宿舍,他反复琢磨,终于想到在红、绿灯中间再加上一个黄色信号灯,提醒人们注意危险。他的建议立即得到有关方面的肯定。于是红、黄、绿三色信号灯即以一个完整的指挥信号家族,遍及全世界陆、海、空交通领域了。交通灯控制器设计主要功能是用单片机控制 LED 灯模拟指示。模拟东西南北方向的十字路口交通灯信号控制情况。 以 89C51 单片机为核心芯片,采用中断方式实现控制。本模拟系统由单片机硬/软件系统, 两位 8 段数码管和 LED 灯显示系统。 和复位电路控制电路等组成,较好的模拟了交通路面的控制。3基本要求:基本要求:利用单片机的定时器产生秒信号,控制十字路口的红、绿、黄灯交替点亮和熄灭, 并且用4只LED数码管显示十字路口两个方向的剩余时间。 要求能用按键设置两个方向的通行时间 (绿、 红等点亮的时间)和暂缓通行时间(黄灯点亮的时间)。系统的工作应符合一般交通灯控制的要求。参考文献:参考文献:1 张毅刚,彭喜元 编著.单片机原理与应用设计2 郭天祥 编著.新概念51单片机C语言教程:入门、提高、开发、拓展全攻略3编写本课程设计内容的软件设计 (包含程序流程图和对程序注释) 。4硬件实验部分可选用实验箱测试或 Proteus 仿真软件实现。4目录1 绪论.21.1 主要内容. 21.2 基本要求. 31.3 参考文献. 32 设计方案简介. 53 系统需求分析.64 单片机概述.65 本设计的简要概述.76 本设计主要包括几个主要的元件.87 模块设计. 97.1 硬件原理图. 97.2 软件系统结构图.107.3 软件流程图. 108 源程序. 129 主要函数说明.33对本设计的简单评述.34附录 A.35附录 B.355设计方案简介:设计方案简介:交通在人们的日常生活中占有重要的地位, 随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。 在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本设计系统由单片机I/O口系统、交通灯状态显示系统、复位电路等几大部分组成。系统具有基本的交通灯功能,较好的模拟实现了十字路口可能出现的状况。 本设计系统利用单片机的工作原理设计一个十字路口交通信号灯,要求东、西、南、北四个方向各有红黄绿色三个灯,当东西方向亮绿灯时,南北方向红灯亮起;反之,如果南北方向亮绿灯,同时东西方向亮绿灯;绿灯亮时车辆行驶,红灯亮时车辆停止。即在同一时间内保证只有两个对应方向的车辆可以行驶。 本设计系统软件上采用Keil uVision3、Proteus。使用C51编程,主要编写了主程序、中断子程序、延时子程序、数码管显示子程序、交通控制子程序、矩阵键盘子程序。 本设计系统经过整机调试,实现了对十字路口交通灯运作与设置的模拟。6系统需求分析:系统需求分析:本设计系统单片机 89C51 为中心器件来设计交通灯控制器, 系统实用性强、操作简单、扩展性强、成本较低。本设计就是采用单片机模拟十字路口交通灯的各种状态显示。 利用单片机完成交通信号灯控制器的设计, 该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,数码管显示剩余时间。红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯,8 管共阴极数码管显示剩余时间,矩阵键盘用来设置交通灯的显示时间和状态。单片机概述:单片机概述:7单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器 CPU、随机存储器RAM、只读存储器 ROM、多种 I/O 口和中断系统、定时器/计数器等功能 (可能还包括显示驱动电路、 脉宽调制电路、 模拟多路转换器、 A/D转换器等电路) 集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪 80 年代,由当时的 4 位、8 位单片机,发展到现在的 300M 的高速单片机。本设计的简要概述:本设计的简要概述:本设计系统利用单片机的工作原理设计一个十字路口交通信号灯,要求东、西、南、北四个方向各有红黄绿色三个灯,当东西方向亮绿灯时,南北方向红灯亮起;反之,如果南北方向亮绿灯,同时东西方向亮绿灯;绿灯亮时车辆行驶,红灯亮时车辆停止。说明:南北方向红绿灯时间:红灯 15s绿灯 15s黄灯 5s东西方向红绿灯时间:红灯 20s绿灯 10s黄灯 5s按键 1:暂停按键 2:设置时间按钮按键 3:设置完成重启按键 4:测试交通灯各个设备的好坏8按键 5:设置南北绿灯时间 +按键 6:设置南北黄灯时间 +按键 7:设置南北绿灯时间 - 保证交通合理,绿灯最小值计时 3s,绿灯不再减少按键 8:设置南北黄灯时间 -按键 9:设置东西绿灯时间 +按键 10:设置东西黄灯时间 +按键 11:设置东西绿灯时间 -按键 12:设置东西黄灯时间 -按键 13:南北紧急情况:南北绿灯常亮 东西红灯常亮按键 14:东西紧急情况:东西绿灯常亮 南北红灯常亮本设计主要包括几个主要的元件:本设计主要包括几个主要的元件:1.AT89C51:9AT89C51 是一种带 4K 字节 FLASH 存储器(FPEROMFlashProgrammable and Erasable Read Only Memory)的低电压、高性能CMOS 8 位微处理器,俗称单片机。为本科单片机教学主要芯片TMS320F2812,DSP 原理与应用技术。AT89C51 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 外形及引脚排列如图所示。现在 AT89S51/52 已经取代了 AT89C51/52。2.4*4 矩阵键盘:在键盘中按键数量较多时,为了减少 I/O 口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如 P1 口)就可以构成 4*4=16 个按键, 比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成 20 键的键盘,而直接用端口线则只能多出一键(9 键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。3.RESPACK-8:一般是接在 51 单片机的 P0 口,因为 P0 口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻。排阻就是好多电阻连载一起,他们有一个公共端。10硬件原理图:硬件原理图:Proteus 仿真绘制软件系统结构图和软件流程图:软件系统结构图和软件流程图:(1 1) 系统结构图:系统结构图:11(2 2) 流程图:流程图:十字路口交通灯控制流程图12源程序:源程序:#include#define uchar unsigned char#define uint unsigned intuchar code table=/共阴极数码管码表0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 xC9,0 xFF,0 x40;/设置码,测试码,不计时码void delay(uint x);/延时函数void display(uchar,uchar,uchar,uchar); /数码管显示函数void scankeys();/键盘函数void traffic();/交通灯函数uchar num,num1,num2,/1 南北 2 东西shi1,ge1,shi2,ge2,13value1,value2,/南北 绿灯时间 黄灯时间value3,value4,/东西 绿灯时间 黄灯时间count1,count2,flag1,flag2; /南北标记 东西标记南北设置标记 东西设置标记void main()TMOD=0 x01;/设置定时器 0 位工作模式 1(M1,M0 位0,1)TH0=(65536-45872)/256;/装初值 11.0592M 晶振定时50ms 数为 45872TL0=(65536-45872)%256;EA=1;/开总中断ET0=1;/开定时器 0 中断TR0=1;/启动定时器 0/*初状态*/value1=15;/南北 黄绿灯默认值value2=5;value3=10;/东西 黄绿灯默认值value4=5;14num1=value1; /南北数码管先绿灯时间num2=value2+value1;/东西红灯时间20sP1=0 x41;/初始状态:东西红灯 南北绿灯20 15while(1)if(num=20)/定时器 1snum=0;num1-;num2-;traffic();shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;scankeys();display(shi1,ge1,shi2,ge2);15/*红绿灯主控制程序*说明:南北方向红绿灯时间:红灯 15s绿灯 15s黄灯5s东西方向红绿灯时间:红灯 20s绿灯 10s黄灯5s*/void traffic()if(num1=0)/1 南北count1+;/南北标志位if(count1=1)/南北方向红灯15s 倒计时结束,P1=0 x42;/东西方向仍为红16灯,南北方向变为黄灯num1=value2;/黄灯时间为 5sif(count1=2)/南北方向黄灯 5s 倒计时结束,P1=0 x14;/东西方向变为绿灯,南北方向变为红灯num1=value3+value4;/南北方法红灯时间为 15sif(count1=3)/南北方向红灯 15s 倒计时结束,P1=0 x41;/东西方向变为红灯,南北方向变为绿灯num1=value1;/南北方向绿灯时间15scount1=0;/重置南北标志位if(num2=0)/ 2 东西count2+;/东西标志位if(count2=1)/东西方向红灯 20s17倒计时结束,P1=0 x14;/东西方向变为绿灯,南北方向变为红灯num2=value3;/东西方向绿灯时间10sif(count2=2)/东西方向绿灯 10s 倒计时结束,P1=0 x24;/东西方向变为黄灯,南北方向变为仍为红灯num2=value4;/东西方向黄灯时间 5sif(count2=3)/东西方向黄灯时间 5s倒计时结束,P1=0 x41;/东西方向变为红灯,南北方向变为绿灯num2=value1+value2;/东西方向红灯时间20scount2=0;/重置东西标志位18/* 数 码 管 显 示 子 函 数*/void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2)uchar temp;temp=P2;P2=0 xfe;P0=tableshi1;delay(5);P2=0 xfd;P0=tablege1;delay(5);P2=0 xfb;P0=tableshi2;delay(5);P2=0 xf7;P0=tablege2;delay(5);19/*延时子函数*/void delay(uint x)uint i,j;for(i=x;i0;i-)for(j=110;j0;j-);/*4*4矩 阵 键 盘 功 能 子 函 数*说明:*/void scankeys()uchar temp,key;P3=0 xfe;/第一行线20temp=P3;temp=temp&0 xf0;if(temp!=0 xf0)delay(10);/按键去抖temp=P3;temp=temp&0 xf0;if(temp!=0 xf0)temp=P3;switch(temp)case 0 xee:key=0;break;case 0 xde:key=1;break;case 0 xbe:key=2;break;case 0 x7e:key=3;break;while(temp!=0 xf0)temp=P3;temp=temp&0 xf0;21if(key=0)/按键 1:TR0=TR0;/定时器取反flag1=flag1;/南北能够设置标志 0 有效flag2=flag2;/东西能够设置标志if(key=1&flag1=0)/按键 2:TR0=0;P1=0 x44;/禁止东南西北车辆 全为红灯可以设置shi1=ge1=shi2=ge2=16;/数码管显示设置符号if(key=2&flag2=0)/按键 3:TR0=1;num=0;/定时器初始化P1=0 x41;/重新开始初状态num1=value1;/南北数码管绿灯时间num2=value2+value1;/东西数码管红灯时间22shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;if(key=3&P1=0 x44)/按键 4:P1=0 xff;delay(1000);P1=P1;shi1=ge1=shi2=ge2=17;P1=0 x44;P3=0 xfd;/第二行线temp=P3;temp=temp&0 xf0;if(temp!=0 xf0)23delay(10);temp=P3;temp=temp&0 xf0;if(temp!=0 xf0)temp=P3;switch(temp)case 0 xed: key=0; break;case 0 xdd: key=1; break;case 0 xbd: key=2; break;case 0 x7d: key=3; break;while(temp!=0 xf0)temp=P3;temp=temp&0 xf0;if(key=0&P1=0 x44)/按键 5:num1=value1;if(num2!=159) /保证交通合理,红灯最大值计时24159s,绿灯不再增加num1+;value1=num1;shi1=num1/10;ge1=num1%10;num2=value1+value2;/显示东西红灯时间shi2=num2/10;ge2=num2%10;if(key=1&P1=0 x44)/按键 6:num1=value2;if(num2!=159)num1+;value2=num1;25shi1=num1/10;ge1=num1%10;num2=value1+value2;/显示东西红灯时间shi2=num2/10;ge2=num2%10;if(key=2&P1=0 x44&value13)/按键 7:num1=value1;num1-;value1=num1;shi1=num1/10;ge1=num1%10;num2=value1+value2;/显示东西红灯时间shi2=num2/10;ge2=num2%10;if(key=3&P1=0 x44&value23)/按键 8:num1=value2;26num1-;value2=num1;shi1=num1/10;ge1=num1%10;num2=value1+value2;/显示东西红灯时间shi2=num2/10;ge2=num2%10;/|P3=0 xfb;/第三行线temp=P3;temp=temp&0 xf0;if(temp!=0 xf0)delay(10);27temp=P3;temp=temp&0 xf0;if(temp!=0 xf0)temp=P3;switch(temp)case 0 xeb:key=0; break;case 0 xdb:key=1; break;case 0 xbb:key=2; break;case 0 x7b:key=3; break;while(temp!=0 xf0)temp=P3;temp=temp&0 xf0;if(key=0&P1=0 x44)/按键 9:num2=value3;if(num1!=159)num2+;value3=num2;28shi2=num2/10;ge2=num2%10;num1=value3+value4;/显示南北红灯时间shi1=num1/10;ge1=num1%10;if(key=1&P1=0 x44)/按键 10:num2=value4;if(num1!=159)num2+;value4=num2;shi2=num2/10;ge2=num2%10;29num1=value3+value4;/显示南北红灯时间shi1=num1/10;ge1=num1%10;if(key=2&P1=0 x44&value33)/按键 11:num2=value3;num2-;value3=num2;shi2=num2/10;ge2=num2%10;num1=value3+value4;/显示南北红灯时间shi1=num1/10;ge1=num1%10;if(key=3&P1=0 x44&value43)/按键 12:num2=value4;30num2-;value4=num2;shi2=num2/10;ge2=num2%10;num1=value3+value4;/显示南北红灯时间shi1=num1/10;ge1=num1%10;P3=0 xf7;/第四行线2 未用temp=P3;temp=temp&0 xf0;if(temp!=0 xf0)delay(10);31temp=P3;temp=temp&0 xf0;if(temp!=0 xf0)temp=P3;switch(temp)case 0 xe7:key=0;break;case 0 xd7:key=1;break;case 0 xb7:key=2;break;case 0 x77:key=3;break;while(temp!=0 xf0)temp=P3;32temp=temp&0 xf0;if(key=0&P1=0 x44)/按键 13:P1=0 x41;shi1=ge1=shi2=ge2=18;if(key=1&P1=0 x44)/按键 14:P1=0 x14;shi1=ge1=shi2=ge2=18;if(key=2&P1=0 x44)/按键 15:if(key=3&P1=0 x44)/按键 16:33/*定时器T0中断子程序*/void T0_time() interrupt 1TH0=(65536-45872)/256;/定时 50msTL0=(65536-45872)%256;num+;主要函数说明:主要函数说明:本程序用C51编写,在main()函数里面包含:1) 延时函数:delay(uint x); 主要控制数码管动态显示,x用来控制延时长短2)十 字 路 口 剩 余 时 间 数 码 管 显 示 函 数 :display(uchar,uchar,uchar,uchar); 给P0东西南北方向数码管每段十位、个位送数据3) 键盘函数:mkeys();交通灯时间、状态的设置344) 交通南北东西灯红黄绿工作顺序函数:traffic()。交通灯运行规则控制对本设计的简单评述:对本设计的简单评述:通过这次课程设计,使我掌握了交通灯控制的基本思想与原理,学习到了一些有用的专业知识、 专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,电路图的绘制以及在常用编程设计思路技巧的掌握方面都向前迈了一大步。 而且本次课程设计是分三人小组设计模式,增强了我的团队意识,以及团队之间共同商量问题, 解决问题的能力。 本次课程设计的过程是艰辛的,不过收获却是很大的。 在设计过程中,会出现了一些问题,但都是常见的小问题,如:在代码中中英文符号转换问题,输入字母出错,程序语法错误,代码维护困难等;在调试过程中出现异常,显示效果不是理想的效果。不过经过调试修改,代码模块化,小组成员的共同商量与检查这些问题都一一解决,程序顺利完成,并实现了预期的功能。 综合课程设计让我们把课堂上学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我们通过查阅相关书籍、资料以及小组成员之间的交流、已经老师的耐性指导把困难统统克服。 由于使用的是单片机作为核心的控制元件,使得电路的可靠35性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。但是在我们设计和调试的过程中,也发现了一些问题,不过设计也有很多不足之处,譬如红灯和绿灯的切换还不够迅速,红绿灯规则不效率还不是很高,键盘效率不太高等等,这需要在实践中进一步完善,希望在今后的学习中学习更多新知识然后得以完善。 当然,通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我,在今后的学习和工作中设计出更好的作品!同时感谢老师和同学的耐心指点,使我能够顺利的完成本次任务。