基于单片机的交通灯设计方案.docx

上传人:b****1 文档编号:23262958 上传时间:2023-05-15 格式:DOCX 页数:27 大小:369.63KB
下载 相关 举报
基于单片机的交通灯设计方案.docx_第1页
第1页 / 共27页
基于单片机的交通灯设计方案.docx_第2页
第2页 / 共27页
基于单片机的交通灯设计方案.docx_第3页
第3页 / 共27页
基于单片机的交通灯设计方案.docx_第4页
第4页 / 共27页
基于单片机的交通灯设计方案.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

基于单片机的交通灯设计方案.docx

《基于单片机的交通灯设计方案.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯设计方案.docx(27页珍藏版)》请在冰豆网上搜索。

基于单片机的交通灯设计方案.docx

基于单片机的交通灯设计方案

 

1概述

1.1交通灯设计方案选择与论证:

交通灯控制系统,可由多种电路来构成,我们这里提供三种方案供选择:

方案一:

由普通的数字电路集成芯片组成

这种方案的特点是:

硬件设计思路简单,但用元器件多,电路比较复杂,焊接调试容易出错,而且不利于智能控制,调时电路复杂。

方案二:

用VHDL语言编程控制

这种方案的特点是:

硬件设计简单,电路结构清晰,电路比较复杂,VHDL语言编程控制硬件,可方便的进行仿真,调试。

方案三:

单片机控制

采用单片机控制,可提高电路的可靠性与稳定性,硬件电路比较简单,主要用软件来控制,控制方式灵活多样,能满足不同情况的控制,可利用中断等方式通过程序来方便的实现调时。

综合以上三种方案的特点,结合我们自身的知识结构,我们采用方案三,选择常用的51系列单片机构成。

1.2设计要求及目的:

1.2.1基本要求:

(1)采用AT89C51单片机控制交通信号灯;

(2)以南北方向的交通灯为例,结合实际情况,控制红、黄、绿交通灯的亮和灭;

(3)红、黄、绿交通灯的亮和灭的时间可调节。

1.2.2提高要求:

(1)采用LED数码管显示红或绿交通信号灯亮的剩余时间;

(2)可由拨盘开关强制设置为东西红,南北绿//东西绿,南北红//东西南北都为红;

(3)控制东西方向和南北方向的红、黄、绿交通灯的亮和灭;

(4)控制系统的原理图和接线图采用PROTEL等专用绘图软件绘制。

1.2.3设计目的:

在该设计中通过学生自主地设计和调试某一简单实际系统,综合应用单片机原理、微机原理、微机接口技术等课程方面的知识,熟练掌握单片机仿真系统的使用方法,达到提高综合应用相关知识的能力,掌握单片机系统设计全部设计过程的目的。

1.3交通灯控制系统的简单说明:

此系统核心元件为单片机AT89C51,对其编写相关程序来控制交通信号灯和数码管的时间显示,并采用外部中断来控制紧急情况。

系统共采用6个发光二极管来模拟各路交通信号灯,4个LED七段数码管以倒计时的方式显示各个方向上允许通行或禁止通行的信号灯剩余的时间。

停35S,准备5S,之后通行30S,

在东西和南北两个方向上这两种状态不断循环。

源程序采用C语言编写,并通过keil软件进行编译,最后倒入AT89C51单片机中,运行系统。

设计好后通过PROTUES软件仿真,并调试。

 

2系统总体方案及硬件设计

2.1硬件电路各元件介绍:

2.1.1核心芯片AT89C51单片机的说明

(1).主要特性:

·与MCS-51兼容

·4K字节可编程闪烁存储器

·寿命:

1000写/擦循环

·数据保留时间:

10年

·全静态工作:

0Hz-24Hz

·三级程序存储器锁定

·128*8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

(2).管脚说明:

VCC:

供电电压。

GND:

接地。

图1:

AT89C51

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

(3).振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配置为片内振荡器。

石晶振荡和陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

(4).芯片擦除:

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。

在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。

在闲置模式下,CPU停止工作。

但RAM,定时器,计数器,串口和中断系统仍在工作。

在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

2.1.2两位八段式数码管

(1)单位八段式数码管介绍:

LED数码有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,就叫共阳的,相反的,就叫共阴的,那么应用时这个脚就分别的接VCC和GND。

