ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:1.59MB ,
资源ID:3437366      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3437366.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机控制的交通灯的课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于51单片机控制的交通灯的课程设计.docx

1、基于51单片机控制的交通灯的课程设计电子产品实训报告基于单片机的交通灯控制 学 院:机电工程学院专 业:应用电子技术班 级:09应电1班摘 要:近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用STC-51系列单片机STC89C51来设计交通灯控制器,实现了能根据实

2、际车流量通过8051芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过8255的PC口输出至双位数码管);车辆闯红灯报警;绿灯时间可检测车流量并可通过双位数码管显示。本系统实用性强、操作简单、扩展功能强。 关键词:单片机 交通灯 电路连接图 Proteus仿真图一 引言当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。左

3、右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。二单片机概述1单片机的历史自1971年美国INTEL公司制造出第一块4位微处理器以来,其发展十分迅猛,到目前为止,大致可分为以下五个阶段1。(1) 4位单片机(19711974)(2) 低档8位单片机(19741978)(3) 高档8位单片机(19781982)(4) 16位单片机(19821990)(5) 新一代单片机(90年代以来)2单片机的应用因单片机具有体

4、积小、重量轻、价格便宜、功耗低、控制功能强及运算速度快等特点,故在国民经济建设、军事及家用电器等领域均得到广泛的应用。按照单片机的特点,单片机可分为单机应用和多机应用。在一个应用系统中,只用一个单片机,这是目前应用最多的方式,主要应用领域有:(1)单机应用:测控系统。用单片机可构成各种工业控制系统、自适应系统、数据采集系统等。例如,温室人工气候控制、水闸自动控制、电镀生产线自动控制、汽轮机电液调节系统、车辆检测系统、机器人轴处理器等2。智能仪表。用单片机改造原有的测量、控制仪表,能迥数字化、智能化、多功能化、综合化、柔性化发展。如温度、压力、流量、浓度等的测量、显示及仪表控制。通过采用单片机软

5、件编程技术,使测量仪表中长期存在的误差修正、线性化处理等难题迎刃而解。机电一体化产品。单片机与传统的机械产品结合,使传统机械产品结构简化,控制智能化。这类产品如:简易数控机床,电脑绣花机,医疗器械等。智能接口。在计算机控制系统(特别是较大型的工业测控系统)中,普遍采用单片机进行接口的控制与管理,因单片机与主机是并行工作,故能大大提高了系统的运行速度。例如:在大型数据采集系统中,用单片机对ADC接口进行控制不仅可提高采集速度,而且还能对数据进行预处理,如数字滤波、线性化处理、误差修正等。智能民用产品。在家用电器、玩具、游戏机、声像设备、电子秤、收银机、办公设备、厨房设备等产品中引入单片机,不仅使

6、产品的功能大大增强,而且获得了良好的使用效果。三 芯片简介1 .STC-51芯片简介STC-51单片机内部结构,8051是STC-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(RAM) 8

7、051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。全双工串行口:8051内置一个全双工串行通

8、信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的STC-51系列单片机采用的是哈

9、佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。STC-51的引脚说明:STC-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:STC-51的引脚说明:STC-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P

10、3口线复用。现在我们对这些引脚的功能加以说明:Pin9:RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。8051的复位方式可以是自动复位,也可以是手动复位,见下图4。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单

11、片机内部RAM的数据不丢失。 Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。如果单片机是EPROM,在编程其间,将用于输入编程脉冲。Pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片

12、机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。在编程时,EA/Vpp脚还需加上21V的编程电压。四.系 统 硬 件设 计.1交通管理的方案论证东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。设东西道比南北道的车流量大,指示灯燃亮的方

