《嵌入式技术基础课程设计报告修改版.docx》由会员分享,可在线阅读,更多相关《嵌入式技术基础课程设计报告修改版.docx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式技术基础课程设计报告设计题目:人车分行交通指挥灯的控制学 号:140230110140230120140230130姓 名:李宇豪王尚峰张云龙指导教师: 张扬 信息与电气工程学院二零一六年十二月人车分行交通信号指挥灯的控制近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但是仅仅掌握单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,不断完善调试,才能设计出功能完好的产品。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊,那么靠什么来实现这井然秩序呢?靠的就是交通信号
2、灯的自动指挥系统,所以有条不紊的智能交通灯的应用和开发也显得尤为重要,交通信号灯控制方式很多。本系统采用单片机设计交通灯控制器,以AT89S52单片机为核心部件,应用C51语言编程,实现交通灯的完美工作。1. 设计任务结合威高百货大楼路口实际情况,基于AT89S52单片机设计一个人车分行交通信号灯的控制系统。该系统应满足的功能要求为: (1) 六车道方向直行红灯、左转红灯,四车道方向红灯,车不通行、行人通行;六车道方向直行红灯、左转绿灯,四车道方向红灯,六车道方向左转通行、其余均不通行;六车道方向左转绿灯24s,绿灯关闭转黄灯,黄灯3s,黄灯关闭后,六车道方向左转红灯、直行绿灯,四车道方向红灯
3、,六车道方向直行通行、其余均不通行;六车道方向直行绿灯42s,绿灯关闭转黄灯,黄灯3s,黄灯关闭后,六车道方向左转红灯、直行红灯,四车道方向绿灯,四车道方向直行或左转通行、其余均不通行;四车道方向绿灯29s,绿灯关闭转黄灯,黄灯3s,黄灯关闭后,六车道方向直行红灯、左转红灯,四车道方向红灯,车不通行、行人通行。(2) 行人红灯106s,绿灯21s,黄灯3s,总计一循环130s。(3) 行人允许过马路蜂鸣器每隔一秒鸣叫,禁止过马路时蜂鸣器不发出声音。主要硬件设备:AT89S52单片机、数码管显示电路、LED显示电路、 蜂鸣器电路。2. 整体方案设计人车分行交通信号指挥控制灯以AT89S52单片机
4、作为整个系统的控制核心,应用其强大的接口功能,构成整个人车分行交通灯控制的硬件系统。硬件系统主要由复位电路设定,显示电路,时钟电路,红绿灯电路构成。各模块的主要功能如下:(1) 时钟电路的功能是为单片机提供时钟信号。(2) 复位电路的功能是使单片机处于某种确定的初始状态。(3) 倒计时数码管显示电路的功能是显示六车道、四车道交通指示灯亮的时间;人行灯电路显示行人通行,停止。(4) 红绿灯LED电路的功能是指示车辆通行,红灯停,绿灯行,黄灯为绿灯。 (5) 蜂鸣器电路的功能是提醒行人通行。路口红绿灯如图2-1所示。图2-1 百货大楼路口红绿灯示意图系统的整体设计方案设计图如图2-2所示。图2-2
5、 系统的整体方案设计图3. 系统硬件电路设计3.1 时钟电路AT89S52单片机各功能部件的运行都以时钟控制为基准,有条不紊、一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。单片机时钟信号产生有两种方式:一是内部时钟电路,二是外部时钟电路,本设计使用内部时钟电路,在单片机的XTAL1和XTAL2引脚接石英晶体,作为单片机内部振荡电路的负载,构成中自激振荡器,可在单片机内部产生时钟脉冲信号,C1和C2可以稳定振荡频率,并使快速起振。本电路选用晶振12MHz,C1=C2=30pF。晶体的频率越高,系统的时间频率越高,单片机的运行速度也就越快。接口电路
6、如图3-1所示。图3-1 时钟电路与单片机的接口电路3.2 复位电路复位是单片机的初始化操作,只需给AT89S52的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可使AT89S52复位。AT89S52的复位是由外部的复位电路实现的。复位电路通常采用上电自动复位和按钮复位两种方式。本设计采用的是按钮复位电路。按钮复位电路设计如下图所示,按钮没有按下时,RST为高电平;当按钮按下并释放后,RST从低电平变为高电平,电路复位。接口电路如图3-2所示。 图3-2 时钟电路与单片机的接口电路3.3 倒计时数码管显示电路倒计时显示电路采用LED数码管显示,由于本题要显示六位,采用了共
7、阳数码管动态显示。本次设计采用LED动态显示方式。LED数码管工作于动态显示方式时,各位的共阳极接高电平;每位的段码线分别与一个8位的I/O口锁存器输出相连。如果送往各个LED数码管所显示字符的段码一经确定,则相应I/O口锁存器锁存的段码输出将维持不变,直到送入另一个字符的段码为止。本电路还额外加了一段单独的共阳极数码管,用来代表行人灯,“S”时代表红灯,“P”代表绿灯。电路图如下图所示。其与单片机的接口电路如图3-3所示。 图3-3 倒计时数码管显示电路与单片机的接口电路3.4 红绿灯LED电路本次设计需要控制十八个灯的红绿黄状态。其中由于十字路口对向红绿灯状态相同,因此只需控制9个灯的状态
8、即可。再将六车道的直行黄灯与左转黄灯合并(两者不同时亮),故改到8个led灯,8个灯阳极全部接高电平。如下图所示,阴极接P1口。电路连接如图3-4所示。图3-4 红绿灯电路连接图3.5蜂鸣器电路蜂鸣器电路实现的是此次课设的附加功能。当行人灯为绿色,也就是说第5个数码管显示“P”时,蜂鸣器每间隔一秒鸣叫一次;当行人灯为红色时,蜂鸣器不发出声音。以此来提醒行人过马路的时间。电路连接如图3-5所示。图3-5 蜂鸣器电路连接图4. 系统程序设计4.1 主程序流程图程序首先定义四车道方向红灯为red_1,绿灯为green_1,黄灯为yellow_1;六车道方向左转红灯为red_left,直行红灯为red
9、_2,左转绿灯为green_left,直行绿灯为green_2,左转、直行共用黄灯为yellow_2。second_1代表四车道倒计时,second_2代表六车道倒计时。定时器定时10ms后进入中断,100次中断后second_1、second_2减1s,并在显示电路显示出。系统主程序流程图如图4-1所示。 图4-1 主程序流程图4.2显示子程序流程图显示子程序采用LED数码管显示,由于本题要显示六位,采用了共阳数码管动态显示。本次设计采用LED动态显示方式。LED数码管工作于动态显示方式时,各位的共阳极接高电平;每位的段码线分别与一个8位的I/O口锁存器输出相连。如果送往各个LED数码管所显
10、示字符的段码一经确定,则相应I/O口锁存器锁存的段码输出将维持不变,直到送入另一个字符的段码为止。本电路还额外加了一段单独的共阳极数码管,用来代表行人灯,“S”时代表红灯,“P”代表绿灯。其中P3口控制段码,P2口控制位码,基本流程图如图4-2所示。图4-2 显示子程序流程图4.3定时器中断服务子程序流程图首先以行人灯从红灯转为绿灯作为时间节点,此时red_1亮、second_1=98,red_left、red_2亮、second_2=53;当second_2=27时,red_left灭、green_left亮,其余不变;当second_2=3时,green_left灭、yellow_2亮,其
11、余不变;当second_2=0时,yellow_2灭、red_left亮、green_2亮,second_2=42,其余不变;当second_2=0时,green_2灭、yellow_2亮,second_2=3,其余不变;当second_2=0时,second_1也为0,red_1灭、green_1亮,yellow_2灭、red_2亮,second_2=85、second_1=29,其余不变;当second_1=0时,green_1灭、yellow_1亮,second_1=3,其余不变;当second_1=0时,yellow_1灭、red_1亮,second_1=98,此时second_2=5
12、3,进入下一个循环。此外,当所有红灯(red_1、red_left、red_2)亮时,行人灯为绿灯,可通行,第五个数码管显示“P”,代表“Pass”可通行;否则,显示“S”代表“Stop”禁止通行。中断服务子程序流程图如图4-3所示。图4-3 中断服务子程序流程图5. 系统调试5.1 Proteus软件仿真调试(1) 调试过程 启动计算机,打开Proteus仿真软件,进入仿真环境。将写好的程序存入单片机中,点击运行。即可观察程序运行情况。各端口红色代表高电平,蓝色代表低电平,灰色代表无状态。可以通过数码管和红绿灯的状态观察仿真是否正确。也可以通过单片机端口的高低电平状态判断运行情况。可以通过暂
13、停键暂停程序,通过结束键随时结束程序。(2) 调试时遇到的问题及解决方法 一开始没有加入数码管消隐程序,导致输出的数码是一大串乱码,后来加入数码管消隐程序后便正常显示计数了。Proteus软件仿真图如图5-1所示。图5-1 Proteus软件仿真图5.2 硬件调试(1) 调试过程 安装好仿真器,连接好电路,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。将写好的.C文件通过菊阳软件下载到单片机中。运行程序,观察测试结果,包括各路口红绿灯显示及数码管显示。(2) 调试时遇到的问题及解决方法 实验箱数码管与软件仿真所用数码管有所不同,片选端加装
14、了非门,片选信号与所编程序刚好相反。更改程序后正常显示。另外,一开始使用的是P0口输出数码管段码,但一直不能输出正常的数字,突然意识到P0口输出需要上拉电阻,因硬件连线上会复杂,故最后改为P3口输出数码管段码。做完基本功能以后,开始研究安装蜂鸣器,想过用P0口控制,但是P0口程序一运行便是00H;P1、P3口被完全占用,也不适合做蜂鸣控制;P2口做蜂鸣控制时会干扰数码管的位选;又想从硬件着手使用与门,当三个红灯亮时蜂鸣器响,但是找不到与门。最后,决定使用P3.7位,因为蜂鸣器鸣叫时1s一次,数码管dp位有亮的迹象但不明显。硬件仿真图如图5-2、图5-3所示。 图5-2 硬件仿真基础图 图5-3
15、加蜂鸣器后的硬件连线图6. 程序清单#include bit red_1,green_1,yellow_1;bit red_left,red_2,green_left,green_2,yellow_2;code unsigned char tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x8c;unsigned char Dis_Shiwei_1;unsigned char Dis_Gewei_1;unsigned char Dis_Shiwei_2;unsigned char Dis_Gewei_2;unsigned char D
16、is_xingren;sbit FM=P37;void delay(unsigned int cnt)while(-cnt);main()TMOD|=0X01; /定时器T0赋初值并允许中断TH0=0xd8; TL0=0xf0; IE=0x82; TR0=1;/开定时器 P1=0xb3; /11001101 red_1=1; red_2=1; red_left=1; while(1) P3=0xff;P2=0xff; P3=Dis_Shiwei_1;P2=0xdF; /11011111delay(300);P3=0xff;P2=0xff;P3=Dis_Gewei_1;P2=0xeF; /111
17、01111delay(300);P3=0xff;P2=0xff;P3=Dis_Shiwei_2;P2=0xf7; /11110111delay(300);P3=0xff;P2=0xff;P3=Dis_Gewei_2;P2=0xfB; /11111011delay(300);P3=0xff;P2=0xff; P3=Dis_xingren;P2=0xfD; /11111101delay(300); /*P3=0xff;P2=0xff; P3=Dis_fengming;P2=0xfe; /11111110delay(300); */ void tim(void) interrupt 1 using
18、1static unsigned char second_1=98,second_2=53,second_3=10,count;TH0=0xd8;TL0=0xf0;count+; if(count=100) count=0;second_1-;second_2-; if(red_1 & red_left & red_2 & second_229) FM=0;else if(red_1 & red_left & red_2 & second_2=29) FM=1;red_1=1;red_2=1;red_left=0;green_left=1;P1=0x73;/11001110second_3=5
19、;else if(red_1 & green_left & red_2 & second_2=3) /FM=1;red_1=1;yellow_2=1;red_2=1;green_left=0;P1=0xe3;/11000111second_3=5;else if(red_1 & yellow_2 & red_2 & second_2=0) /FM=1;yellow_2=0;red_2=0;green_2=1;red_left=1;red_1=1;second_2=42;P1=0x9b; /11011001second_3=5;else if(red_1 & red_left & green_2
20、 & second_2=0) /FM=1;yellow_2=1;green_2=0;P1=0xab; /11010101second_2=3;second_3=5;else if(yellow_2 & red_left & red_1 & second_2=0) /FM=1;red_1=0;green_1=1;yellow_2=0;red_2=1;P1=0xb5; /10101101second_1=29;second_2=85;second_3=5;else if(green_1 & red_left & red_2 & second_1=0) /FM=1;yellow_1=1;green_
21、1=0;P1=0xb6; /01101101second_1=3;second_3=5;else if(yellow_1 & red_left & red_2 & second_1=0) yellow_1=0; red_1=1; P1=0xb3; /11001101 second_1=98; second_2=53; second_3=10; FM=0; Dis_Shiwei_1=tabsecond_1/10; Dis_Gewei_1=tabsecond_1%10; Dis_Shiwei_2=tabsecond_2/10; Dis_Gewei_2=tabsecond_2%10; Dis_xin
22、gren=tabsecond_3;7.小结本次单片机课程设计,学到了很多的东西。不仅巩固了以前所学过的知识,例如一开始使用的是P0口输出数码管段码,但一直不能输出正常的数字,突然意识到P0口输出需要上拉电阻,因硬件连线上会复杂,故最后改为P3口输出数码管段码,而且还学到了很多在书本上所没有学到过的知识,例如硬件调试和软件仿真是不同的,软件仿真是需要对数码管消隐的,否则会出现乱码,而硬件仿真不用消隐的情况下仍可以正常显示。在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。例如硬件电路中有些端口存在非门,不能单纯
23、得想给某一端口输入多少就是多少。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。过这次课程设计我发现单片机原理应用行很强,只有老师的讲解不行,只有自己动手去做才会发现自己确实有太多的不足,许多的原理,程序看似简单,真正去做才知道知识并没有自己想象的那样扎实。从而懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。此外,尤其值得一提的是团队合作是很重要的,在团队的合作下,能更好的解决问题,将每个人的长处发展到最大,在大家的合作之中共同完成,这个也是团队课设的很重要的目的。在设计完成之际再次衷心感谢老师的指导!