单片机交通灯控制毕业设计.docx

上传人:b****8 文档编号:10950093 上传时间:2023-02-23 格式:DOCX 页数:20 大小:44.83KB
下载 相关 举报
单片机交通灯控制毕业设计.docx_第1页
第1页 / 共20页
单片机交通灯控制毕业设计.docx_第2页
第2页 / 共20页
单片机交通灯控制毕业设计.docx_第3页
第3页 / 共20页
单片机交通灯控制毕业设计.docx_第4页
第4页 / 共20页
单片机交通灯控制毕业设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

单片机交通灯控制毕业设计.docx

《单片机交通灯控制毕业设计.docx》由会员分享,可在线阅读,更多相关《单片机交通灯控制毕业设计.docx(20页珍藏版)》请在冰豆网上搜索。

单片机交通灯控制毕业设计.docx

单片机交通灯控制毕业设计

一、设计课题:

单片机交通灯控制

二、设计目的:

(1)掌握单片机定时,计数器的编程应用。

(2)通过对交通灯控制程序的编写与调试,掌握中断程序的结构

(3)进一步熟练使用开发系统的各种调试方法

三、课题任务的控制要求

东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。

红灯亮禁止通行,绿灯亮允许通行。

黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。

设东西道比南北道的车流量大,指示灯燃亮的方案如表1。

60s

5s

80s

5s

......

东西道

红灯亮

黄灯亮

绿灯亮

黄灯亮

......

南北道

绿灯亮

黄灯亮

红灯亮

黄灯亮

......

[表1

表1说明:

(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车"title="下一页">>>>>>|辆通过,行人禁止通行。

时间为60秒。

(2)黄灯闪烁5秒,警示车辆和行人红、绿灯的状态即将切换。

(3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。

时间为80秒。

东西方向车流大通行时间长。

(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。

(5)此表可根据车流量动态设定红绿灯初始值。

四、总体设计的框图

五、单片机选型

选用设备8031单片机一片选用设备:

8031弹片机一片,8255并行通用接口芯

片一片,74LS07两片,MAX692‘看门狗’一片,共阴极的七段数码管两个双向晶闸管若干,7805三端稳压电源一个,红、黄、绿交通灯各两个,开关键盘、连线若干。

六、单片机交通灯控制硬件设计电路图及各电路模块的说明

(1)MCS-51的引脚说明

MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。

现在我们对这些引脚的功能加以说明:

MCS-51的引脚说明:

MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。

现在我们对这些引脚的功能加以说明:

图如下

Pin9:

RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。

初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。

RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。

然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。

8051的复位方式可以是自动复位,也可以是手动复位,见下图2。

此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。

图2

·Pin30:

ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。

而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。

更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。

如果单片机是EPROM,在编程其间,将用于输入编程脉冲。

·Pin29:

当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。

·Pin31:

EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。

如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。

显然,对内部无程序存储器的8031,EA端必须接地。

在编程时,EA/Vpp脚还需加上21V的编程电压。

(2)8255可编程并行接口芯片简介:

8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。

其内部还有一个控制寄存器,即控制口。

通常A口、B口作为输入输出的数据端口。

C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。

它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。

8255可编程并行接口芯片方式控制字格式说明:

8255有两种控制命令字;一个是方式选择|<<<<<12345678>>>>>|控制字;另一个是C口按位置位/复位控制字。

其中C口按位置位/复位控制字方式使用较为繁难,说明也较冗长,故在此不作叙述,需要时用户可自行查找有关资料。

方式控制字格式说明如表2:

表2

D7

D6

D5

D4

D3

D2

D1

D0

D7:

设定工作方式标志,1有效。

D6、D5:

A口方式选择

00—方式0

01—方式1

1×—方式2

D4:

A口功能(1=输入,0=输出)

D3:

C口高4位功能(1=输入,0=输出)

D2:

B口方式选择(0=方式0,1=方式1)

D1:

B口功能(1=输入,0=输出)

D0:

C口低4位功能(1=输入,0=输出)

8255可编程并行接口芯片工作方式说明:

方式0:

基本输入/输出方式。

适用于三个端口中的任何一个。

每一个端口都可以用作输入或输出。

输出可被锁存,输入不能锁存。

方式1:

选通输入/输出方式。

这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。

方式2:

双向总线方式。

只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号。

(3)74LS373简介(见下图)

74LS373是一种带三态门的8D锁存器,其管脚示意图如下示:

其中:

1D-8D为8个输入端。

1Q-8Q为8个输出端。

LE为数据打入端:

当LE为“1”时,锁存器输出状态同输入状态;当LE由“1”变“0”时,数据打入锁存器

OE为输出允许端:

当OE=0时,三态门打开;

当OE=1时,三态门关闭,输出高阻。

七、单片机交通灯控制毕业设计的程序设计说明

.控制器的软件设计说明

7)1.每秒钟的设定

延时方法可以有两种一中是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。

7)2.计数器硬件延时

定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。

他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。

因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:

TC=M-C

式中,M为计数器摸值,该值和计数器工作方式有关。

在方式0时M为213;在方式1时M的值为216;在方式2和3为28

(2).计算公式

T=(M-TC)T计数

或TC=M-T/T计数

T计数是单片机时钟周期TCLK的12倍;TC为定时初值

如单片机的主脉冲频率为TCLK12MHZ ,经过12分频13

方式0    TMAX=2*1微秒=8.192毫秒16

方式1    TMAX=2*1微秒=65.536毫秒

显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题.

(3)1秒的方法   我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。

在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。

为零表示1秒已到可以返回到输出时间显示程序。

(4)相应程序代码

(1)主程序  

定时器需定时50毫秒,故T0工作于方式1。

 初值:

16

TC=M-T/T计数 =2-50ms/1us=15536=3CBOH

ORG1000H

START:

MOV TMOD, #01H   ;令TO为定时器方式1

MOV TH0,   #3CH   ;装入定时器初值

MOV TL0,   #BOH   ;

MOV IE,   &nbs|<<<<<12345678>>>>>|p; #82H     ;开T0中断

SEBT  TRO       ;启动T0计数器

MOV  RO,   #14H     ;软件计数器赋初值

LOOP:

 SJMP  $         ;等待中断

(2)中断服务子程序

ORG   000BH

AJMP   BRT0

ORG 00BH

BRTO:

DJNZR0,NEXT

AJMP  TIME ;    跳转到时间及信号灯显示子程序 

DJNZ:

MOV RO,#14H ;恢复R0值

MOV TH0,   #3CH   ;重装入定时器初值

MOV TL0,   #BOH   ;

MOV IE,     #82H 

RET1

END

7)3软件延时

MCS-51的工作频率为2-12MHZ,我们选用的8031单片机的工作频率为6MHZ。

机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/6M)=2us。