13、案如表2。60S5S55S5S东西道红灯亮黄灯亮绿灯亮黄灯亮南北道绿灯亮黄灯亮红灯亮黄灯亮 表2表2说明:(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行。时间为60秒。(2)黄灯闪烁5秒,警示车辆和行人红、绿灯的状态即将切换。 (3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。时间为55秒。 东西方向车流大 通行时间长。(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。(5)此表可根据车流量动态设定红绿灯初始值。2.系统硬件设计STC89C51芯片一个,12M晶振一个,1

14、K排阻2个,10K电阻一个,10uF电解电容一个,22uF电容2个,红黄绿二极管各四个,控制开关7个,数码管2个,电源输入接口一个,数据线一根,导线若干。3 交通灯硬件线路图 4. 焊接电路图5.Proteus仿真图1.程序仿真前2.程序仿真过程中(1)正常运行(2)黄灯亮(3)禁止通行六程序源代码#include #define uchar unsigned char#define uint unsigned intuchar data buf4;uchar data sec_dx=20;/东西数默认uchar data sec_nb=30;/南北默认值uchar data set_time

15、dx=20;uchar data set_timenb=30;int n;uchar data countt0;/定时器0中断次数/定义5组开关sbit k4=P37; /切换方向sbit k1=P35; /时间加sbit k2=P36; /时间减sbit k3=P34; /确认sbit k5=P31; /禁止/ P32 /只允许东西方向通行,中断0/ P33 /只允许南北方向通行,中断1sbit Red_nb=P25; /南北黄灯标志sbit Red_dx=P22; /东西黄灯标志sbit Green_nb=P24; /南北绿灯标志sbit Green_dx=P21; /东西绿灯标志sbit

16、 Buzz=P30; bit Buzzer_Indicate;bit time=0; /灯状态循环标志bit set=1; /调时方向切换键标志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_to

17、2();void key_to3();void display(); /显示子程序void logo(); /开机LOGOvoid 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()

18、; /调用按键扫描程序 display(); /调用显示程序 Buzzer(); /函数的定义部分void key() /按键扫描子程序 if(k1!=1) /时间加按下时 delay(10); /延时消抖 if(k1!=1) while(k1!=1) /当按键未弹起时,一直执行 key_to1(); /调用按键1功能 for(n=0;n40;n+) /调用40次显示,用于延时 display(); if(k2!=1) /当K2按键按下时 delay(10); /延时消抖 if(k2!=1) while(k2!=1) /按键按下未弹起时一直执行 key_to2(); /调用key2功能 for

19、(n=0;n40;n+) /调用40次显示,用于延时 display(); if(k3!=1) /当K3(确认)键按下时 TR0=1; /启动定时器 Buzzer_Indicate=0; sec_nb=set_timenb; /从中断回复,仍显示设置过的数值 sec_dx=set_timedx; /显示设置过的时间 if(set=1) /时间倒时到0时 P2=0X99; /东西红灯,南北绿灯 sec_nb=sec_dx+5; /回到初值 else P2=0xC3; /东西绿灯,南北红灯 sec_dx=sec_nb+5; if(k4!=1) /当K4(切换)键按下 delay(5); /延时消抖

20、 if(k4!=1) while(k4!=1); set=!set; /取反set标志位,以切换调节方向 if(k5!=1) /当K5(禁止)键按下时 delay(5); /延时消抖 if(k5!=1) while(k5!=1) key_to3(); void display() /显示子程序 buf1=sec_dx/10; /第1位 东西秒十位 buf2=sec_dx%10; /第2位 东西秒个位 buf3=sec_nb/10; /第3位 南北秒十位 buf0=sec_nb%10; /第4位 南北秒个位 P1=0xff; / 初始灯为灭的 P0=0x00; P1=0xfe; /片选LED1

21、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=

22、1; /重新启动定时器 countt0+; /软件计数加1 if(countt0=20) / 定时器中断次数=20时(即1秒时) countt0=0; /清零计数器 sec_dx-; /东西时间减1 sec_nb-; /南北时间减1 if(sec_nb=5&time=0) /东西黄灯闪 Green_dx=0; Red_dx=!Red_dx; if(sec_dx=5&time=1) /南北黄灯闪 Green_nb=0; Red_nb=!Red_nb; if(sec_dx=0&sec_nb=5) /当东西倒计时到0时,重置5秒,用于黄灯闪烁时间 sec_dx=5; if(sec_nb=0&sec_

23、dx=5) /当南北倒计时到0时,重置5秒,用于黄灯闪烁时间 sec_nb=5; if(time=0&sec_nb=0) /当黄灯闪烁时间倒计时到0时, P2=0x99; /重置东西南背方向的红绿灯 time=!time; sec_nb=set_timenb; /重赋南北方向的起始值 sec_dx=set_timenb+5; /重赋东西方向的起始值 if(time=1&sec_dx=0) /当黄灯闪烁时间到 P2=0Xc3; /重置东西南北的红绿灯状态 time=!time; sec_dx=set_timedx; /重赋东西方向的起始值 sec_nb=set_timedx+5; /重赋南北方向

24、的起始值 void key_to1() /键盘处理子程序之+ TR0=0; /关定时器 if(set=0) set_timenb+; /南北加1S else set_timedx+; /东西加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; /void key_to2() /键盘处理子程序之- TR0=0; /关定时器 if(set=0) set_timenb-; /南北减1S els

25、e set_timedx-; /东西减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; void key_to3() /键盘处理之紧急车通行 TR0=0; /关定时器 P2=0Xc9; /全部置红灯 sec_dx=00; /四个方向的时间都为00 sec_nb=00; Buzzer_Indicate=1;/外部中断0void int0(void) interrupt 0 using 1

26、/只允许东西通行 TR0=0; /关定时器 P2=0Xc3; /东西方向置绿灯 Buzzer_Indicate=0; sec_dx=00; /四个方向的时间都为00 sec_nb=00; /外部中断1void int1(void) interrupt 2 using 1 /只允许南北通行 TR0=0; /关定时器 P2=0X99; /置南北方向为绿灯 Buzzer_Indicate=0; sec_nb=00; /四个方向的时间都为00 sec_dx=00;void logo()/开机的Logo - - - - for(n=0;n50;n+) P0=0x40; P1=0xfe; delay(1)

27、; P1=0xfd; delay(1); P1=0Xfb; delay(1); P1=0Xf7; delay(1); P1 = 0xff; void Buzzer() if(Buzzer_Indicate=1) Buzz=!Buzz; else Buzz=0;void delay(int ms) /延时子程序 uint j,k; for(j=0;jms;j+) /延时ms for(k=0;k124;k+); /大约1毫秒的延时 七总结此次课程设计历时一个月,在此期间查阅了出课本以外的很多资料,当然了也包括对课本的全面复习,是我对这两年多以来所学的知识有了一个系统的连贯、全面的复习。很多以前不太了解的知识都得到了进一步的理解和认知。通过这次长达一个月的电子产品课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统锻炼的机会。使我在单片机的基本原理、单片机应用系统开发过程,单片机控制过程以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面和Proteus程序仿真都向前迈了一大步,这件为我的成长注入更大的活力,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1