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

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

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

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

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

基于单片机的交通灯设计

集团标准化小组:

[VVOPPT-JOPP28-JPPTL98-LOPPNN]

 

基于单片机的交通灯设计

郑州航空工业管理学院

单片机课程设计说明书

2014级专业班级

题目

学号

姓名

指导教师

二О一六年十二月十五日

一、

交通灯的基本原理

单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。

单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。

单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:

中央处理器、存储器和I/O接口电路等。

因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。

近年来随着科技的飞速发展,单片机的应用正在不断地走向深入。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。

交通灯是城市交通的重要指挥系统,与人们的日常生活密切相关。

随着经济的快速发展,城市中的车辆逐渐增多,交通拥堵和堵塞现象日趋严重,引起交通事故频发等一系列问题,因此设计一个灵活、稳定、便捷的多功能交通灯控制系统具有必要性和现实性。

本次设计的意义在于通过对具体的控制系统的设计,掌握微机控制系统设计的一般方法和处理问题的思路,特别是一些常用的技术手段。

在实践设计过程中,积累设计经验,开拓思维空间,全面提高个人的综合能力。

本系统由单片机硬/软件系统,8位8段数码管和LED灯显示系统。

和电路控制电路等组成,较好的模拟了交通路面的控制。

倒计时电路主要是由双位共阴数码管和74HC573N驱动模块组成,控制信号通过单片机的端口P1口进行信号的传输。

倒计时电路负责的是显示红绿灯持续显示的时间。

当绿灯或者红灯持续显示时,数码管显示该状态的持续时间,在黄灯闪烁显示时,起到倒计时秒数的作用。

红绿灯功能电路主要是由各色的发光二极管和74HC573N驱动模块组成,控制信号跟数码管一样都是通过P1口进行传输。

红绿灯电路负责的是各个车行道和人行道通行状态的显示。

系统经初始化可以开始自动运行,数码管有倒计时显示功能,即

1、具有直行、左转、右转、停止四个指示灯;

2、指示灯有倒计时显示功能,直行+右转20秒,左转+右转10秒,停止+右转30秒,按此规律不断循环;

3、直行和左转灯灭掉前3秒能够闪烁提示(每秒两次);

4、能够调整直行、左转、停止指示灯的时间。

二、交通灯的硬件设计

本设计单片机主要是用于控制交通灯的演示系统,故只需要单片机最小系统即可完成。

此电路由单片机、时钟电路、电源、复位电路4个组成部分组成。

下图分别为单片机原理图、交通灯系统电路图。

图1单片机系统原理图

图2交通灯系统原理图

2.1复位电路

复位方式有多种,本设计采用按键复位。

接线图如图3复位电路,

在复位期间(即RST为高电平期间),P0口为高组态,P1-P3口输出高电平;外部程序存储器读选通信号PSEN无效。

地址锁存信号ALE也为高电平。

在设定的定时时间内必须在RST引脚产生一个由高到低的电平变化,以清内部定时器.

图3复位电路图

2.2晶振电路

选取原则:

传统做法,但能够实现所需,即最简单也最是实用。

电容选取30pF,晶振为12MHz。

图4晶振电路图

供电电路由主电源和备用电源组成。

主电源主要是由变压器、6A整流桥、4个二极管,2个104pf电容,二个电解电容以及7805三端稳压管组成。

这个部分为系统提供主要的供电,输出电压为5V直流。

备用电源主要是由4位的5号电池盒组成。

这个部分在主电源断电时能够几乎瞬时的为系统提供电源,输出电压也是5V直流。

该电源直接接到单片机的电源端。

图5主电源和备用电源切换功能电路

2.4原件清单

原件名称

数量

焊接位置

电源部分

USB座

1

USB

USB线

1

双排针

(2)

1

CONN1

跳帽

2

104电容0.1uF

7

C2,5,6,7,8,9,11

LED灯

1

D1

电阻2K

1

R2

最小系统部分

40针座

1

U1

STC89C52

1

