C51单片机的交通灯控制系统要点

  • 格式:doc
  • 大小:542.00 KB
  • 文档页数:13

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于C51单片机的交通灯控制系统

1、实验方案论证:

进行十字路口的交通信号灯控制电路设计,画出电路原理图及实验电路图,进行软件编程、以及使用说明文档的建立等一整套工作任务。进行十字路口的交通信号灯控制程序设计,提交一个符合上述功能要求的十字路口的交通信号灯控制系统设计。

2、控制流程分析:

对设计要求进行分析后可得出以下交通工作状态表:

3、硬件设计概要:

根据设计要求,可用6个LED灯分别模拟东西、南北的交通灯。具体接法如下:AT89C51的P1口接LED灯,P1.0、P1.1、P1.2分别接东西方向红、绿、黄交通灯,P1.3、P1.4、P1.5分别接南北方向的红、绿、黄交通灯。P1口和LED 灯之间要接限流保护电阻。两位数码管段选接P2口,位选接P0口低两位,P0口低两位接上拉电阻使其可以输出高电平。紧急情况按钮一端接地,另一端与外中断1引脚相连;恢复正常按钮一端接地,另一端与外中断0引脚相连。

三、原理图设计

1、LED显示部分电路设计:

把单片机AT89C51的P1口作为红黄绿灯显示部分,用6个LED灯分别模拟东西、南北的交通灯。P1.0、P1.1、P1.2各通过一个300Ω的限流保护电阻接东西方向的红、绿、黄LED灯;P1.3、P1.4、P1.5各通过一个300Ω的限流保护电阻接南北方向的红、绿、黄LED灯。LED灯的一端接电源,另一端经电阻接P1口,因此当P1口引脚输出低电平时LED灯发光,即此方案采取低电平驱动方式。具体电路如下:

2、紧急情况处理电路设计:

紧急情况按钮一端接地,另一端与外中断1引脚相连;恢复正常按钮一端接地,另一端与外中断0引脚相连。在程序设计时,我会将其设置为下降沿触发方式。具体电路如下:

3、数字显示电路设计:

选用共阴极两位数码管。两位数码管A~G引脚各通过一个300Ω的限流保护电阻分别接P2.0~P2.6,位选1引脚和2引脚分别接P0.0口低两位,P0口低两位接5kΩ的上拉电阻使其可以输出高电平。

4、其他部分电路:

XTAL1端和XTAL2端之间接一个12M Hz的晶振,再各接一个30pF的普通电容后接地;RST复位端一端经10uF的电解电容接+5V电源,一端经一个10K 的电阻接地。具体电路如下:

4、系统电路总图:

四、程序设计:

1、定时器初值的计算:

由于要求定时时间相当精确,我用定时器T0进行定时。根据公式可知若已

:

知要求的定时时间为t,则定时器的初值为x(其中fosc=12M Hz)

2、程序流程图:

2.1主程序流程

主程序主要是对单片机进行初始化。初始化首先要开放总中断、定时器T0中断以及外部中断0和外部中断1。其次是设置中断优先级,把外中断0设置为高优先级,外中断1设置为低优先级。再次是给定时器T0装顶初值,然后后是启动定时器,是使定时器开始定时。最后是等待中断。

紧急情况中断处理包括两部分,第一部分是出现紧急情况可以手动使东西、南北方向红灯全亮,而且直到紧急状况解除后才能恢复正常通车。这就要求紧急状况解除前不能退出外中断1处理程序,因此要在外中断1处理程序处设置一无限循环。第二部分是紧急状况解除。为了使外中断1处理程序退出无限循环,可用中断嵌套使机器转去执行外中断0处理程序,而外中断0处理程序修改了寄存器R2的值,中断返回后由于寄存器R2的值的改变使外中断1处理程序跳循环。

2.2.1外中断1处理程序(低优先级)

2.2.2外中断0处理程序(高优先级)

Y

Y

3、程序源代码:

ORG 0000H

AJMP START

ORG 0003H ;外中断0入口

AJMP SERV0

ORG 000BH ;外中断1入口

AJMP SERV1

ORG 0013H ;定时器中断入口

AJMP SERV2

ORG 0030H

START:MOV IE,#87H

MOV IP,#01H ;设置中断优先级

MOV TMOD,#01H

MOV TCON,#05H

MOV TH0,#3CH

MOV TL0,#0B0H ;装定时器初值

MOV DPTR,#TAB ;装表首地址

MOV P1,#0F6H

MOV R0,#20

MOV R5,#00H

MOV R6,#00H

SETB TR0 ;启动定时器

LOOP1:MOV P0,#02H ;循环动态显示,由10秒开始倒计时MOV A,R6

MOVC A,@A+DPTR

MOV P2,A

ACALL D10MS

MOV P0,#01H

MOV A,R5

MOVC A,@A+DPTR

MOV P2,A

ACALL D10MS

AJMP LOOP1

SERV0:MOV R2,#0FFH ;正常状态恢复程序,使R0的值不为0 RETI

SERV1:DJNZ R0,NEXT ;未到1秒,则转到NEXT

CJNE R5,#01,DHE0

AJMP DHE3

DHE0: CJNE R5,#00H,DHE1

CJNE R6,#00H,DHE2

MOV R5,#00H

MOV R6,#01H

MOV P1,#0F5H

AJMP OUT0

DHE1: DEC R5 ;减1秒

AJMP OUT0

DHE2: MOV R6,#00H

MOV R5,#09H

OUT0: MOV R0,#20

RETI

DHE3: MOV P0,#00H

MOV P2,#3FH ;显示为0

MOV A,P1

MOV R1,#05H

JNB ACC.0,CHE0 ;东西方向红灯亮,则转到CHE0 YELL0:SETB P1.0

SETB P1.1 ;东西方向绿灯灭

CLR P1.2

ACALL DMS

SETB P1.2

ACALL DMS

DJNZ R1,YELL0 ;东西方向黄灯闪烁5次

MOV P1,#0EEH ;东西方向红灯亮,南北方向绿灯亮

SJMP NEXT1

CHE0: JNB ACC.3,CHE1

YELL1:SETB P1.3

SETB P1.4 ;南北方向绿灯灭

CLR P1.5