您的位置 首页 分销

51单片机用C言语完成交通灯

51单片机用C语言实现交通灯(红绿灯)源程序交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。源程序如

51单片机C言语完成交通灯(红绿灯)源程序
交通灯,红黄绿灯替换亮,怎样完成呢?其实便是依据单片机守时器及倒计时的程序修改。

源程序如下:

#include

bit red,green,yellow,turnred; //界说红、黄、绿及转红标志

code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管 0-9

unsigned char Dis_Shiwei;//界说十位
unsigned char Dis_Gewei; //界说个位
void delay(unsigned int cnt) //用于动态扫描数码管的延时程序
{
while(–cnt);
}

main()
{

TMOD |=0x01;//守时器设置 10ms in 12M crystal守时器0,工作方式1,16位守时器
TH0=0xd8; //65535-10000=55535=D8F0(十六进制)
TL0=0xf0;
IE= 0x82; //中止操控,EA=1开总中止,ET0=1:守时器0中止答应
TR0=1; //开守时器0中止

P1=0xfc;//红灯亮,依据红黄绿接灯的次序。
red =1;
while(1)
{
P0=Dis_Shiwei;//显现十位,这儿完成用8位数码管,即左1位
P2=0;
delay(300);//时间短延时
P0=Dis_Gewei; //显现个位,左数,2位
P2=1;
delay(300);
}

}

void tim(void) interrupt 1 using 1
{
static unsigned char second=60,count; //初值60

TH0=0xd8;//从头赋值,10毫秒守时
TL0=0xf0;
count++;
if (count==100)
{
count=0;
second–;//秒减1
if(second==0)
{ //这儿增加守时到0的代码 ,可所以灯电路,继电器吸合等,或许履行一个程序
if(red) //红灭,先转黄
{
red=0;yellow=1;
second=4;
P1=0xF3;//黄灯亮4秒,黄灯为过渡灯,再依据状况转绿或转红
}
else if(yellow && !turnred)
{
yellow=0;green=1;
second=25;
P1=0xCF;//绿灯亮25秒,
}
else if(green)
{
yellow=1;green=0;
second=4;
P1=0xF3;//黄灯亮4秒
turnred=1;
}
else if(yellow && turnred) //绿灯灭,转黄灯,后红灯,turnred=1时
{
red=1;yellow=0;
P1=0xFC;//红灯亮60秒
second=60;
turnred=0; //接下来是转黄,绿。
}

}
Dis_Shiwei=tab[second/10];//十位显现值处理
Dis_Gewei=tab[second]; //个位显现处理

}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/259552.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部