全部资料下载(包含论文程序及单片机交通灯仿真文件,word ppt文档):
交通灯.rar
(818 KB, 下载次数: 75)
课程设计报告
报 告 题 目 : 交通信号灯控制电路的设计 作者所在系部:物理与电子科学学院 作者所在专业:电子信息与科学技术专业 作者所在班级: 电子三班 作 者 姓 名 :宋伟 201840620325 张淼201840620342 吴刚201840620334 徐美炯201840620336 完 成 时 间 :2010 年 12 月 19 日
课程设计任务书 | | |
| |
| |
| | | | | | 设计一个交通信号灯控制电路。要求: 1.产生以1秒为单位的计时; 2.显示通行时间和缓行时间; 3.控制显示时间和缓行时间,使之能加减。 | | 第15周: 1立题论证方案设计、熟悉软件 2检查设计结果,预答辩 第16周: 1 仿真实验 2 验收答辩 3完成设计报告ppt word文档等 | | |
内 容 摘 要 随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。为此,通过我应用所学的知识设计了一套交通灯控制电路的方案。交通灯的控制系统主要由计时电路、主控电路、中断电路、显示电路组成。 目 录 一、 概 述 ……… ……………………………………………………………3 二、方案设计 1、单片机AT89C52……………………………………………………………..3 2、数码管显示原理……………………………………………………………4~5 三、单元电路设计与源程序………………………………………………………5~11 四、总电路图及元器件清单 1.总电路图……………………………………………………………………12 2.元器件清单…………………………………………………………………12 五、使用说明参考…………………………………………………………………..12 六、结论……………………………………………………………………………..12 七、心得体会………………………………………………………………………..13 八、参考文献………………………………………………………………………..13 单片机完成交通信号灯的控制,该交通信号灯控制器由两条干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯。二、方案设计1.方案设计根据设计的要求可知,系统的硬件原理框图如下图所示。
系统硬件框图 1、单片机可选用AT89C52,它与8052系列单片机全兼容,但其内部带有8KB的FLASH ROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘,若单片机的IO口不够用时,可以考虑扩展8255或8155满足系统的要求。 2、数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。 2. 软件方案 根据设计要求,软件由C语言完成。软件设计可以分为以下几个功能模块: 主程序:初始化及键盘监控。 计时程序模块:为定时器的中断服务子程序,完成50毫秒的定时中断和1秒的定时时间。 显示程序模块:完成4个交通灯和6个LED数码管的显示驱动。 中断子程序:
程序流程图:
三、单元电路设计与源程序 1、主控电路
控制电路由P3^3—P3^7控制,其中P3^3控制开/停按钮,P3^4、P3^5控制通行时间的加和减,P3^6、P3^7控制缓行时间的加和减;开/停的控制由标志位flag控制,且flag的初始值置为0。通行时间和缓行时间的控制由jianpan函数控制(具体见源程序中的键盘函数)。 2、显示电路
显示电路由单片机AT89C52的P1和P2两个并行I/O接口控制,其中P1口控制显示控制台的时间以及车辆的通行时间和缓行时间,P2口控制十字路交通灯;在控制显示时,使用xianshi函数控制控制台显示的显示时间,xianshi2函数控制显示车辆的通行时间和缓行时间。 3、源程序 - #include
- #define uint unsigned int
- #define uchar unsigned char
- #define n 5 //
- uchar qian,bai, shi,ge,aa;
- uchar flag=0,n1,n2,b,c,d; //标志位及变量
- sbit k0=P0^0;//数码管显示位定义
- sbit k1=P0^1;
- sbit k2=P0^2;
- sbit k3=P0^3;
- sbit k4=P0^4;
- sbit k5=P0^5;
- sbit k6=P0^6;
- sbit k7=P0^7;
- sbit kai=P3^3; //键盘控制位定义
- sbit jia1=P3^4;
- sbit jian1=P3^5;
- sbit jia2=P3^6;
- sbit jian2=P3^7;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};//数码管显示代码
- void xianshi(); //十字路口数码管显示函数
- void xianshi2();//控制台数码管显示函数
- void jianpan(); //键盘检测函数
- void delay(uint z) //延时函数
- {
- uint i,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
- void init() //定时器0初始化,变量初始化函数
- { b=0;
- c=0;
- d=0;
- n1=0;
- n2=0;
- P1=0;
- P2=0;
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- }
- void main()
- {
- init();
- while(1)
- {
- jianpan();//检测键盘
- if(flag==0)//交通灯处于设置状态标志位flag=0
- P2=0x09;//四路红灯全亮
- if(flag==1)//检测交通灯处于运行状态标志位flag=1进入交通显示循环
- {
- if(n1<10)//检查通行时间设置是否合理,不合理则自动设置
- {n1=30,n2=5;}
- if(b==0&&c==0)
- {b=n1;d=n1-n2;c=1;P2=0x21;}
- if(d==0&&c==1)
- {d=n2;c=2; P2=0x11;}
- if(d==0&&c==2)
- {b=n1-n2,d=n1;c=3;P2=0x0c;}
- if(b==0&&c==3)
- {b=n2;c=0; P2=0x0a;}
- xianshi();//十字路口显示
- }
- xianshi2();//控制台显示
- }
- }
- void time0 () interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- aa++;
- if(aa==20)//检测1S钟
- { aa=0;
- --d;//数码管显示减一
- --b;
- }
- }
- void jianpan() //键盘检查函数
- { if(kai==0)//检测开始键按下
- {delay(5);
- if(kai==0)
- flag++;
- if(flag>2)//设置开始键2种状态
- flag=0;
- while(!kai)//键盘松手检测
- xianshi();//显示路口数码管
- }
- if(flag==1)//检测开始键按下flag=1,打开定时器
- TR0=1;
- if(flag==2)//检测开始键按下flag=0,重新初始化系统
- {TR0=0;n1=0;n2=0;flag=0;b=0;c=0;d=0;}
- if(jia1==0&&flag==0)//检测通行+键按下且flag=0(交通灯处于设置状态)
- {
- delay(5);
- if(jia1==0&&flag==0)
- {n1++;}//通行时间+1s
- if(n1>99)//检测通信时间最大时长99s
- n1=n2+1;//重置通行时间且大于缓行时间
- while(!jia1)
- xianshi2();
- }
- if(jian1==0&&n1>n2&&flag==0)//检测通行-键按下且通行时间大于缓行时间且flag=0(交通灯处于设置状态)
- {
- delay(5);
- if(jian1==0&&n1>n2&&flag==0)
- {n1--;}//通行时间减一
- if(n1==n2)
- n1=99;
- while(!jian1)
- xianshi2();
- }
- if(jia2==0&&n2<n1&&flag==0) 检测缓行+键按下且缓行时间小于通行时间且flag="0(交通灯处于设置状态)
- {
- delay(5);
- if(jia2==0&&n2<n1&&flag==0)
- {n2++;}//缓行时间+1s
- if(n2==n1)
- n2=1;
- while(!jia2)
- xianshi2();
- }
- if(jian2==0&&flag==0)//检测缓行-键按下且flag=0(交通灯处于设置状态)
- {
- delay(5);
- if(jian2==0&&flag==0)
- {n2--;}//缓行时间-1s
- if(n2==0)
- n2=n1-1;
- while(!jian2)
- xianshi2();
- }
- }
- void xianshi()//路口数码管显示函数
- { shi=b/10;
- ge=b%10;
- qian=d/10;
- bai=d%10;
- k0=0;
- P1=table[shi];
- delay(n);
- k0=1;
- k1=0;
- P1=table[ge];
- delay(n);
- k1=1;
- k2=0;
- P1=table[qian];
- delay(n);
- k2=1;
- k3=0;
- P1=table[bai];
- delay(n);
- k3=1;
- xianshi2();
- }
- void xianshi2() //控制台数码管显示函数
- {
- k4=0;
- P1=table[n1/10];
- delay(n);
- k4=1;
- k5=0;
- P1=table[n1%10];
- delay(n);
- k5=1;
- k6=0;
- P1=table[n2/10];
- delay(n);
- k6=1;
- k7=0;
- P1=table[n2%10];
- delay(n);
- k7=1;
- }
复制代码
四、总电路图及元器件清单 1.总电路图
总电路图 2.元器件清单五、使用说明参考书 在使用此交通灯设计时,开/停按钮控制交通灯的运行,在停的状态下,十字路交通灯全部为禁止通行的状态,此时控制台可以设置通行时间和缓行时间,设置完成后,按下开/停按钮,交通灯开始正常运行。 六、结论 通过为期两周的课程设计,我们应用所学数字电子技术顺利得完成了交通灯控制器的设计。期间,我们查阅了相关书籍,学到了很多知识,并利用它们设计了符合设计要求的信号产生器、计数器、控制电路等。不仅巩固了课堂知识,而且有效的和实际结合在了一起,扩展了所学知识和见识。 在设计过程中遇到不少问题,如相关元件运用条件不熟、接口不对应等问题,感觉到书本知识与实际问题及需要结合的难处,但也激发了我这方面的兴趣,提高了理论结合实际的意识。 七、心得体会 由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,所以在这次课程设计过程中,我了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。有一点是在设计过程中,经常会遇到这样那样的情况,就是心里想老着这样的接法可以行得通,但实际接上电路,总是实现不了,而又一下找不出问题所在,只有在查了书上有关这方面的解释后才有所进展,因此耗费在这上面的时间很多。总体感觉是:通过这次课程设计,加强了我们动手、思考和解决问题的能力。 八、参考文献 丁元杰 《单片微机原理及应用》 ;第三版;机械工业出版社出版社 谭浩强 《C程序设计》 ;第三版; 清华大学出版社
|