当前位置:首页 > 交通灯 > 正文

51单片机交通灯程序


壹、求一个单片机交通灯的程序
/*名称:LED模拟交通灯
描述:绿色东西灯亮几秒,黄灯闪烁5次然后红灯亮。红灯亮起后,南北方向红绿灯由红变绿,几秒后南北方向亮。黄灯闪烁5次后变为红灯,然后向东西方向变为绿灯,以此类推。
*/
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitls138a=P0^4;
sbitls138b=P0^5;
sbitls138c=P0^6;
sbitRED_A=P1^0;//东西向光
sbitYELLOW_A=P1^1;
sbitGREEN_A=P1^2;
sbitRED_B=P1^3;//南北方向灯
sbitYELLOW_B=P1^4;
sbitGREEN_B=P1^5;
ucharFlash_Count=0,num,num1,time,i,j;//闪烁次数
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchartmp[]={30,5,25};
uchartmp1[]={25,30,5};
//延迟
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
voiddisplay(ucharnumdis,numdis1)
{
P0=表[numdis%100/10];
ls138a=0;ls138b=0;ls138c=0;
延迟(1);
P0=表[numdis%10];
ls138a=1;ls138b=0;ls138c=0;
延迟(1);
P0=table[numdis1%100/10];
ls138a=0;ls138b=1;ls138c=0;
延迟(1);
P0=表[numdis1%10];
ls138a=1;ls138b=1;ls138c=0;
延迟(1);
}
voidinit()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
//流量灯光切换
voidTraffic_Light()
{
P1=0xde;//南北红灯亮,东西绿灯亮
delay(10000);
while(++Flash_Count!=5)
{
P1=0xee;//红色南北灯亮,黄色东西灯亮
delay(500);
P1=0xfe;//红南北极灯亮,东、西灯亮。黄灯灭
delay(500);
}//黄灯亮灭5次
Flash_Count=0;
P1=0xf3;//南北绿灯亮,东西红灯亮
delay(10000);
while(++Flash_Count!=5)
{
P1=0xf5;//南北黄灯亮,东西红灯亮
delay(500);
P1=0xf7;//南北黄灯灭,东、西红灯亮
delay(500);
}//黄灯亮灭5次
Flash_Count=0;
}
//主程序
voidmain()
{
init();
i=0;
j=0;
num=tmp[0];
num1=tmp1[0];
while(1)
{
Semaphore();
display(num,num1);
}voidT0_time()中断1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
time++;
if(time==20)
{
time=0;
if(num>0){num--;}
else
{
i++;
if(i>2)i=0;
num=tmp[i];
}
if(num1>0){num1--;}
else
{
j++;
if(j>2)j=0;
num1=tmp1[j];
}


贰、求用C语言编写的交通灯程序,C51单片机控制,无左转右转
//以下代码是KeilC51软件调试的
#include"reg51.h"//头文件包含
//宏定义
#defineuintunsignedint
#Defineucharunsignedchar
灯亮if#defineON0//0
灯亮if#defineOFF1//1
//引脚定义
//黄灯亮南北路红灯亮3秒,黄灯亮30秒,绿灯亮3秒,38秒
//东西黄灯亮3秒,绿灯亮28秒,黄灯亮3秒,红灯亮40秒
sbitPortDX_Yellow=P1^0;//东西方向黄灯
sbitPortDX_Red=P1^1;//东西方向红灯
sbitPortDX_Green=P1^2;//东西方向绿灯
sbitPortNB_Yellow=P1^3;//南北方向黄灯Light
sbitPortNB_Red=P1^4;//南北方向红灯
sbitPortNB_Green=P1^5;//南北方向绿灯
voidlay(uintms)//毫秒延迟(AT89C52@11.0592MHz)
{
uintti;
while(ms--)
{
for(ti=0;ti<112;ti++){}//112
}
}
/*===================主要功能=====================*/
voidmain(void)
{
lay(400);//开机延时400ms
while(1)
{
PortNB_Yellow=ON;PortNB_Red=OFF;PortNB_Green=OFF;//南北黄灯亮3秒
PortDX_Yellow=ON;PortDX_Red=OFF;PortDX_Green=OFF;//东、西黄灯亮3秒
lay(3000);
PortNB_Yellow=OFF;PortNB_Red=ON;PortNB_Green=OFF;//北、西南红灯亮28秒
PortDX_Yellow=OFF;PortDX_Red=OFF;PortDX_Green=ON;//东西绿灯亮28秒会
lay(28000);
PortNB_Yellow=OFF;PortNB_Red=ON;PortNB_Green=OFF;//南北红灯亮2秒
PortDX_Yellow=ON;PortDX_Red=OFF;PortDX_Green=OFF;//东西黄灯亮亮2秒
delay(2000);
PortNB_Yellow=ON;PortNB_Red=OFF;PortNB_Green=OFF;//南北黄灯亮1秒
PortDX_Yellow=ON;PortDX_Red=OFF;PortDX_Green=OFF;//东西黄灯亮1秒
lay(1000);
PortNB_Yellow=ON;PortNB_Red=OFF;PortNB_Green=OFF;//南北黄灯亮,亮2秒
PortDX_Yellow=OFF;PortDX_Red=ON;PortDX_Green=OFF;//东西红灯亮2秒
lay(2000);
PortNB_Yellow=OFF;PortNB_Red=OFF;PortNB_Green=ON;//南北红灯绿灯亮38秒
PortDX_Yellow=OFF;PortDX_Red=ON;PortDX_Green=OFF;//东、西红灯亮38秒
延迟(3800);
}
}
1.当黄灯亮时,北、南、东车道同时变黄,向行人和车辆发出三秒警告,下一个灯色即将到来。
2、南北向道路信号灯为红色时,南北向道路车辆禁止通行30秒;南北向道路信号灯为绿色时,南北向道路车辆禁止通行距离过去38秒。
3.当东西车道灯亮绿灯时,东西车道车辆允许通行28秒;当东西车道灯亮红灯时,禁止东西车道车辆通行。。40秒。
4.这样,上表中的红、绿、黄的时间和出现顺序就会按顺序出现,让行人和车辆安全、顺利地通行。