晶振12MHz

1

Y1

电容20pF

2

C3,C4

复位键

1

SW_RST

电阻10K

1

R1

蜂鸣器

1

LS1+

三极管9015

9

Q1~Q9

电阻330

1

R3

键盘显示、通信部分

16针座

1

U2

MAX232

1

单排针(5)

1

UART

按键

16

KEY1~KEY16

单排针(3)

1

SWITCH1

跳帽

1

4位LED

2

DIGILED1,2

电阻4.7K

8

R14~R21

电阻330

8

R6~R13

三、交通灯的软件设计

3.1交通灯程序

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharcodeTab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xce};

sbitup=P3^1;

sbitdown=P3^2;

sbitset=P3^3;

sbitS8=P2^0;

sbitS7=P2^1;

sbitS6=P2^2;

sbitS5=P2^3;

sbitS4=P2^4;

sbitS3=P2^5;

sbitS2=P2^6;

sbitS1=P2^7;

ucharfenduan1=20,fenduan2=10,fenduan3=3;

uchartimes=0;

ucharsecond=0;

ucharbsecond=0;

ucharsss=0;

uchardisData[8]={7,12,1,10,11,11,6,7};

voidkeydisplay();

voiddisplay();

voidDelay()

{

unsignedchari;

for(i=0;i<255;i++);

}

voidISR_Timer0(void)interrupt1

{

TH0=0x3c;

TL0=0xb0;

times++;

if(times==10)

{

bsecond++;

times=0;

}

}

voiddisplay(uchar*point)

{

P0=Tab[*(point)];

S1=0;//开S1显示

Delay();

S1=1;//关S1显示

P0=Tab[*(point+1)];

S2=0;//开S2显示

Delay();

S2=1;//关S2显示

P0=Tab[*(point+2)];

S3=0;//开S3显示

Delay();

S3=1;//关S3显示

P0=Tab[*(point+3)];

S4=0;//开S4显示

Delay();

S4=1;//关S4显示

P0=Tab[*(point+4)];

S5=0;//开S1显示

Delay();

S5=1;//关S1显示

P0=Tab[*(point+5)];

S6=0;//开S2显示

Delay();

S6=1;//关S2显示

P0=Tab[*(point+6)];

S7=0;//开S3显示

Delay();

S7=1;//关S3显示

P0=Tab[*(point+7)];

S8=0;//开S4显示

Delay();

S8=1;//关S4显示

}

voiddelayAJ(uchara)

{

uchari;

while(a--)

{

for(i=0;i<125;i++);

{

display(disData);

}

}

}

voidkey()

{

if(set==0)

{

delayAJ(10);//消抖//消抖时间可根据实际情况设定

if(set==0)

{

sss++;

delayAJ(10);

}

while(!

set)

{

delayAJ(10);

}

}

if(sss%4==1)

{

if(up==0)

{

delayAJ(10);

if(up==0)

{

fenduan1++;

if(fenduan1==100)

fenduan1=0;

{

while(!

up)

delayAJ(10);

}

}

}

if(down==0)

{

delayAJ(10);

if(down==0)

{

fenduan1--;

if(fenduan1==-1)

fenduan1=99;

}

while(!

down)

delayAJ(10);

}

}

if(sss%4==2)

{

if(up==0)

{

delayAJ(10);

if(up==0)

{

fenduan2++;

if(fenduan2==100)

fenduan2=0;

{

while(!

up)

delayAJ(10);

}

}

}

if(down==0)

{

delayAJ(10);

if(down==0)

{

fenduan2--;

if(fenduan2==-1)

fenduan2=99;

}

while(!

down)

delayAJ(10);

}

}

if(sss%4==3)

{

if(up==0)

{

delayAJ(10);

if(up==0)

{

fenduan3++;

if(fenduan3==100)

fenduan3=0;

{

while(!

up)

delayAJ(10);

}

}

}

if(down==0)

{

delayAJ(10);

if(down==0)

{

fenduan3--;

if(fenduan3==-1)

fenduan3=99;

}

while(!

down)

delayAJ(10);

}

}

}

