单片机控制的交通灯控制系统设计_第1页
单片机控制的交通灯控制系统设计_第2页
单片机控制的交通灯控制系统设计_第3页
单片机控制的交通灯控制系统设计_第4页
单片机控制的交通灯控制系统设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

单片机应用技术 课程设计报告 题目: 单片机控制的交通灯 姓 名: 欧阳圣棋 院 系: 电力学院 专 业: 电子科学与技术 学 号: 201110722 指导教师: 朱安福 完成时间: 2014 年 7 月 3 日 设计题目 基于 AT89C51 单片机的交通灯 设计要求 1.用单片机制作一个交通灯,控制十字路口的车辆运行状况。 2.在此基础上,加入“看门狗”功能。 设计过程 1.选择实验课题,通过对不同课题的比较,选择了最贴近生活的交通 灯设计。 2.选择所需要的元器件(AT89C51,交通灯)等,并构思原理图。 3.绘制原理图,将所选好的元器件放置在原理图中,并设置参数,接 着把元器件对应管脚连接起来,并合理布局,使页面变得简单易读。 4.设计程序流程图,按照所要求的功能设计出满足所有需要的流程图, 5.按照流程图编写程序,并加入“看门狗”功能,在 KEIL 中编译, 并生成“hex”文件 6.将生成的文件加入 ISIS 软件中,进行仿真,成功运行。 7.总结实验经验。完成设计 指导 教师 评语成绩 评定 课程 设计 等级 - 3 - 目 录 1 概述 1.1 课题名称5 1.2 设计功能5 1.3 设计意义5 2 系统总体方案及硬件设计 2.1 芯片的选择与简单介绍5 2.2 系统方框图7 2.3 工作原理7 2.4 电路原理图8 2.5 单片机最小系统9 2.6 时间显示电路 10 2.7 交通灯电路 10 3 软件设计 3.1 整体系统分析 11 3.2 相关参数计算 11 3.3 程序流程图 12 4 Proteus 软件仿真 4.1 系统仿真电路图 13 4.2 仿真结果分析 15 5 课程设计体会 参考文献 附 1:源程序代码 附 2:系统原理图 摘要 本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统除基 本交通灯功能外,还具有倒计时、时间设置、紧急情况处理以及根据具体情况 手动控制等功能。 本设计是单片机控制的交通灯控制系统。单片机即单片微型计算机。其集 定时、计数和多种接口与一体的微控制器。它体积小、成本低、功能强,广泛 的应用于只能产业和工业自动化上。而 51 系列单片机是各类单片机中最为典型 和富有代表性的一种。 本设计的意义在于通过具体控制系统的设计,掌握微机控制系统设计的一 般方法和处理问题的思路,特别是一些常用的技术手段。使大家能在实践教学 环节中,积累设计经验,开拓思维空间,全面提高个人的综合能力。 红绿灯控制是智能交通系统的一个重要部分,本文给出了一个用单片机控 制的简易交通红绿灯自动控制系统。该系统适用于十字路口,并对放行和禁行 时间进行倒计时显示(秒) 。 在车辆通行繁忙的十字交叉路口设置的交通灯控制系统,其特点是:道路 较窄而车流量较大,主干道,支干道的车辆通行时间不等, ,同时设有道路应急 控制。具体的情况是:在正常的情况下,东西支干道通行时间为 20 秒,南北主 干道通行时间为 30 秒,每个方向在绿灯转为红灯时,要求黄灯先亮 5 秒钟,才 能变换运行车道。并且能够在人工监控状态下,如果一道有车而另一道无车, 交通灯控制系统能立即让有车道放行。而且有紧急车辆要求通过时,系统要能 禁止普通车辆通行。 关键字:单片机 红绿灯 AT89C51 Proteus 仿真 - 5 - 1 概述 1.1 课题名称 单片机控制的交通灯控制系统设计 1.2 设计功能 1)南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的 车辆交替运行,主干道每次通行时间都设为 25 秒、支干道每次通行间为 20 秒, 时间可设置修改; 2)在绿灯转为红灯时,要求黄灯先亮 5 秒钟,才能变换运行车道; 3)黄灯亮时,要求每秒闪亮一次; 4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时 间都用显示器进行显示(采用计时的方法); 5)一道有车而另一道无车,交通灯控制系统能立即让有车道放行; 6)紧急情况时可以随时调成红灯或绿灯。 1.3 设计意义 国内的交通灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指 示灯。加上一个倒计时的显示计时器来控制行车。对于一般情况下的安全行车, 车辆分流尚能发挥作用,但根据实际行车过程中出现的情况,还存在以下缺点: 1两车道的车辆轮流放行时间相同且固定, 在十字路口,经常一个车道 为主干道,车辆较多,放行时间应该长些;另一车道为副干道,车辆较少,放 行时间应该短些。 2没有考虑紧急车通过时,两车道应采取的措施,臂如,消防车执行紧急 任务通过时,两车道的车都应停止,让紧急车通过。 基于传统交通灯控制系统设计过于死板,红绿灯交替是间过于程式化的缺 点,智能交通灯控制系统的设计就更显示出了它的研究意义,它能根据道路交 通拥护,交叉路口经常出现拥堵的情况。利用单片机控制技术提出了软件和 硬件设计方案,能够实现道路的最大通行效率。 2 系统总体方案及硬件设计 2.1 芯片的选择与简单介绍 主控芯片采用 AT89C51 单片机(其管脚图如图 所示)。单片机,亦称单片微型计算机。它是把中央处 理器(CPU)、数据存储器(RAM)、程序存储器 (ROM)、输入/输出端口(I/0)等主要计算机功能部 件都集成在一块集成电路芯片上的微型计算机。计算机 的产生加快了人类改造世界的步伐,但是它毕竟体积大。 于是,微型计算机(即单片机)在这种情况下诞生了。 纵观生活的各个领域,从导弹的导航装置,到飞机上各 种仪表的控制,从计算机的网络通讯与数据传输,到工 业自动化过程的实时控制和数据处理,以及我们生活中 广泛使用的各种智能 IC 卡、电子 宠物等,这些都离不 开单片机。 单片机以体积小、功能全、性价比等诸多优点而独具特色,在工业控制、 尖端武器、通信设备、家用电器等嵌入式应用领域中独占鳌头。如果说 C 语言 程序设计课程设计的基础课,那么单片机以其系统硬件构架完整、价格低廉、 学生能动手等特点,成为工科学生硬件设计基础课。 MCS-51 单片机是指由美国 INTEL 公司(大名鼎鼎的 INTEL)生产的一系列 单片机的总称,这一系列单片机包括了好些品种,如 8031,8051,8751,8032,8052,8752 等,其中 8051 是最早最典型的产品, 该系列其它单片机都是在 8051 的基础上进行功能的增、减、改变而来的,所以 人们习惯于用 8051 来称呼 MCS-51 系列单片机。 8051 单片机包含中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、 定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总 线和控制总线等三大总线,现在我们分别加以说明: 1.中央处理器(CPU) 中央处理器(CPU)是整个单片机的核心部件,是 8 位数据宽度的处理器,能 处理 8 位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统协调的 工作,完成运算和控制输入输出功能等操作。 (图) - 7 - 2.数据存储器(RAM) 8051 内部有 128 个 8 位用户数据存储单元和 128 个专用寄存器单元,它们 是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不 能用于存放用户数据,所以,用户能使用的 RAM 只有 128 个,可存放读写的数 据,运算的中间结果或用户定义的字型表。 3.程序存储器(内部 ROM): 程序存储器用于存放程序和固定不变的常数等。通常采用只读存储器,且 其又多种类型,在 89 系列单片机中全部采用闪存。AT89C51 内部配置了 4KB 闪 存。 3.1.定时/计数器(ROM): 定时/计数器用于实现定时和计数功能。AT89C51 共有 2 个 16 位定时/计数 器。 3.2.并行输入输出(I/O)口: 8051 共有 4 组 8 位 I/O 口(P0、 P1、P2 或 P3),用于对外部数据的传输。 每个口都由 1 个锁存器和一个驱动器组成。它们主要用于实现与外部设备中数 据的并行输入与输出,有些 I/O 口还有其他功能。 4.全双工串行口: A89C51 内置一个全双工串行通信口,用于与其它设备间的串行数据传送, 该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 5.时钟电路: 时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。 6.中断系统: 中断系统的作用主要是对外部或内部的终端请求进行管理与处理。AT89C51 共有 5 个中断源,其中又 2 个外部中断源和 3 个内部中断源。 7.定时/计数器 8051 有两个 16 位的可编程定时/计数器,以实现定时或计数产生中断用于 控制程序转向。 2.2 系统方框图 电 源 交通灯 AT89C51 交通灯时间 显示部分 时钟按键 复 位 电 路 2.3 工作原理 由软件设置交通灯的初始时间,南北方向通行25秒,东西方向通行20秒, 数码管采用动态显示,P0口送字形码,P2口送字位选通信号,通过单片机的P1 口控制各种信号灯的燃亮与熄灭。采用中断方式实现按键的功能。 东西方向 EW G Y R 南北方向 NS G Y R 系统控制 电路 - 9 - 2.4 电路原理图 2.6 时间显示电路 因为系统要求南北和东西方向的信号灯时间不一样,所以就利用单片机的 P0 口送出数据的段码,位选信号用 P2 口送出,用动态扫描的方法显示东西、 南北的倒计时间(如图-4 所示)。 2.7 交通灯电路 (图2) (图3) 本设计利用单片机的 p1 口来驱动和控制各种信号灯的燃亮和燃亮时间,在 实际中,交通灯的信号灯需要用高电压控制,在这里我们只是模拟一下它的控 制信号,所以我们就只用单片机的信号引脚直接来控制交通灯。 3 软件设计 3.1 整体系统分析 总体流程图(实现各种状态间的转换): (图-5) 东西绿灯 南北红灯 东西黄灯闪 南北红灯亮 东西红灯 南北绿灯 东西红灯亮 南北黄灯闪 - 11 - 3.3 程序流程图 4 Proteus 软件仿真 4.1 系统仿真电路图 1.交通灯控制系统正常运行时仿真图(见图-7)。 (图-6) 2.交通灯南北方向绿灯向红灯转变,黄灯闪烁时仿真图(见图-8)。 4.2 仿真结果分析 仿真实验实现南北方向车道和东西方向车道两条交叉道路的车辆交替运行, (图- 7) 图 -8 (图-8) - 13 - 南北方向(主干道)每次通行时间设为 30 秒、东西方向通行时间设为 20 秒, 时间可以在程序中修改。同时能够实现红灯、黄灯、绿灯状态转换,红绿灯转 换时间为 5 秒,转黄期间黄灯亮。可以准确显示每个状态所剩余的时间,按下 禁行普通车辆键,东西南北方向都亮红灯;按下南北放行键,南北绿灯亮,东 西红灯亮;按下东西放行键,东西绿灯亮,南北红灯亮;任何时候按下返回键, 此系统都将回到初始状态,当紧急状况出现时,按下紧急开关,可实现主干道 和支干道全部禁止通行,允许紧急车辆安全通行,实现了课程设计的要求。 5 课程设计体会 本系统就是充分利用了 AT89C51 芯片的 I/O 引角。系统统采用 MSC-51 系列 单片机为中心器件来设计交通灯控制器,实现了能根据实际车流量通过单片机 芯片的 P1 口控制红、黄、绿灯的燃亮与熄灭;P0 口外接数码管来显示各个信 号灯的时间。系统设计简便、实用性强、操作简单、程序设计简便。系统不足 之处不能控制车的左、右转、以及自动根据车流改变红绿灯时间等。这是由于 本身地理位子以及车流量情况所定,如果有需要可以设计扩充原系统来实现。 通过这次课程设计,我得到了一次用所学知识与技能分析和解决问题的可 贵的锻炼机会,使我深刻邻会了单片机的基本原理和单片机应用系统开发的过 程。在常用编程设计思路技巧的掌握方面都向前迈了一大步,为日后成为合格 的应用型人才打下良好的基础。 通过本次的毕业设计,受益匪浅,充分意识到自己所学的东西还是非常有 限的,不过通过设计,还是学到了一些书本上没有学到的东西,为自己以后的 工作奠定了一定的基础。在撰写本文的过程中,深切地体会到当今科技技术飞 速的发展,特别是单片机的发展使得许多技术难题迎刃而解,作者坚信,随着 科学技术的不断发展,单片机技术的应用将是前途无量。 由于本设计涉及到的知识面比较广,再加上本人在相关领域知识的缺乏,所 以本设计的性能指标还是有待改善的,然而,模拟仿真证明了本设计的设计思 想和设计方法是现实可行的。 参考文献 1余发山 王福忠 单片机原理及应用技术 M.徐州:中国矿业大学出版社 2008. 2吴黎明 单片机原理及应用技术M.北京:科学出版社 2003. 3刘乐善 微型计算机接口技术及应用M.北京: 华中科技大学出版社 2004. 4 李伯成.基于MCS-51单片机的嵌入式系统的设计M.北京:电子工业出版社, 2004. 5 吴黎明 , 王桂棠, 洪添胜, 等. 单片机原理及应用技术 M . 北京: 科 学出版社,2005. 6 韩克, 柳秀山, 等. 电子技能与E D A 技术M.广州:暨南大学出版社, 2004. - 15 - 附1:源程序代码 #include #define uchar unsigned char #define uint unsigned int uchar data buf4; uchar data sec_dx=20; /东西数默认 uchar data sec_nb=30; /南北默认值 uchar data set_timedx=20; /设置东西方向的时间 uchar data set_timenb=30; /设置南北方向的时间 int n,led1=0; uchar data countt0;/定时器0中断次数 sfr WDT_CONTR=0xA6; /定义5组开关 sbit k4=P37; /切换方向 sbit k1=P35; /时间加 sbit k2=P36; /时间减 sbit k3=P34; /确认 sbit k5=P31; /禁止 sbit k6=P15; /夜间模式 / P32 /只允许东西方向通行,中断0 / P33 /只允许南北方向通行,中断1 sbit Red_nb=P26; /南北红灯标志 sbit Yellow_nb=P25; /南北黄灯标志 sbit Green_nb=P24; /南北绿灯标志 sbit Red_dx=P23; /东西红灯标志 sbit Yellow_dx=P22; /东西黄灯标志 sbit Green_dx=P21; /东西绿灯标志 sbit Buzz=P30; bit Buzzer_Indicate; bit set=0; /调时方向切换键标志 =1时,南北,=0时,东西 bit dx_nb=0; /东西南北控制位 bit shanruo=0; uchar code table11= /共阴极字型码 0x3f, /-0 0x06, /-1 0x5b, /-2 0x4f, /-3 0x66, /-4 0x6d, /-5 0x7d, /-6 0x07, /-7 0x7f, /-8 0x6f, /-9 0x00 /-NULL ; /函数的声明部分 void delay(int ms); /延时子程序 void key(); /按键扫描子程序 void key_to1(); /键处理子程序 void key_to2(); void key_to3(); void display(); /显示子程序 void logo(); /开机LOGO void Buzzer(); /主程序 void main() TMOD=0X11; /定时器设置 TH0=0X3C; /定时器0置初值 0.05S TL0=0XB0; EA=1; /开总中断 ET0=1; /定时器0中断开启 TR0=1; /启动定时0 EX0=1; /开外部中断0 EX1=1; /开外部中断1 logo(); P2=0Xc3; / 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5; /默认南北通行时间比东西多5秒 while(1) key(); /调用按键扫描程序 display(); /调用显示程序 Buzzer(); /函数的定义部分 void key(void) /按键扫描子程序 if(k1!=1) /当K1(时间加)按下时 display(); /调用显示,用于延时消抖 - 17 - if(k1!=1) TR0=0; /关定时器 shanruo=0; P2=0x00; if(set=0) set_timedx+; /南北加1S else set_timenb+; /东西加1S if(set_timenb=100) set_timenb=1; if(set_timedx=100) set_timedx=1; /加到100置1 sec_nb=set_timenb ; /设置的数值赋给东西南北 sec_dx=set_timedx; / do display(); while(k1!=1); if(k2!=1) /当K2(时间减)按键按下时 display(); /调用显示,用于延时消抖 if(k2!=1) TR0=0; /关定时器 shanruo=0; P2=0x00; if(set=0) set_timedx-; /南北减1S else set_timenb-; /东西减1S if(set_timenb=0) set_timenb=99; if(set_timedx=0 ) set_timedx=99; /减到1重置99 sec_nb=set_timenb ; /设置的数值赋给东西南北 sec_dx=set_timedx; do display(); /调用显示,用于延时 while(k2!=1); if(k3!=1) /当K3(确认)键按下时 display(); /调用显示,用于延时消抖 if(k3!=1) TR0=1; /启动定时器 Buzzer_Indicate=0; sec_nb=set_timenb; /从中断回复,仍显示设置过 的数值 sec_dx=set_timedx; /显示设置过的时间 if(set=0) /时间倒时到0时 P2=0X00; /东西绿灯,南北红灯 Green_dx=1; Red_nb=1; sec_nb=sec_dx+5; /回到初值 else P2=0x00; /南北绿灯,东西红灯 Green_nb=1; Red_dx=1; sec_dx=sec_nb+5; if(k4!=1) /当K4(切换)键按下 display(); /调用显示,用于延时消抖 if(k4!=1) TR0=0; set=!set; /取反set标志位,以切换调节方向 dx_nb=set; do display(); - 19 - while(k4!=1); if(k5!=1) /当K5(禁止)键按下时 display(); /调用显示,用于延时消抖 if(k5!=1) TR0=0; /关定时器 P2=0x00; Red_dx=1; Red_nb=1; /全部置红灯 sec_dx=00; /四个方向的时间都为00 sec_nb=00; Buzzer_Indicate=1; do display(); while(k5!=1); if(k6!=1) /当K6(夜间模式)按下 display(); /调用显示,用于延时消抖 if(k6!=1) TR0=0; /关定时器 P2=0x00; Yellow_dx=1; Yellow_nb=1; /全部置黄灯 sec_dx=00; /四个方向的时间都为00 sec_nb=00; Buzzer_Indicate=1; do display(); while(k6!=1); void display(void) /显示子程序 buf1=sec_nb/10; /第1位 东西秒十位 buf2=sec_nb%10; /第2位 东西秒个位 buf3=sec_dx/10; /第3位 南北秒十位 buf0=sec_dx%10; /第4位 南北秒个位 P1=0xff; / 初始灯为灭的 P0=0x00; P1=0xfe; /片选LED1 P0=tablebuf1; /送东西时间十位的数码管编码 delay(1); /延时 P1=0xff; /关显示 P0=0x00; P1=0xfd; /片选LED2 P0=tablebuf2; delay(1); P1=0xff; P0=0x00; P1=0Xfb; /片选LED3 P0=tablebuf3; delay(1); P1=0xff; P0=0x00; P1=0Xf7; P0=tablebuf0; /片选LED4 delay(1); void time0(void) interrupt 1 using 1 /定时中断子程序 TH0=0X3C; /重赋初值 TL0=0XB0; TR0=1; /重新启动定时器 countt0+; /软件计数加1 if(countt0=10) if(sec_nb=5) Yellow_dx=0; Buzz=0; if(sec_dx=5) Yellow_nb=0; Buzz=0; if(countt0=20) / 定时器中断次数=20时(即1 秒时) countt0=0; /清零计数器 sec_dx-; /东西时间减1 sec_nb-; /南北时间减1 if(sec_nb=5) Yellow_dx=1; Buzz=1; if(sec_dx=5) Yellow_nb=1; Buzz=1; if(sec_dx=0 shanruo=1; if(sec_nb=0 shanruo=1; if(dx_nb=0 P2=0x00; /重置东西南背方向的红

温馨提示

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

评论

0/150

提交评论