DXP交通信号指示灯单片机.docx

上传人:b****3 文档编号:27328739 上传时间:2023-06-29 格式:DOCX 页数:10 大小:172.84KB
下载 相关 举报
DXP交通信号指示灯单片机.docx_第1页
第1页 / 共10页
DXP交通信号指示灯单片机.docx_第2页
第2页 / 共10页
DXP交通信号指示灯单片机.docx_第3页
第3页 / 共10页
DXP交通信号指示灯单片机.docx_第4页
第4页 / 共10页
DXP交通信号指示灯单片机.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

DXP交通信号指示灯单片机.docx

《DXP交通信号指示灯单片机.docx》由会员分享,可在线阅读,更多相关《DXP交通信号指示灯单片机.docx(10页珍藏版)》请在冰豆网上搜索。

DXP交通信号指示灯单片机.docx

DXP交通信号指示灯单片机

一、实验目的

1、了解单片机的使用方法及简单电路的制作

2、学会基础的单片机编程,并学会用proteus对电路进行仿真。

二、实验要求

1.设定南北,东西方向交通灯显示时间一样。

2.设定红绿灯均显示30秒,红灯绿灯切换时黄灯显示2秒。

3.要求红黄绿灯用发光二极管表示,并且显示出时间。

三、设计原理

1、考虑到交通信号指示灯的实际切换情况,将实验要求的第二部分进行了修改,即绿灯三十秒倒计时,然后黄灯两秒倒计时,另一个方向仅红灯进行三十二秒倒计时,然后循环。

具体情况对比见下框图

原指示灯跳转时间框图

修改后指示灯跳转时间框图

注:

由于为了更直观,特将绿灯时间修改为31秒,即第一个显示30秒,倒计时到0秒,持续时间是31秒;黄灯、红灯原理同绿灯。

2、在C程序中利用一个1秒的循环程序进行计时,并将其中一部分在主程序中进行,设变量为i=69,则数码管显示值的算法见下框图

四、电路图设计

注:

为了焊接方便,单片机的P1.0~P1.7并未依次对应数码管的a~h,实际为a-P1.1 b-P1.0c-P1.5 d-P1.6 e-P1.7 f-P1.2 g-P1.3 h-P1.4,在程序中将有体现

五、程序设计

 

P0=0x04;

P1=TAB[C];

P2=0xf6;

delay(h);

P1=0xff;

P0=0x08;

P1=TAB[D];

P2=0xf6;

delay(h);

P1=0xff;

}

}

if(i<38&&i>=35)

{

a=i-35;

d=i-35;

A=a/10;

B=a%10;

C=d/10;

D=d%10;

while(g--)

{

if(g<=15)

Y=0;

if(g>15&&g<=30)

Y=1;

if(g>30&&g<=45)

Y=0;

if(g>45)

Y=1;

P0=0x01;

P1=TAB[A];

r=0;

delay(h);

P1=0xff;

P0=0x02;

P1=TAB[B];

r=0;

delay(h);

P1=0xff;

P0=0x04;

P1=TAB[C];

r=0;

delay(h);

P1=0xff;

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharTAB[10]={0x18,0xde,0x34,0x94,0xd2,0x91,0x11,0xdc,0x10,0x90};

sbitY=P2^1;

sbitR=P2^2;

sbity=P2^4;

sbitr=P2^3;

voiddelay(uintk)

{

unsignedcharh,m;

while(k--){

for(h=5;h>0;h--)

for(m=214;m>0;m--);

}

}

voidmain()

{

uinti=69,g,a,b,c,d,e,f,h,j=0,A,B,C,D;

while(i--){

P2=0xff;

g=58;

h=2;

if(i<=68&&i>=38)

{

a=i-38;

d=i-35;

A=a/10;

B=a%10;

C=d/10;

D=d%10;

while(g--)

{

P0=0x01;

P1=TAB[A];

P2=0xf6;

delay(h);

P1=0xff;

P0=0x02;

P1=TAB[B];

P2=0xf6;

delay(h);

P1=0xff;

 

P0=0x08;

P1=TAB[D];

r=0;

delay(h);

P1=0xff;

}

}

if(i<35&&i>3)

{

b=i-1;

e=i-4;

A=b/10;

B=b%10;

C=e/10;

D=e%10;

while(g--)

{

P0=0x01;

P1=TAB[A];

P2=0xdb;

delay(h);

P1=0xff;

P0=0x02;

P1=TAB[B];

P2=0xdb;

delay(h);

P1=0xff;

P0=0x04;

P1=TAB[C];

P2=0xdb;

delay(h);

P1=0xff;

P0=0x08;

P1=TAB[D];

P2=0xdb;

delay(h);

P1=0xff;

}

}

if(i<4&&i>0)

{

c=i-1;

f=i-1;

A=c/10;

B=c%10;

C=f/10;

D=f%10;

while(g--)

{

if(g<=15)

y=0;

if(g>15&&g<=30)

y=1;

if(g>30&&g<=45)

y=0;

if(g>45)

y=1;

P0=0x01;

P1=TAB[A];

R=0;

delay(h);

P1=0xff;

P0=0x02;

P1=TAB[B];

R=0;

delay(h);

P1=0xff;

P0=0x04;

P1=TAB[C];

R=0;

delay(h);

P1=0xff;

P0=0x08;

P1=TAB[D];

R=0;

delay(h);

P1=0xff;

}

}

}

 

六、实验仿真结果

以上为四种转换的状态图,其余为上图的循环

七、实验总结

本次实验利用单片机来实现,相对来说就比较简单,在审题时发现题目的要求与实际情况不符,因此对要求做了相应的变动,使程序更加符合实际情况。

在进行单片机编程时开始找不到几个灯变换过程中的逻辑关系,后静下心来一想,利用较简单的if语句实现功能,根据算法的不同分好计算区间。

后在程序中进行了一些改进,如将数码管的现实频率调高到58HZ,在实际测试时很那看出其闪烁,效果良好。

有对黄灯做了改进,也利用if语句使黄灯闪烁,1秒闪烁2次,在实际测试中效果良好。

所以说本次实验相当成功。

 

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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