收藏 分销(赏)

51单片机交通灯系统设计.doc

上传人:二*** 文档编号:4749998 上传时间:2024-10-11 格式:DOC 页数:16 大小:267KB 下载积分:5 金币
下载 相关 举报
51单片机交通灯系统设计.doc_第1页
第1页 / 共16页
本文档共16页,全文阅读请下载到手机保存,查看更方便
资源描述
- - 计算机控制系统课程设计 题目: 单片机交通信号灯控制系统设计 学 院: 信息科学与工程学院 专 业: 自动化 学 号: 学生: 指导教师: 日 期: - word.zl - - 单片机交通信号灯控制系统设计 一、设计目的与意义 1、通过用51单片机控制交通灯的课程设计,熟练51单片机的编程方法。 2、通过本课程的设计,进一步掌握I/O接口设计和常用程序设计技术,掌握单片机控制系统的设计的一般方法,能根据系统设计要求,完成应用系统的硬件和软件设计。 3、通过本课程设计将理论用于实践,提高动手能力。 二、设计容和要求 交通灯控制系统控制东西、南北两个方向信号灯,每个方向设置两组红绿灯,红灯制止通行,绿灯允许通行。每个方向的通行时间各由两位LED数码显示,通行时间可设置,绿灯向红灯转换前绿灯闪烁三次共3秒钟,红灯向绿灯过渡时不闪烁。 系统上电时的初始状态为东西、南北两个方向均为红灯,持续2秒后为东西方向绿灯,南北方向红灯,之后以定时方式控制两个方向的汽车轮流通行。 三、常见交通信号灯系统概述: 交通信号灯是交通信号中的重要组成局部,是道路交通的根本语言。交通信号灯由红灯〔表示制止通行〕、绿灯〔表示允许通行〕、黄灯〔表示警示〕组成。 绿灯信号是准许通行信号。按?交通平安法实施条例?规定:绿灯亮时,准许车辆、行人通行,但转弯的车辆不准阻碍被放行的直行车辆和行人通行。   红灯信号是绝对制止通行信号。红灯亮时,制止车辆通行。右转弯车辆在不阻碍被放行的车辆和行人通行的情况下,可以通行。红灯信号是带有强制意义的禁行信号,遇此信号时,被禁行车辆须停在停顿线以外,被禁行的行人须在人行道边等候放行;机动车等候放行时,不准熄火,不准开车门,各种车辆驾驶员不准离开车辆;自行车左转弯不准推车从路口外边绕行,直行不准用右转弯方法绕行。 黄灯亮时,已越过停顿线的车辆,可以继续通行。黄灯信号的含义介于绿灯信号和红灯信号之间,既有不准通行的一面,又有准许通行的一面。黄灯亮时,警告驾驶人和行人通行时间已经完毕,马上就要转换为红灯,应将车停在停顿线后面,行人也不要进入人行横道。但车辆如因距离过近不便停车而越过停顿线时,可以继续通行。已在人行横道的行人要视来车情况,或尽快通过,或原地不动,或退回原处。 本设计为了简便起见,将黄灯取消,使用红灯的闪烁代替。 四、系统硬件设计方案 主控芯片选择intel的8051单片机,此单片机有32个I/O口,2个定时器,5个中断源,4 KB 的片上ROM,128 Bytes 的片上 RAM。 使用4对红绿LED灯作为4个方向的信号灯,每个LED接一个1k的限流电阻,共阳极接法。通过单片机的P0口控制LED的状态。 使用4对8位的数码管作为时间显示设备,每个方向一对,可以显示0~99s的倒计时时间。使用单片机的P1口作为数码管的段码输出端,P2口作为数码管的位选端。整个数码管使用动态显示技术驱动。 为了实现时间的可控,使用拨码开关作为外部输入设备,调节时间,将拨码开关接到单片机的P3口,由于是8位,故可以选择2^8=256个状态,等待时间的围为0~99s,故使用拨码开关的调节围足够。 整个系统的电源使用线性电源LM7805,其驱动电流可达1A,为了减少电源输出的高频信号,可在其输出端并联几个电容。 五、原理图设计 1、 硬件设计框图: 2、 最小系统原理图: 51单片机的最小系统包括时钟电路和复位电路,如图: 3、 电源电路: 在LM7805的输出端并联10uf、0.1uf两个电容,大电容用来储能,小电容用来滤波。 4、 交通灯电路图: 每个方向有红灯、绿灯两个信号灯,信号灯为共阳极接法,每个灯接一个限流电阻,如图: 5、 倒计时显示电路: 每个方向有两个8位数码管,显示0~99s的计时时间,使能端使用单片机的单个IO口控制,如图: 6、 拨码开关电路: 将拨码开关的一端接到P3口,另一端接地,假设拨码开关翻开,会将单片机的IO口拉低,单片时机检测到这个状态。 7、 整个系统的电路图: 六、软件设计方案 1、 为了使倒计时更为准确,使用定时器作为倒计时的基准时间,系统使用12M的晶振,定时器设置为5ms中断一次。 2、 设置开机初始化状态,信号灯全部为红灯,等待2秒后,东西方向绿灯,南北方向红灯,然后开场正常工作。 3、 每个方向的通行时间各由两位LED数码显示,通行时间可设置,绿灯向红灯转换前绿灯闪烁三次共3秒钟,红灯向绿灯过渡时不闪烁。 4、 软件设计流程图: 七、程序及注释 #include<reg51.h>//头文件 #define TUBE_DATA P0//端口定义 段码输出端 #define LED P1//LED控制端 #define TUBE_ENABLE P2//位码输出端 #define BOMA P3//拨码输入端 #define ALL_OFF 0xff//运算定义 #define RED1_ON 0xfe #define RED2_ON 0xfd #define RED3_ON 0xfb #define RED4_ON 0xf7 #define GREEN1_ON 0xef #define GREEN2_ON 0xdf #define GREEN3_ON 0xbf #define GREEN4_ON 0x7f char set_time=0; //设定时间 char run_time=0;//实际运行倒计时时间 bit LED_choose=0; //信号灯选择 0为南北向 1为东西向 int time_base=0;//时间基准计数器 code unsigned char LED_num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码 //--------------------------------------- void sys_init(void) //系统初始化函数 { TUBE_DATA=0xff; //端口初始化 TUBE_ENABLE=0xff; LED=0xff; BOMA=0xff; TMOD=0x11; //定时器初始化 TH0=0x3c; //定时5ms TL0=0xb0; TR0=1; //定时器运行 ET0=1; EA=1; //开中断 LED=ALL_OFF & RED1_ON & RED2_ON & RED3_ON & RED4_ON; //信号灯初始状态 while(time_base<400); //等待2s,time_base一个单位代表5ms time_base=0; LED_choose=1; //信号灯选择 LED=ALL_OFF & RED1_ON & RED3_ON & GREEN2_ON & GREEN4_ON; //东西向亮绿灯,南北向亮红灯 } //--------------------------------------- void boma_scan(void) //拨码设定时间 { set_time=BOMA; //拨码设定时间 if(set_time>99) set_time=99; //设定上下限 else if(set_time<10) set_time=10; } //--------------------------------------- void tube_display(void) //显示时间 { static bit choose=0; //个位十位选择标志位 if(choose) //显示个位 { TUBE_DATA=LED_num[run_time%10]; TUBE_ENABLE=0xaa; } else//显示十位 DATA=LED_num[run_time/10]; { TUBE_DATA=LED_num[run_time/10]; TUBE_ENABLE=0x55; } choose=~choose; } //--------------------------------------- void main(void) //主函数 { sys_init();//系统初始化 while(1) { boma_scan();//拨码扫描 } } //--------------------------------------- void PIT0(void) interrupt 1 //定时器0,信号灯控制、刷新时间 { TH0=0x3c; //赋初值 TL0=0xb0; time_base++; if(time_base%200==0) //1s { run_time--;//倒计时减1s if(time_base==1000) time_base=0; } if(LED_choose) //信号灯显示 LED=ALL_OFF & RED1_ON & RED3_ON & GREEN2_ON & GREEN4_ON; else LED=ALL_OFF & RED2_ON & RED4_ON & GREEN1_ON & GREEN3_ON; break; if(run_time<3) //红灯闪烁 { switch(run_time) { case 2: if(LED_choose) LED=ALL_OFF & GREEN2_ON & GREEN4_ON; else LED=ALL_OFF & GREEN1_ON & GREEN3_ON; break; case 1: if(LED_choose) LED=ALL_OFF & RED1_ON & RED3_ON & GREEN2_ON & GREEN4_ON; else LED=ALL_OFF & RED2_ON & RED4_ON & GREEN1_ON & GREEN3_ON; break; case 0: if(LED_choose) LED=ALL_OFF & GREEN2_ON & GREEN4_ON; else LED=ALL_OFF & GREEN1_ON & GREEN3_ON; run_time=set_time; //倒计时完毕,重新赋值 LED_choose=~LED_choose; //信号灯切换 break; } } tube_display();//刷新时间显示 } 八、设计心得 通过本次课程设计,让我加深了对课本知识的理解和掌握,也让我对单片机与外部器件的接口技术有了更深的了解,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。对于各种相关软件如DXP、KEIL的使用更加熟练,C语言的编程风格也有所改善。但是,这些也都仅仅是一个开端,在以后的日子里,我将争取继续努力学好这一实用的技能,为以后的工作打下坚实根底! - word.zl
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服