首页 单片机交通灯控制器设计

单片机交通灯控制器设计

举报
开通vip

单片机交通灯控制器设计 重庆科技学院 课程设计报告 院(系):电气与信息工程学院 专业班级: 电自专09级2班 学生姓名: 贾瑞楠 学 号: 2009630943 设计地点(单位)___ I506 _ _____ __ 设计题目:________《单片机交通灯控制器设计》 完成日期: 2011年 9月 12日 指导教师评语: ...

单片机交通灯控制器设计
重庆科技学院 课程设计报告 院(系):电气与信息 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 学院 专业班级: 电自专09级2班 学生姓名: 贾瑞楠 学 号: 2009630943 设计地点(单位)___ I506 _ _____ __ 设计题目:________《单片机交通灯控制器设计》 完成日期: 2011年 9月 12日 指导教师评语: _________________________________________________________________________________________________________________________________________________________________________________________________________ __________ _ 成绩(五级记分制):______ __________ 指导教师(签字):________ ________ 摘要 随着生活水平的提高,汽车越来越普及。因此,红绿灯安装在各个道口上,也渐渐成为了疏导交通车辆最常见和最有效的手段。信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用80C51单片机为中心器件来设计交通灯控制器,实现了实时显示当前通行剩余时间;按东西道红灯和南北道绿灯亮22秒后东西道、南北道黄灯闪烁3秒,再东西道绿灯和南北道红灯亮27秒,之后黄灯闪烁3秒的规律控制东西和南北方向的交通灯;能手动设置通行方向3种功能。4位数码管显示剩余通行时间,2位显示东西方向通行剩余时间,2位显示南北方向通行剩余时间。本系统实用性强、操作简单、扩展功能强。 关键词:单片机 交通灯 动态扫描 自动控制 手动设置 1交通灯控制器的功能规划 本次设计的交通灯控制器有2种工作模式,分别是正常状态下的自动控制模式和紧急情况下的手动控制模式。 自动控制模式是在单片机的控制下实现东西道与南北道红绿灯循环点亮,倒计时剩3秒时黄灯闪烁警示,并且实时显示当前通行剩余时间。 手动控制模式是在有按键按下的时候相应的通道置于绿灯,另外一个通道置于红灯,直到有返回键按下之后自动返回到自动控制模式。 2 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 设计 2.1 硬件方案设计 本次课程设计所使用的单片机为STC89C51,STC89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用STCMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的STC89C51提供了高性价比的解决方案。 STC89C51主要功能特性: 1、兼容MCS—51指令系统,4k可反复擦写(>1000次)Flash ROM 2、32个双向I/O口,可编程UARL通道 3、两个16位可编程定时/计数器,全静态操作0-24MHz 4、1个串行中断,128x8bit内部RAM 5、两个外部中断源,共6个中断源 6、可直接驱动LED,3级加密位 7、低功耗空闲和掉电模式 晶振采用11.0592MHZ提供定时脉冲。复位电路:上电复位,按键复位。 本次设计的交通灯控制器涉及的硬件主要有按键、数码管、单片机、LED、、串口,等其它附加设备,其连接关系图如下(由于硬件的原因,黄灯的连接省略): P0.0-P0.7 数码管 P1.0 P1.1 P1.2 P1.3 图1 交通灯硬件连接图 2.2 软件方案设计 2.2.1程序实现的基本功能 1) 实时显示当前通行剩余时间(4位数码管显示,2位显示东西方向通行剩余时间,2位显示南北方向通行剩余时间); 2) 按以下规律控制东西和南北方向的交通灯 22S 3S 27S 3S …… 东西道(EW) 红灯亮 黄灯亮 绿灯亮 黄灯亮 …… 南北道(SN) 绿灯亮 黄灯亮 红灯亮 黄灯亮 …… 3) 能手动设置通行方向。 2.2.2程序结构 本程序主要分为2大块,主程序和定时器0的中断程序。主程序包括了定时器0和串口的初始化程序。定时器0的中断程序包括了LED灯的控制,剩余时间的计算以及按键的扫描,计时和刷新显示程序,在定时器0的中断程序中每50ms调用一次。 图2 控制程序的结构图 3硬件电路设计与分析 3.1 CPU时钟与复位电路 图3单片机复位电路 单片机在正常工作时,RST应保持低电平。当RST为高电平并且保持10ms以上时间就能实现复位。当手动复位按下K1时,电容瞬间充电,使RST为高电平,而放电要经历一定时间,这段时间大于10ms,从而实现复位操作。 3.2 数码管显示电路 数码管主要是用于数字的显示。数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同。四位数码管循环电路是由1K的电阻、IN4148二极管和数码管组成,电源+5V通过560的电阻直接给数码管的7个段位供电,P0.0-P0.7对应了接数码管的A,B,C,D,E,F,G和小数点位,P1.0,P1.1,P1.2,P1.3接位选码。 0 3FH 5 6DH 1 06H 6 7DH 2 5BH 7 07H 3 4FH 8 7FH 4 66H 9 6FH 图4 8段LED外形及引脚 本设计采用四位共阴极的七段数码管,显示当前通行剩余时间。采用动态显示方式,P0口送段选码,P1口的低四位送位选码。当相应的端口变成高电平时,驱动相应的PNPS8550三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这时只要P0口送出数字的显示代码,数码管就能正常显示需要的数字。 图5 数码管电路图 3.3 按键接口电路 因为本设计能手动设置成东西道(EW)通行或南北道(SN)通行以及返回自动控制模式,故共需要3个按键。主要是注意按键的去抖动处理,软件法去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否保持着,如是则作为按键处理,否则,视为抖动,不予理睬。去抖动的延时时间一般参考资料多描述为20ms左右,在实际应用中应大于20ms。否则,会导致按一次多处理,影响程序正常执行。 图6 按键接口电 3.4 LED指示电路 因为所采用的板子共有8个六个共阳极的发光二极管,而2个方向只需要6个发光二极管来分别代表红绿灯。故选择左边三个从左到右依次为东西道(EW)的红、黄、绿灯,右边三个从右到左依次为南北道(SN)的绿、黄、红灯。中间2个废弃不用。 图7 LED指示灯电路 4软件设计 4.1 控制程序的结构及模块划分 本程序主要分为2块,主程序和定时器0的中断程序。 4.2 主程序 主程序是主体部分。包括了定时器0和串口的初始化程序。 图8 主程序 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图 对变量、数组、端口的初始化有段码的赋值,数码管显示初值以及各标志位的初始化。函数的初始化包括了定时器T0的触发方式,中断的打开。定时器的计数初值为TH0=0xee,TL0=0x00, 即定时器定时5ms产生一次中断,200次中断即为1秒,方便计算。 4.3定时器0中断服务程序 定时器0中断服务程序主要是数码管刷新显示程序,用来倒计时显示。进入中断后,程序又把初值设置成系统初始化时所设定的值,数码管位选标志位自加1,当标志位等于4时,位选标志位又重新赋值0。数码管采用动态扫描原理,采用switch()语句编写,在每次扫描以前要先关闭所有的位选,然后再送由剩余时间计算函数所计算出的剩余时间值的对应的段码,最后再开由位选标志位所对应的位码,如此便实现了数码管的动态扫描。因为动态扫描程序是写在定时器内的,而定时器定时为5 ms,即每5 ms扫描一位数码管,4位数码管,故20ms循环一次。 图9 定时器0流程图 4.4 LED显示程序 采用的为共阴极LED,本设计将LED的显示程序写在了定时器0中断程序内,采用是的switch()语句,用operation_type来作标志,程序未涉及到黄灯的闪烁,只设计的先是南北道通60 s,后是东西道通60s,所以在南北道和东西道分别通的时候只需要case语句就可以了,即 case 1: {R_EW = 0;G_EW = 1;R_SN = 1;G_SN = 0; if(++time_count == 12000){ time_count = 0; operation_type = 2;return;} i=1;j=0; }break; case 2: {R_EW = 1;G_EW = 0;R_SN = 0;G_SN = 1; if(++time_count == 12000){ time_count = 0; operation_type = 1;return;} i=0;j=1; }break; 4.5数码管显示程序 在程序开头定义了一个数组: unsigned char Data_Buffer[4]={0,0,0,0}; 前2位分别用来存放南北方向剩余通行时间的十位和个位,后2位分别用来存放东西方向剩余通行时间的十位和个位。 为了便于计算,利用(count-5)的值来计算剩余通行时间,算出十位与个位即可,可写成 Data_Buffer[0]= (count-5)/10; Data_Buffer[1]= (count-5)%10; Data_Buffer[2]= (count-5)/10; Data_Buffer[3]= (count-5)%10; 再由动态扫描程序输出对应的段码,数码管就能实时的显示当前通行剩余时间了。 LED显示程序和数码管显示程序都应该写到while(1)死循环内。 4.6按键扫描及处理程序 手动模式可以设置为南北通和东西通以及返回到自动模式,所以共需3个按键。本设计将南北通(SN)和东西通(EW)2个按键分别接 P2.0和 P2.1,返回按键(BACK)接到了P2.2口,采用扫描法来检测键盘是否按下。 因为按键采用的是扫描法,故需要注意消抖的处理,在此用软件法去抖动即可。软件法去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否保持着,如是则作为按键处理,否则,视为抖动,不予理睬。去抖动的延时时间一般参考资料多描述为20ms左右,在实际应用中应大于20ms。否则,会导致按一次多处理,影响程序正常执行。 5调试与测试 在程序的最初编写中,由于对time_count的值计算混乱,从而导致了LED的点亮与数码管倒计时不一致,经过仔细的验算,调整对time_count的算法, 终于使LED的点亮、黄灯的闪烁能够与倒计时一致了。 在定时器的运用上,由于开始没有对TR0和EA置1,虽然启动了定时器,但是CPU并没有响应中断,导致不能正常计数,从而使程序不能正常运行。在发现问题并对TR0和EA进行置1后,问题便迎刃而解。 动态扫描过程因为是写在定时器内的,所以是每5ms扫描一个数码管,20ms循环1次,因此时间很短暂,由于数码管的余晖和人眼的视觉暂留作用,造成4位同时亮的假象,达到同时显示的效果。在对TR0和EA置1后数码管扫描便正常显示了。 在按键上,EW按键、SN按键和BACK按键采用的是扫描法,之前并没有进行去抖动处理,所以导致对按键的扫描不准确。发现这一错误后,在检测到某一键状态变化后加上一个延时程序,再次检测该按键的状态是否保持着,如是则作为按键处理,否则,视为抖动,不予理睬,即软件法去抖动。在添加了延时程序后按键便能正常的工作了。 6技术小结 本次设计以STC89C51单片机平台采用C语言编写交通灯控制程序,运用到了LED、数码管、按键等基本元件。在主程序的循环扫描中,包含了LED灯循环点亮程序、数码管示值计算程序以及键盘扫描程序等。使用定时器0来定时计数,为数码管的扫描以及总的程序提供时间基础。2个外部中断分别用来接收按键产生的信号,使程序进入相应的模式。 设计主要包括了交通灯各方向通行状态的显示和数码管对当前通行剩余时间的实时显示,以及手动操作南北或东西方向的通行。而在程序设计和编写的过程中也遇到许许多多的问题,例如LED灯与数码管数值显示的不一致,按键因为没消抖而产生的混乱等等。经过不断查找和修改,这些问题也都得到了很好的解决,最终实现了题目要求的功能。 7交通灯控制器使用说明 本交通灯控制器分为自动控制模式和手动控制模式。 按下电源开关后,系统进入自动控制模式,南北方向与东西方向在通行时间结束后自动切换,同时数码管实时显示当前通行剩余时间。东西方向和南北方向交通灯是切换规律控如下表所示,其中的黄灯为闪烁效果。 22S 3S 27S 3S …… 东西道(EW) 红灯亮 黄灯亮 绿灯亮 黄灯亮 …… 南北道(SN) 绿灯亮 黄灯亮 红灯亮 黄灯亮 …… 手动控制模式:上电后,只要按下EW键或是SN键便进入到手动控制模式。EW键:东西方向绿灯亮,南北方向红灯亮,即东西方向通行;SN键:南北方向绿灯亮,东西方向红灯亮,即南北方向通行,无论是按下EW键还是SN键,数码管显示的通行剩余时间均停止。BACK键:按下之后返回到自动控制模式,数码管继续计时。 参考文献 [1] 张毅刚.新编MSC-51单片机应用设计.哈尔滨:哈尔滨工业大学出版社,2003 [2] 李广弟.单片机基础.北京:北京航空航天大学出版社,1992 [3] 何立民.MCS—51单片机应用系统设计.北京:北京航空航天大学出版社,1990 [4] 何立民.单片机应用技术选编.北京:北京航空航天大学出版社,1996 [5] 王毅.单片机器件应用手册.北京:人民邮电出版社,1995 [6] 房小翠.单片机使用系统设计技术.北京:国防工业出版社,1999 [7] 张毅刚.单片机原理及应用.北京:高等教育出版社,2009 附录1 原理图 附录2 源程序 #include #define THC0 0xee #define TLC0 0x00 unsigned char code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char Data_Buffer[4]={0,0,0,0}; static int count=0,a=0,b=0,c=0,d=0,i=0; sbit P10=P1^0; //四个数码管的位码口定义 sbit P11=P1^1; sbit P12=P1^2; sbit P13=P1^3; sbit key=P3^4; static unsigned char wei=0; void delay(int i) { while(i) i--; } void main() { IT0=1; EX0=1; //使能外部中断0 IT1=1; EX1=1; //使能外部中断1 TMOD=0x01; TH0=THC0; TL0=TLC0; TR0=1; ET0=1; EA=1; while(1) { if(count>=100) { count=0; if(d==0) { switch(a) { case 0:P2=0x7e;break; case 44:P2=0xbd;break; case 45:P2=0xff;break; case 46:P2=0xbd;break; case 47:P2=0xff;break; case 48:P2=0xbd;break; case 49:P2=0xff;break; case 50:P2=0xbd;break; case 51:P2=0xff;break; case 52:P2=0xdb;break; case 106:P2=0xbd;break; case 107:P2=0xff;break; case 108:P2=0xbd;break; case 109:P2=0xff;break; case 110:P2=0xbd;break; case 111:P2=0xff;break; case 112:P2=0xbd;break; case 113:P2=0xff;break; default : break; } } c=a/2; if(c>=26) b=56-c; else b=25-c; a++; if(a==114) { a=0; b=0; } if(d==1) { P2=0x7e; a--; } if(d==2) { P2=0xdb; a--; } if( key==0 ) { delay(5); if( key==0) d=0; } Data_Buffer[0]=b/10; Data_Buffer[1]=b%10; Data_Buffer[2]=b/10; Data_Buffer[3]=b%10; } } } void timer0_ISR(void) interrupt 1 { TL0=TLC0; TH0=THC0; count++; wei++; if(wei>=4)wei=0; P1|=0xff; //先关位码 P0=Duan[Data_Buffer[wei]]; //开段码 // if(wei==1) P0=Duan[Data_Buffer[wei]]|0x80; switch(wei) //送位码 { case 0: P10=0;break; case 1: P11=0;break; case 2: P12=0;break; case 3: P13=0;break; } } void int0() interrupt 0 //外部中断0程序入口 { d=1; } void int1() interrupt 2 //外部中断1程序入口 { d=2; } 目 录 11.交通灯控制器的功能规划 12.方案设计 12.1 硬件方案设计 22.2 软件方案设计 33 硬件电路设计与分析 33.1 CPU时钟与复位电路 33.2 数码管显示电路 53.3 按键接口电路 53.4 LED指示电路 64 软件设计 64.1 控制程序的结构及模块划分 64.2 主程序 74.3定时器0中断服务程序 74.4 LED显示程序 84.5数码管显示程序 94.6按键扫描及处理程序 95 调试与测试 106 技术小结 107交通灯控制器使用说明 128 参考文献 13附录1 原理图 14附录2 源程序 P2.0 主程序 定时器0和串口的初始化程序 SN EW BACK LED灯 定时器0的中断程序 LED灯的控制 剩余时间的计算 按键的扫描 计时 刷新显示程序 P2.1 P2.2 共阴极段码 显示字符 共阴极段码 显示字符 g f GND a b c d GND e dp 表1 8段LED段码 开始 变量、数组、端口初始化 函数初始化 定时器T0、(串口)初始化 主循环:while(1)的死循环 中断返回 数码管输出 调用剩余时间计算函数 写入定时器初值(5ms) 按键 P2.3-P2.6 单 片 机
本文档为【单片机交通灯控制器设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_877900
暂无简介~
格式:doc
大小:319KB
软件:Word
页数:22
分类:工学
上传时间:2012-11-28
浏览量:140