再把多个这样的8字装在一起就成了多位的数码管了。

 LED数码有共阳和共阴两种,把些LED发光二极管的正极接到一块(一般拼成一个8字加一个小数点)而作为一个引脚,就叫共阳的,相反的,就叫共阴的,那么应用时这个脚就分别的接VCC和GND。

再把多个这样的8字装在一起就成了多位的数码管了。

图2:

多位数码管

  找公共共阴和公共共阳首先,我们找个电源(3到5伏)和1个1K(几百的也欧的也行)的电阻, VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的找到一个就够了,,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多

个LED(一般是8个),那它就是共阴的了。

 相反用VCC不动,GND逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阳的了。

(相应的图形如图2,3,4所示)

(2)两位七段式数码管介绍:

两位八段式数码管其实就是将两个一位八段式数码接相应的电路组合在一起。

并引出两控制端1和2,同过其电平的高低来控制两个数码管的高低位工作。

其中两个数码管的八个端子A,B,C,D,E,F,G,DP为公共所用。

(其图形如图5所示)

图3:

共阴极二极管图4:

共阳极二极管

图5:

两位八段式数码管

2.1.3其它元件的说明

交通信号灯:

采用红,黄,绿三色二极管封装在一起组成三色交通信号。

接入实际电路中应注意其极性。

与门74LS11:

为三端输入。

还有电阻九个,按钮三个(紧急情况设置用)。

2.2总电路的设计及过程说明

2.2.1设计基本框架图:

(如图6所示)

图6:

电路框架图

2.2.2总体电路的工作原理:

南北路处于禁止通行的状态,东西路处于允许通行的状态。

南北路亮红灯时,东西路亮绿灯;南北路亮绿灯时,东西路亮红灯。

南北路亮红灯时,东西路亮绿灯;当绿灯时间减完之后,东西路换为黄灯,南北路仍为红灯。

这样东西路与南北路的时间同时减完。

减完之后,东西路换为红灯,南北路换为绿灯,再经过一个绿灯时间,南北路换为黄灯,东西路仍为红灯。

这时东西路与南北路时间相同,同时减完。

减完后,南北路为红灯,东西路为绿灯。

如此循环下去。

利用89c52单片机控制交通灯系统工作。

其中P0口接数据输出口,与外部数码管连接,P2口与数码管的COM口连接,用于选择数据输出的地址,这样就可以实现时间的动态显示,并且节省了端口数。

P1口作为红黄绿灯的控制口,通过上拉电阻将红黄绿灯的正极接高电平,负极接在P1口上,我们可以利用控制单片机的P1口的输出数据控制红黄绿灯的亮灭。

调时可以利用外部中断INT0申请中断。

当INT0为低电平时,单片机的PC指向INT0的中断入口地址,从而转向中断服务程序。

此时我们可以通过判断外部开关量的状态来对红黄绿灯的显示时间进行修改。

同时当INT0为低电平时,东西南北方向的都送红灯亮,实现紧急情况下禁止通行。

然后通过判断INT0的状态来决定中断是否返回,当INT0为低电平时,说明开关又一次按下,这是退出中断服务程序,继续执行主程序。

2.2.3各端口控制作用:

p1口作为红黄绿灯信号的控制口,即p1.0,p1.2,p1.1分别控制南北方向的红黄绿灯信号,p1.4,p1.6,p1.5分别控制东西方向的红黄绿灯信号。

p0口作为驱动电路的输入,p2.0,p2.1,p2.2,p2.3作为数码管控选端1,2的输入。

p3口中的p3.2,p3.3即外部中断0和外部中断1作为紧急情况和调时开关的信号控制。

P3.5,p3.6,p3.7是紧急情况下的信号控制口。

红灯亮35秒,黄灯亮5秒,绿灯亮30秒。

初始状态为东西红灯,南北绿灯。

35S后转状态1东西红灯,南北黄灯。

35S后转状态2东西绿灯通车,南北红灯。

经过30S绿灯和5S黄灯后转状态3东西绿灯灭,亮黄灯,南北仍然红灯。

整个程序在晶振工作、单片机正常运行的情况下做循环。

可由拨盘开关强制设置为东西红,南北绿//东西绿,南北红//东西南北都为红。

夜间模式:

两方向均为黄灯闪烁,不显示秒倒计。

由特殊情形恢复到正常情况后,应当接着切换到特殊情形前的秒倒计和交通灯继续循环。