我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。

具体的延时程序分析:

DELAY:

MOVR4,#08H   延时1秒子程序

DE2:

LCALLDELAY1 

DJNZR4,DE2

RETDELAY1:

MOVR6,#0    延时125ms子程序

MOVR5,#0

DE1:

  DJNZR5,$

DJNZR6,DE1

RET 

MOVRN,#DATA  字节数数为2     机器周期数为1

所以此指令的执行时间为2ms 

DELAY1为一个双重循坏循环次数为256*256=65536所以延时时间=65536*2=1310约为125us 

DELAY R4设置的初值为8 主延时程序循环8次,所以125us*8=1秒

由于单片机的运行速度很快其他的指令执行时间可以忽略不计。

(1)8051并行口的扩展

8051虽然有4个8位I/O端口,但真正能提供借用的只有P1口,因为P2和P0口通于传送外部传送地址和数据,P3口也有它的第二功能。

因此,8031通常需要扩展。

由于我们用外部输入设定红绿灯倒计时初值、数码管的输出显示、红绿黄信号灯的显示都要一个I/O端口,显然8031的端口是不够,需要扩展。

扩展的方法有两种:

(1)借用外部RAM地址来扩展I/O端口;

(2)采用I/O接口来扩充。

我们用8255并行接口信片来扩展I/O端口。

(2)显示原理:

当定时器定时为1秒,时程序跳转到时间显示及信号灯显示子程序,它将依次

信号灯时间,同时一直显示信号灯的颜色,这时在返回定时子程序定时一秒,在显灯的下一个时间,这样依次把所有的灯色的时间显示完后在重新给时间计数器赋初重新进入循环。

   

(3)8255PA口输出信号接信号灯:

