北京交通大学单片机课程设计交通灯

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

交通灯设计

班级:

姓名:

学号:

2016年5月5日

1 课程设计总体目标

1.1总体结构

1.设计一个十字路口交通控制器。

2.开始运行后,先南北绿灯60S(通行60S)、东西红灯65S(禁止65S);然后,南北转黄灯闪烁5S;接着,东西绿灯30S(通行30S),南北红灯35S(禁止35S);最后,东西转黄灯闪烁5S;

3.在二极管亮或者闪烁的同时两个方向的数码管显示倒计时,东西向一组数码管,南北向一组数码管。

2 硬件设计

包括硬件电路及工作原理描述

1.设计思路

模拟交通灯控制电路时运用单片机来控制红、黄、绿三色LED灯显示,并通过定时器中断来控制数码管显示倒计时。

红、黄、绿交替闪亮,利用数码管计数显示间隔等,用于管理十字路口的车辆及行人通过,计时牌显示路口通行转换剩余时间。

2.单片机总控制电路如下图:

STC89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,STC89C51在众多嵌入式控制应用系统中得到广泛应用。

3.74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。

74LS245还具有双向三态功能,既可以输出,也可以输入数据。

当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。

当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当CE为高电平时,A、B均为高阻态。

由于P2口始终输出地址的高8位,接口时74LS245的三态控制端1G和2G接地,P2口与驱动器输入线对应相连。P0口与74LS245输入端相连,E端接地,保证数据线畅通。8051的/RD和/PSEN相与后接DIR,使得RD且PSEN 有效时,74LS245输入(P0.1←D1),其它时间处于输出(P0.1→D1)。

3 软件设计

程序流程框图

程序:

C语言:

#include

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P0^0; //东西向指示灯sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B=P0^3; //南北向指示灯sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

//延时倍数,闪烁次数,操作类型变量

uchar Time_Count=0,Flash_Count=0,Operation_Type=1;

//定时器0中断函数

void T0_INT() interrupt 1

{

TL0=-50000/256;

TH0=-50000%256;

switch(Operation_Type)

{

case 1://东西向绿灯与南北向红灯亮

RED_A=0;YELLOW_A=0;GREEN_A=1;

RED_B=1;YELLOW_B=0;GREEN_B=0;

if(++Time_Count!=100) return; //65s(65*100*50ms)切换

Time_Count=0;

Operation_Type=2;

break;

case 2://东西向黄灯开始闪烁,绿灯关闭

if(++Time_Count!=8) return;

Time_Count=0;

YELLOW_A=~YELLOW_A;GREEN_A=0;

if(++Flash_Count!=10) return;//闪烁

Flash_Count=0;

Operation_Type=3;

break;

case 3://东西向红灯与南北向绿灯亮

RED_A=1;YELLOW_A=0;GREEN_A=0;

RED_B=0;YELLOW_B=0;GREEN_B=1;

if(++Time_Count!=100) return; //30s(30*100*50ms)切换

Time_Count=0;

Operation_Type=4;

break;

case 4://南北向黄灯开始闪烁,绿灯关闭

if(++Time_Count!=8) return;

Time_Count=0;

YELLOW_B=~YELLOW_B;GREEN_A=0;

if(++Flash_Count!=10) return;//闪烁

Flash_Count=0;

Operation_Type=1;

break;

}

}

//主程序

void main()

{

TMOD=0x01;//T0方式1

IE=0x82;

TR0=1;

while(1);

}

汇编语言:

ZX EQU 42H

ZW EQU 43H

KCOUNTER EQU 50H

ORG 0

LJMP MAIN

ORG 0BH

LJMP T0INT

ORG 30H

MAIN: MOV SP,#6FH

MOV 46H,#2;0.1s

MOV TMOD,#01H

MOV TH0,#3CH;50ms

MOV TL0,#0D4H

MOV IE,#82H

SETB TR0

LP1: LCALL ZT1

SJMP LP1

T0INT:

CLR TR0

PUSH ACC

PUSH 0

DJNZ 46H,T0

MOV 46H,#2

INC R1;判断用数字变量

DEC R2;南北计时变量

DEC R3;东西数字变量

T0: MOV TH0,#3CH

MOV TL0,#0D4H

SETB TR0

P0P 0

POP ACC

RETI

ZT1: MOV R2,#60

MOV R3,#66 ;南北绿灯60s,东西红灯65s

相关文档
最新文档