系当统上电时,实验电路开始工作。

七段数码管开始从红灯和绿灯时间倒计时,计时起始信号由主控电路给出,定时结束信号也输入到主控芯片,由主控芯片启、闭三色信号灯或启动另一计时电路。

在这里正确的程序是核心,应该完成一个时序电路的工作。

其状态表

(1)为:

东西方向

南北方向

红30秒

绿30秒

红5秒

黄5秒

绿30秒

红30秒

黄5秒

红5秒

紧急情况

绿

绿

夜间:

(1)

2.2.4复位和时钟电路:

复位电路:

复位电路如下图7所示。

我们采用上电+按钮复位的方式。

当开关打开时,RST通过电阻接地,当有开关闭合时由于电容的作用使电源VCC通过电阻施加在单片机复位端RST上,实现单片机复位。

电容为47uF,电阻为4.7kR。

图7:

复位电路

图8:

时钟电路

时钟电路:

时钟电路如下图8所示。

我们采用外接时钟源,由两个电容串联之后并联一晶振组成,接入单片机的XTAL1和XTAL2端。

晶振振荡频率为12MHZ,两电容约为20pF,注意电容接地处。

2.3设计思想:

由表

(1),可以看出一个大周期的时间为两个红灯的时间,在程序中设一个计数器,当从0计至两个红灯时间时,为一个周期,对其清零,从新下一个周期。

从图上也可以看出,在一个周期内,有四个特殊时间点,这四个特殊时间点是需要换向的,当计数器里的数和四个特殊点相同时,说明至少有一路信号被减到0,需要重新对数据区送数,而且还要把红绿灯的状态换一下。

正常工作时(既没有键按下时),整个主程序只有显示子程序。

其它全放在中断中做。

用T0作为秒信号发生器,当一秒时,计数器加一,然后比较计数器是否和四个特殊点的时间值相同,不相同各数据区的数减一,相同进行相应处理。

其中,紧急状态用了INT0中断,当INT0为低电平时,程序进入紧急状态。

在处理按键时,因为按键的一次动作不仅包含按下,还包含弹开,所以在处理按键,我不仅考虑按下,还考虑弹开,当可靠按下,一边调显示子程序,一边等待键松开,当可靠松开后,才退出子程序。

这样每按下一次键只会有一次动作,而且就是键被按下不松开,也不会也现,数码管没有显示的现象。

 

3软件设计

3.1交通灯状态的分析:

十字路口交通灯如下图所示,将12个交通灯进行编号

这12个交通灯共有四个状态:

状态1(S1):

东西红灯(4、10)亮,南北绿灯(3、9)亮。

状态2(S2):

南北绿灯(3、9)灭,黄灯(2、8)闪烁,东西仍为红灯(4、10)亮。

状态3(S3):

南北红灯(1、7)亮,东西绿灯(6、12)亮。

状态4(S4):

东西绿灯(6、12)灭,黄灯(5、11)闪烁,南北仍为红灯(1、7)亮。

3.2主程序流程图:

(如图一,图二所示)

主程序流程图(图一)

主程序流程图(图二)

3.3中断程序流程图:

(如图三所示)

中断程序流程图(图三)

 

4Proteus软件仿真

4.1仿真过程:

(1)南北红,东西绿

(2)南北红,东西黄

(3)南北绿,东西红

(4)南北红,东西绿

 

(5)南北红,东西绿

4.2检测与调试:

(1)、硬件调试:

硬件调试是利用开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。

硬件调试可分为静态调试与动态调试两步进行。

①静态调试

静态调试是在用户系统未工作时的一种硬件检测。

第一步:

目测。

检查外部的各种元件或者是电路是否有断点。

第二步:

用万用表测试。

先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。

第三步:

加电检测。

给板加电,检测所有的插座或是器件的电源端是否符合要求的值

第四步:

是联机检查。

因为只有用单片机开发系统才能完成对用户系统的调试。

②动态调试

动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。

动态调试的一般方法是由近及远、由分到合。

由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。

当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。

由分到合的调试既告完成。

由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。

调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。

(2)、软件调试:

软件调试是通过对拥护程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。

程序后,编辑,查看程序是否有逻辑的错误。

 

5课程设计体会

5.1心得体会:

通过这次单片机的课程设计,终于发现脑海里有了工程的思想。