voidkeydisplay()

{

bsecond=0;

if(sss%4==1)

{

disData[0]=11;

disData[2]=1;

disData[3]=11;

disData[6]=fenduan1/10;

disData[7]=fenduan1%10;

}

if(sss%4==2)

{

disData[0]=7;

disData[2]=11;

disData[3]=11;

disData[6]=fenduan2/10;

disData[7]=fenduan2%10;

}

if(sss%4==3)

{

disData[0]=11;

disData[2]=11;

disData[3]=10;

disData[6]=fenduan3/10;

disData[7]=fenduan3%10;

}

}

voidxianshi()

{

second=bsecond/2;

if(second>fenduan1+fenduan2+fenduan3+1)

bsecond=0;

if(second<=fenduan1)

{

disData[0]=11;

disData[1]=12;

disData[2]=1;

disData[3]=11;

disData[6]=(fenduan1-second)/10;

disData[7]=(fenduan1-second)%10;

if((fenduan1-second<=3)&&(bsecond%2==0))

{

disData[0]=11;

disData[1]=11;

disData[2]=11;

disData[3]=11;

}

}

elseif((second>fenduan1)&&(second<=fenduan2+fenduan1))

{

disData[0]=7;

disData[1]=12;

disData[2]=11;

disData[3]=11;

disData[6]=(fenduan1+fenduan2-second+1)/10;

disData[7]=(fenduan1+fenduan2-second+1)%10;

if((fenduan1+fenduan2-second+1<=3)&&(bsecond%2==0))

{

disData[0]=11;

disData[1]=11;

disData[2]=11;

disData[3]=11;

}

}

elseif((second>fenduan2+fenduan1)&&(second<=fenduan2+fenduan1+fenduan3))

{

disData[0]=11;

disData[1]=12;

disData[2]=11;

disData[3]=10;

disData[6]=(fenduan1+fenduan2+fenduan3-second+1)/10;disData[7]=(fenduan1+fenduan2+fenduan3-second+1)%10;

if((fenduan1+fenduan2+fenduan3-second+1<=3)&&(bsecond%2==0))

{

disData[0]=11;

disData[1]=11;

disData[2]=11;

disData[3]=11;

}

}

if(second>fenduan1+fenduan2+fenduan3+1)

bsecond=0;

}

voidmain()

{

TMOD|=0x01;//T016位定时器

TH0=0x3c;

TL0=0xb0;

ET0=1;

TR0=1;

EA=1;

while

(1)

{

key();

if(sss%4==0)

xianshi();

else

keydisplay();

display(disData);

}

}

3.2程序流程图

四、课程设计总结

本次课程设计中,重新巩固了单片机理论课时,感觉到的内容很多,知识点很杂、很繁琐。

通过自己的努力也更进一步掌握了单片机的内容构造和工作原理,以及接外部电路的情况。

当然光有理论知识那只是“纸上谈兵”,还需实际动手去实践。

真正把所学的用到日常生活中,理论联系实际,做出实物模型。

这次单片机课程设计,我们设计的是简易十字路口交通灯设计,通过这次课程设计我感觉到要想做成功,必须花时间多做准备,查阅大量资料,每个过程都很繁琐,都要认真地分析每一步每一个模块要实现大的功能,然后分步进行编写调试,最后整合成在一起。

在这次课程设计中,让我感到过程决定结果,细节觉得成败。

过程很艰难,每个细节都要认真的分析。

通过本次课程设计,我们要对所做的事情有耐性,在编程的时候有困难,也可能变得不一定成功,所以要经过多次调试,分析,改正,反复去做;认真虚心求教老师和同学。

经历了多次失败的洗礼,我明白在以后学习和实践中,我要努力掌握知识,多动手,多思考,以免在以后的学习工作中犯同样的错误。

五、指导教师评语

成绩指导教师签名

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

当前位置:首页 > 高中教育 > 高考

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

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