《逗比小憨憨51单片机Proteus仿真系列》第29期基于51单片机的形象化的交通灯设计
2025-10-09 来源:bilibili
源代码:
//关注逗比小憨憨
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit Time_Show_LED2=P2^5;
sbit Time_Show_LED1=P2^4;
sbit EW_LED2=P2^3;
sbit EW_LED1=P2^2;
sbit SN_LED2=P2^1;
sbit SN_LED1=P2^0;
sbit SN_Yellow=P1^6;
sbit EW_Yellow=P1^2;
sbit EW_Red=P1^3;
sbit SN_Red=P1^7;
sbit EW_ManGreen=P3^0;
sbit SN_ManGreen=P3^1;
sbit Special_LED=P2^6;
sbit Busy_LED=P2^7;
sbit Nomor_Button=P3^5;
sbit Busy_Btton=P3^6;
sbit Special_Btton=P3^7;
sbit Add_Button=P3^3;
sbit Reduces_Button=P3^4;
bit Flag_SN_Yellow;
bit Flag_EW_Yellow;
char Time_EW;
char Time_SN;
uchar EW=60,SN=40,EWL=19,SNL=19;
uchar EW1=60,SN1=40,EWL1=19,SNL1=19;
uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar code S[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};
void Delay(uchar a)
{
while(a--);
}
void Display(void)
{
char h,l;
h=Time_EW/10;
l=Time_EW%10;
P0=table[l];
EW_LED2=1;
Delay(2);
EW_LED2=0;
P0=table[h];
EW_LED1=1;
Delay(2);
EW_LED1=0;
h=Time_SN/10;
l=Time_SN%10;
P0=table[l];
SN_LED2=1;
Delay(2);
SN_LED2=0;
P0=table[h];
SN_LED1=1;
Delay(2);
SN_LED1=0;
h= EW1/10;
l= EW1%10;
P0=table[l];
Time_Show_LED1=1;
Delay(2);
Time_Show_LED1=0;
P0=table[h];
Time_Show_LED2=1;
Delay(2);
Time_Show_LED2=0;
}
void EXINT0(void)interrupt 0 using 1
{
EX0=0;
if(Add_Button==0)
{
EW1+=5;
SN1+=5;
if(EW1>=100)
{
EW1=99;
SN1=79;
}
}
if(Reduces_Button==0)
{
EW1-=5;
SN1-=5;
if(EW1<=40)
{
EW1=40;
SN1=20;
}
}
if(Nomor_Button==0)
{
EW1=60;
SN1=40;
EWL1=19;
SNL1=19;
Busy_LED=0;
Special_LED =0;
}
if(Busy_Btton==0)
{
EW1=45;
SN1=30;
EWL1=14;
SNL1=14;
Special_LED=0;
Busy_LED=1;
}
if(Special_Btton==0)
{
EW1=75;
SN1=55;
EWL1=19;
SNL1=19;
Busy_LED=0;
Special_LED =1;
}
EX0=1;
}
void doubixiaohanhan(void)interrupt 1 using 1
{
static uchar count;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==10)
{
if(Flag_SN_Yellow==1)
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1)
{EW_Yellow=~EW_Yellow;}
}
if(count==20)
{
Time_EW--;
Time_SN--;
if(Flag_SN_Yellow==1)
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1)
{EW_Yellow=~EW_Yellow;}
count=0;
}
}
void main(void)
{
Busy_LED=0;
Special_LED=0;
IT0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
EX0=1;
TR0=1;
while(1)
{
EW_ManGreen=0;
SN_ManGreen=1;
Flag_EW_Yellow=0;
Time_EW=EW;
Time_SN=SN;
while(Time_SN>=5)
{P1=S[0];
Display();}
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1;
EW_Red=1;
Display();
}
//关注逗比小憨憨
Flag_SN_Yellow=0;
Time_SN=SNL;
while(Time_SN>=5)
{P1=S[2];
Display();}
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1;
EW_Red=1;
Display();}
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
EW_ManGreen=~EW_ManGreen;
SN_ManGreen=~SN_ManGreen;
Flag_SN_Yellow=0;
Time_EW=SN;
Time_SN=EW;
while(Time_EW>=5)
{P1=S[4];
Display();}
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;
SN_Red=1;
Display();}
Flag_EW_Yellow=0;
Time_EW=EWL;
while(Time_EW>=5)
{P1=S[6];
Display();}
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;
SN_Red=1;
Display();}
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
}
}
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




