DXP交通信号指示灯单片机.docx
《DXP交通信号指示灯单片机.docx》由会员分享,可在线阅读,更多相关《DXP交通信号指示灯单片机.docx(10页珍藏版)》请在冰豆网上搜索。
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次,在实际测试中效果良好。
所以说本次实验相当成功。