模拟交通灯电子设计实验报告

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

班级:电子信息科学与技术信科09-4班学号:08093610

姓名:司祥

指导教师:许新征

引言:

电子技术是一门实践性很强的学科。电子系统设计与实践是电子技术综合应用的实践性环节,是提高在校大学生实践技能和增强动手能力的有效措施。通过电子实习,使学生建立起电子技术在实际生活中应用的概念和工程意识,培养和提高理论与实践相结合、分析和解决问题、动手实践的能力,为后续电子技术的应用和创新打下基础。本课程着重进行电子技术综合性应用实习,包括对实际电原理图的理解、设计,融合课堂各相关课程的理论知识、实验基础,结合实际项目,培养学生实践能力、综合应用能力以及独立工作能力,除了综合性应用实习外,还要进行设计性应用实习,加大培养工程设计能力,完成电子产品或电子电路的印制板图设计。

一、设计背景:

如今,红绿灯成为管制交通的最有效的手段之一。作为疏导交通必不可少的工具,已经出现在各个交通路口。红绿灯的出现有效的减少了交通事故的发生,提高了道路的畅通性。因此,为了巩固对课堂知识的理解,更进一步了解单片机结构与功能,加强自己的动手实践能力,我决定用单片机来实现简单模拟交通灯的设计。

二、设计功能:

1.东西方向车道和南北方向车道上车辆交替运行。

2.南北方向为主干道,即南北方向通行时间大于东西通道。

3.红灯亮表示禁止通行,绿灯亮表示允许通行。

4.在绿灯转为红灯时,绿灯先变为黄灯持续3s ,此时另一通道红灯保持不变。

5.路口数码管按秒倒计时显示数字作为提醒。

西北

交通路口示意图

三、所需器件:

1.STC89C52 1块(含底座)

2.晶振12MHz

3.电容30pF 2个

4.电解电容10μF 1个

5.双位共阳LED 4个

6.发光二极管12个(红黄绿各3个)

7.74ls244 1块(含底座)

8.电阻470Ω12个

9.电阻1KΩ4个

10.万用板1块

B座1个

B线1个

四、详细设计:

首先连接单片机最小系统:XTAL1和XTAL2分别接晶振两端,RST为单片机的掉电保护或上电复位端。

利用P0口控制数码管数据显示,P0口和数码管之间接74ls244作数据缓冲器,数据经74ls244缓冲器送到数码管显示。P2口连接数码管的公共极COM1和COM2,也即动态扫描时的位选,“1”有效。P1口控制LED灯模拟交通灯的亮灭,“0”有效。利用单片机定时/计数器0计数方式1产生50ms的延时,中断20次即1s延时,作为数码管倒计时单位;利用定时/计数器1产生3ms延时作动态扫描。

由于南北方向为主干道,因此起始时设置南北方向亮绿灯,数码管初值为32;东西方向亮红灯,数码管初值为35,当南北方向数码管倒计时为0时黄灯亮3s,东西方向红灯恰好倒计时为0。此时,南北方向亮红灯25秒,东西方向亮绿灯22秒,东西方向数码管倒计时为0时亮黄灯3秒。之后以此为周期重复。

电路原理仿真图如下:

东西方向红灯35秒,南北方向绿灯32秒

南北方向绿灯倒计时为0后,3s黄灯

南北方向25s红灯,东西方向22s绿灯

由于软件中244元件问题,仿真时用255代替。实际电路中,单片机驱动

COM1和COM2电流不够,因此每个数码管的公共极都接了上拉电阻驱动电路。

流程图:

五、程序代码:

#include

#define uchar unsigned char

#define uint unsigned int

#define westred 0xfe //定义各方向红黄绿灯状态

#define westyel 0xfd

#define westgre 0xfb

#define westhigh 0x01

#define westlow 0x02

#define southred 0xef

#define southyel 0xdf

#define southgre 0xbf

#define southhigh 0x40

#define southlow 0x80

int tick=0;

uint westvalue,southvalue;

uint count=0;

code uchar Table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void timer0_init()

{

TMOD=TMOD&0XF1;

ET0=1;

PT0=1;

TH0=0x3c;//50ms

TL0=0xb0;

TR0=1;

}

void timer1_init()

{

TMOD=TMOD&0X1f;

ET1=1;

PT1=0;

TH1=0xf4; //3ms

TL1=0x48;

TR1=1;

}

void timer0_iqr() interrupt 1

{

TH0=0x3c; //TH0=0x4b

TL0=0xb0; // TL0=0x00;

if(tick%150==0)

{

southvalue--;

westvalue--;

}

if(tick==0)

{

P1=westred&southgre;

westvalue=35;

southvalue=32;

}

else if(tick==32*150)

{

P1=westred&southyel;

southvalue=3;

}

else if(tick==35*150)

相关文档
最新文档