由于发光二极管为共阳极接法,输出端口为低电平,对应的二极管发光,所以

用置位方法点亮红,绿,黄发光二极管。

(4)8255输出信号与数码管的连接:

LED灯的显示原理:

通过同名管脚上所加电平的高低来控制发光二极管是否点量示不同的字形如SP,g,f,e,d,c,b,a管角上加上7FH所以 SP上为0伏,不亮为TTL高电平,全亮则显示为8

采用共阴级连接:

其中

PC0\PB0-a,

PC1\PB1-b, 

PC2\PB2-c,

PC3\PB3-d,

PC4\PB4-e,   

PC5\PB5-f,

PC6\PB6-g

PC7\PB7-SP接地

显示数值 

Dopgfedcba

驱动代码(16进制)

0

00111111

3FH

1

00000110

06H

2

01011011

5BH

3

01001111

4FH

4

01100110

66H

5

01101100

6DH

6

01111100

7DH

7

00000111

07H

8

01111111

7FH

|<<<<<12345678>>>>>|

表3 驱动代码表

7)4.58255与8051的连接:

用8051的P0口的p0.7连接8255的片选信号cs 我们用8031的地址采用方式,当p0.7=0  时片选有效,其他无效, p0.1p0.1用于选择8255端口

P0.7p0.6p0.5p0.4p0.3p0.2P0.1P0.0

A7   A6  A5  A4  A3  A2  A1 A0

1    X   X    X   X   X   0  0 00H为8255的PA口

1    X   X    X   X   X   0  1 01H为8255的PB口

1    X   X    X   X   X   1  0 02H为8255的PC口

1    X   X    X   X   X   1  1 03H为8255的控制口

由于8051是分时对8255和储存器进行访问所以8051的P0口不会发生冲突

八、程序设计

1 程序流程图

2 程序源代码

ORG0000H        ;主程序的入口地址

LJMPMAIN        ;跳转到主程序的开始处

ORG0003H        ;外部中断0的中断程序入口地址          

ORG000BH        ;定时器0的中断程序入口地址      LJMPT0_INT                  ;跳转到中断服务程序处

ORG0013H        ;外部中断1的中断程序入口地址      

MAIN:

MOVSP,#50H

MOVIE,#8EH      ;CPU开中断,允许T0中断,T1中断和外部中断1中断

MOVTMOD,#51H    ;设置T1为计数方式,T0为定时方式,且都工作于模式1

MOVTH1,#00H     ;T1计数器清零

MOVTL1,#00H

SETBTR1         ;启动T1计时器

SETBEX1         ;允许INT1中断

SETBIT1         ;选择边沿触发方式

MOVDPTR,#0003H

MOVA,#80H       ;给8255赋初值,8255工作于方式0

MOVX@DPTR,A

AGAIN:

JBP3.1,N0      ;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1跳转

MOVA,P1     

JBP1.7,RED     ;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯间    

MOVR0,#00H     ;R0清零

MOVR0,A        ;存入东西方向绿灯初始时间

MOVR3,A

LCALLDISP1

LCALLDELAY

AJMPAGAIN

RED:

&nb|<<<<<12345678>>>>>|sp; MOVA,P1

ANLA,#7FH     ;P1.7置0

MOVR7,#00H    ;R7清零

MOVR7,A       ;存入东西方向红灯初始时间

MOVR3,A

LCALLDISP1

LCALLDELAY

AJMPAGAIN

;-------------------------------------------

N0:

   SETBTR0         ;启动T0计时器

MOV76H,R7       ;红灯时间存入76H

N00:

  MOVA,76H       ;东西方向禁止,南北方向通行

MOVR3,A       

MOVDPTR,#0000H ;置8255A口,东西方向红灯亮,南北方向绿灯亮      MOVA,#0DDH

MOVX@DPTR,A

N01:

  JBP2.0,B0

N02:

  SETBP3.0

CJNER3,#00H,N01 ;比较R3中的值是否为0,不为0转到当前指令处

;------黄灯闪烁5秒程序------

N1:

   SETBP3.0

MOVR3,#05H

MOVDPTR,#0000H ;置8255A口,东西,南北方向黄灯亮

MOVA,#0D4H

MOVX@DPTR,A

N11:

  MOVR4,#00H

N12:

  CJNER4,#7DH,$   ;黄灯持续亮0.5秒

