基于51单片机交通灯设计
(仿真+程序)
功能介绍
具体功能:
1.四个数码管同时显示倒计时,LED作为红绿黄灯;
2.按键可以切换50秒/100秒红绿灯;
3.按键可以设置四路口全变红灯;
4.按键可以设置东西通行、南北禁止/南北通行、东西禁止;
演示视频:
基于51单片机交通灯设计—4个数码管,50/100秒切换,控制通行
添加图片注释,不超过 140 字(可选)
程序
/***微信公众号:木子单片机********/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^6;
sbit k2=P1^7;
sbit k3=P2^7;
sbit yellowled_nb=P1^4; //南北黄灯
sbit yellowled_dx=P1^1; //东西黄灯
uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar data dig; //位选
uchar data led; //偏移量
uchar data buf[4];
uchar data sec_dx=50;//东西数码指示值
uchar data sec_nb=50;//南北数码指示值
uchar data set_timedx=50;
uchar data set_timenb=50;//倒计时设置的键值保存
uchar data b;//定时器中断次数
bit time;//灯状态循环标志
bit int0_time;//中断强行标志
bit set;//调时切换键标志
uint i;
void delay(int ms)
{
uint j,k;
for(j=0;j<ms;j++)
for(k=0;k<124;k++);
}
void key()
{
if (k1!=1) //故障时禁止通行
{
while(k1!=1);
TR0=0;
for(i=0;i<3;i++)
{
yellowled_dx=1;
yellowled_nb=1;
delay(500);
yellowled_dx=0;
yellowled_nb=0;
delay(500);
}
P1=0xf6;
sec_nb=88;
sec_dx=88;
int0_time=1;
}
if(k2!=1&&set==1) //切换准行时间100s
{
while(k2!=1);
TR0=0;
set_timedx=99;
set_timenb=99;
sec_dx=99;
sec_nb=99;
set=0;
}
if(k2!=1&&set==0) //切换准行时间50s
{
while(k2!=1);
TR0=0;
set_timedx=50;
set_timenb=50;
sec_dx=50;
sec_nb=50;
set=1;
}
if(k3!=1) //复位
{
sec_dx=set_timedx;
sec_nb=set_timenb;
TR0=1;
}
}
void display()
{
buf[1]=sec_dx/10; //第1位 东西秒十位
buf[2]=sec_dx%10; //第2位 东西秒个位
buf[3]=sec_nb/10; //第3位 南北秒十位
buf[0]=sec_nb%10; //第4位 南北秒个位
P0=table[buf[led]];
delay(2); //先延时,提前显示一位
P2=dig;
dig=_crol_(dig,1);
led++;
if(led==4)
{
led=0;
dig=0xfe;
}
}
硬件设计
使用元器件:
单片机:AT89C51;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
添加图片注释,不超过 140 字(可选)
设计资料
01仿真图
本设计使用Proteus7.8和Proteus8.9两个版本设计!具体如图!
添加图片注释,不超过 140 字(可选)
02程序
本设计使用软件keil5版本编程设计!具体如图!
添加图片注释,不超过 140 字(可选)
03设计资料
资料获取请关注同名公众号,全部资料包括程序(含注释)、仿真源文件等。具体内容如下,全网最全!!
添加图片注释,不超过 140 字(可选)
资料获取请观看前面演示视频!
点赞分享一起学习成长。