以前单方面的学习了电子硬件知识和软件知识。

有人说只懂硬件,那是一个技术员,只懂软件的,那是程序员。

学习单片机,要软硬兼施,才能真正算是一个工程师。

这次的课程设计使我把单片机的理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论是实践的基础,实践又能检验理论的正确性,让我受益非浅,对我以后参加工作或者继续学习将会产生巨大的帮助和影响。

参考文献

[1]余发山。

单片机原理及应用技术。

中国矿业大学出版社2003

[2]何立民.单片机应用技术大全.北京:

北京航空航天大学出版社,1994

[3]张毅刚.单片机原理及接口技术.哈尔滨:

哈尔滨工业大学出版社,1990

[4]谭浩强.单片机课程设计.北京:

清华大学出版社,1989

 

附1:

源程序代码

#include<_REG52_.H>

//BitPortDeclaration

sbitP20=P2^0;

sbitP21=P2^1;

sbitP22=P2^2;

sbitP23=P2^3;

sbitP32=P3^2;

sbitP35=P3^5;

sbitP36=P3^6;

sbitP37=P3^7;

//--------------------

sbitEWR=P1^0;

sbitEWG=P1^1;

sbitEWY=P1^2;

sbitSNR=P1^4;

sbitSNG=P1^5;

sbitSNY=P1^6;

//GlobalVariables

ucharTIME_EW;//EastWestCountDownRegisterUnit

ucharTIME_SN;//SouthNorthCountDownRegisterUnit

ucharMS_CNT;//50msCount

uintSEC_CNT;//SecondCount

ucharHOUR=12;//HourBuffer

ucharflash;

ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,

0x7F,0x6F};

//DelayFunction

voidDelay(ucharformal_t)

{

uchart;

t=formal_t;

while(t--);

}

//DisplayFunction

voidDisplay(void)

{

ucharh,l;

l=TIME_EW%10;

P2=0xff;

P0=table[l];

P20=0;

h=TIME_EW/10;

Delay(3);

P2=0xff;

P0=table[h];

P21=0;

Delay(3);

//-----------------

l=TIME_SN%10;

P2=0xff;

P0=table[l];

P22=0;

h=TIME_SN/10;

Delay(3);

P2=0xff;

P0=table[h];

P23=0;

Delay(3);

P2=0xff;

}

//T0InterruptFunction

voidTimer0(void)interrupt1using2

{

TH0=(65536-49990)/256;

TL0=(65536-49990)%256;

if(MS_CNT>=10)

flash=1;

elseflash=0;

if(MS_CNT>=20)

{

MS_CNT=0;

SEC_CNT+=1;

TIME_EW-=1;

TIME_SN-=1;

if(SEC_CNT==3600)

HOUR+=1;

if(HOUR==24)

HOUR=0;

}

elseMS_CNT+=1;

}

//INT0InterruptFunction

voidINTSP(void)interrupt0using1

{

EX0=0;

P2=0xff;

Delay(10);

P32=1;

if(~P35)

P1=0x65;//P1.0----RG

elseif(~P36)

P1=0x56;//P1.1----GR

elseif(~P37)

P1=0x66;//P1.0----RR

while(~P32){;}

EX0=1;

}

//EastWest-RED,SouthNorth-GREEN--30S

voidStateRG(void)

{

TIME_EW=35;

TIME_SN=30;

P1=0x00;

while(TIME_SN)

{

Display();

EWR=1;SNG=1;

}

P1=0x00;

}

//EastWest-RED,SouthNorth-YELLOW-5S

voidStateRY(void)

{

TIME_SN=5;

P1=0x00;

while(TIME_SN)

{

Display();

EWR=1;SNY=1;

}

P1=0x00;

}

//EastWest-GREEN,SouthNorth-RED-30S

voidStateGR(void)

{

TIME_EW=30;

TIME_SN=35;

P1=0x00;

while(TIME_EW)

{

Display();

EWG=1;SNR=1;

}

P1=0x00;

}

//EastWest-YELLOW,SouthNorth-RED-5S

voidStateYR(void)

{

TIME_EW=5;

P1=0x00;

while(TIME_EW)

{

Display();

EWR=1;SNG=1;

}

P1=0x00;

}

//SLEEP

voidStateSleep(void)

{

P1=0x00;

if(flash){EWY=1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

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

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