微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机交通灯C语言程序

单片机交通灯C语言程序

时间:11-25 来源:互联网 点击:
这是一款单片机交通灯C语言程序,单片机用的是AT89C51,两只共阴两位一体的数码管分另显示两个路口的倒计时,用12只发光二极管模拟红、黄、绿灯。电路简单,制作容易。电子小制作。

#include
#define uchar unsigned char
bit flag;
sbit red1_1=P1^0; //南北红灯D1
sbit yel1_1=P1^1;//南北黄灯D2
sbit gre1_1=P1^2;//南北绿灯D3
sbit red1_2=P1^3;//南北红灯D4
sbit yel1_2=P1^4;//南北黄灯D5
sbit gre1_2=P1^5;//南北绿灯D6

sbit red2_1=P1^6;//东西红灯D7
sbit yel2_1=P1^7;//东西黄灯D8
sbit gre2_1=P0^0;//东西绿灯D9
sbit red2_2=P0^1;//东西红灯D10
sbit yel2_2=P0^2;//东西黄灯D11
sbit gre2_2=P0^3;//东西绿灯D12

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};
uchar n,n1,aa=0,shi,ge,shi1,ge1;
void init();
void xianshi1(uchar shi,uchar ge);
void xianshi2(uchar shi1,uchar ge1);
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
main()
{
n=30;
shi=n/10;
ge=n;
n1=30;
shi1=n1/10;
ge1=n1;

init();
while(1)
{
if(flag!=1)
xianshi1(shi,ge);
else
xianshi2(shi1,ge1);

}
}

void xianshi1(uchar shi,uchar ge)
{
P3=0x02;
P2=tab[ge];
delay(200);
P3=0x01;
P2=tab[shi];
delay(200);
}

// http://www.duankudp.com/
void xianshi2(uchar shi1,uchar ge1)
{
P3=0x08;
P2=tab[ge1];
delay(200);
P3=0x04;
P2=tab[shi1];
delay(200);

}

void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
EA=1;
ET0=1;
TR0=1;
}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
aa++;
if(flag!=1)
{
if(aa==20)
{
aa=0;
red1_1=0;red1_2=0;
gre2_1=0;gre2_2=0;//启动南北红灯1和东西绿灯2

n--;
shi=n/10;
ge=n;

if(n<=3)
{
red1_1=0;red1_2=0;
gre2_1=1;gre2_2=1;
yel2_1=0;yel2_2=0;//启动南北红灯1和东西黄灯2

if(n<=0)
{
n=30;
red1_1=1;red1_2=1;
gre1_1=0;gre1_2=0;
yel2_1=1;yel2_2=1;
red2_1=0;red2_2=0;//启动南北绿灯1和东西红灯2http://www.5imcu.net/

TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
TR0=1;
aa++;
flag=1;

}
}
}
}
else
{
if(flag==1)
{
// TH0=(65536-50000)/256;
// TL0=(65536-50000)%6;
// TR0=1;
// aa++;
if(aa==20)
{
aa=0;
n1--;
shi1=n1/10;
ge1=n1;
if(n1<=3)
{
gre1_1=1;gre1_2=1;
yel1_1=0;yel1_2=0;
red2_1=0;red2_2=0;//启动南北黄灯1和东西红灯2

if(n1<=0)
{
n1=30;
yel1_1=1;yel1_2=1;
red2_1=1;red2_2=1;

TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
TR0=1;
flag=0;
}
}
}
}
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top