N13:

  MOVDPTR,#0000H  ;置8255A口,南北方向黄灯灭

MOVA,#0DDH

MOVX@DPTR,A

N14:

  MOVR4,#00H

CJNER4,#7DH,$   ;黄灯持续灭0.5秒

CJNER3,#00H,N1  ;闪烁时间达5秒则退出

;-----------------------------------------------

N2:

   MOVR7,#00H

MOVA,R0  ;东西通行,南北禁止

MOVR3,A

MOVDPTR,#0000H;置8255A口,东西方向绿灯亮,南北方向红灯亮

MOVA,#0EBH

MOVX@DPTR,A

N21:

  JBP2.0,T03

N22:

  CJNER3,#00H,N21

;------黄灯闪烁5秒程序------

N3:

   MOVR3,#05H

MOVDPTR,#0000H   ;置8255A口,东西,南北方向黄灯亮

MOVA,#0E2H

MOVX@DPTR,A

N31:

  MOVR4,#00H

CJNER4,#7DH,$    ;黄灯持续亮0.5秒

N32:

  MOVDPTR,#0000H ;置8255A口,南北方向黄灯灭

MOVA,#0EBH      MOVX@DPTR,A

N33:

  MOVR4,#00H

CJNER4,#7DH,$    ;黄灯持续灭0.5秒

CJNER3,#00H,N3  ;闪烁时间达5秒则退出

SJMPN00

;------闯红灯报警程序------

B0:

   MOVR2,#03H       ;报警持续时间3秒

B01:

  MOVA,R3

JZN1             ;若倒计时完毕,不再报警

CLRP3.0          ;报警 

CJNER2,#00H,B01  ;判断3秒是否结束

SJMP N02

;------1秒延时子程序-------

N7:

   RETI

T0_INT:

MOVTL0,#9AH      ;给定时器T0送定时10ms的

MOVTH0,#0F1H   

INCR4

INCR5

CJNER5,#0FAH,T01 ;判断延时是否够一秒,不够则

MOVR5,#00H       ;R5清零

DECR3         &|<<<<<12345678>>>>>|nbsp;  ;倒计时初值减一

DECR2            ;报警初值减一

T01:

  ACALLDISP        ;调用显示子程序

RETI              ;中断返回

;------显示子程序------

DISP:

 JNBP2.4,T02

DISP1:

MOVB,#0AH

MOVA,R3           ;R3中值二转十显示转换

DIVAB

MOV79H,A

MOV7AH,B

DIS:

  MOVA,79H          ;显示十位

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#0002H

MOVX@DPTR,A

MOVDPTR,#0001H

MOVA,#0F7H      MOVX@DPTR,A

LCALL DELAY

DS2:

  MOVA,7AH          ;显示个位

MOVDPTR,#TAB 

MOVCA,@A+DPTR

MOVDPTR,#0002H

MOVX@DPTR,A

MOVDPTR,#0001H

MOVA,#0FBH

MOVX@DPTR,A

RET

;------东西方向车流量检测程序------

T03:

  MOVA,R3

SUBBA,#00H         ;若绿灯倒计时完毕,不再检测车

JZ  N3              

JBP2.0,T03

INCR7                       

CJNER7,#64H,E1   

MOVR7,#00H         ;中断到100次则清零

E1:

   SJMPN22

;------东西方向车流量显示程序------

T02:

  MOVB,#0AH

MOV   A,R7               ;R7中值二转十显示转换

DIVAB

MOV79H,A

MOV7AH,B

DIS3:

 MOVA,79H          ;显示十位

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#0002H

MOVX@DPTR,A

MOVDPTR,#0001H

MOVA,#0F7H

MOVX@DPTR,A

LCALLDELAY

DS4:

  MOVA,7AH          ;显示个位

MOVDPTR,#TAB 

MOVCA,@A+DPTR      MOVDPTR,#0002H

MOVX@DPTR,A

MOVDPTR,#0001H

MOVA,#0FBH

MOVX@DPTR,A

LJMPN7

;------延时4MS子程序----------

DELAY:

MOV  R1,#0AH

LOOP:

 MOV R6,#64H

NOP

LOOP1:

DJNZR6,LOOP1

DJ

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

当前位置:首页 > 高等教育 > 经济学

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

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