【proteus仿真】89C51单片机实现十字路口的交通灯控制系统代码

完成以下任务:运用89C51单片机十字路口的交通灯控制系统,四组灯(红黄绿)对应十字路口的四个方向,用两位的数码管显示剩余的时间。
仿真视频:

https://www.bilibili.com/video/BV1qg411o71b/

#define	uchar unsigned char
#define	uint unsigned int
#include<reg51.h>
sbit dx_LED1=P2^2;
sbit dx_LED2=P2^3;
sbit dx_Red=P1^3;
sbit dx_Yellow=P1^2;
sbit nb_LED1=P2^0;
sbit nb_LED2=P2^1;
sbit nb_Red=P1^7;
sbit nb_Yellow=P1^6;
bit Flag_nb_Yellow;
bit Flag_dx_Yellow; 
char Time_dx; 
char Time_nb;  
uchar dx=10,nb=10,dxL=5,nbL=5;     
uchar dx1=10,nb1=10,dxL1=3,nbL1=3; 
uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code a[9]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84,0x88};
void delay_ms(unsigned int x)
{
  unsigned int i,j;
  for(i=x;i>0;i--)
  for(j=110;j>0;j--);
}
void Display(void)
{
  char t1,t2;
  t1=Time_dx/10;
  t2=Time_dx%10;
  P0=table[t2];
  dx_LED2=1;
  delay_ms(1);
  dx_LED2=0;
  P0=table[t1];
  dx_LED1=1;
  delay_ms(1);
  dx_LED1=0;
  t1=Time_nb/10;
  t2=Time_nb%10;
  P0=table[t2];
  nb_LED2=1;
  delay_ms(1);
  nb_LED2=0;
  P0=table[t1];
  nb_LED1=1;
  delay_ms(1);
  nb_LED1=0;		
} 
void timer0(void)interrupt 1
{
 static uchar count;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 count++;
 if(count==10)
 {
  if(Flag_nb_Yellow==1)
   {nb_Yellow=~nb_Yellow;}
  if(Flag_dx_Yellow==1) 
   {dx_Yellow=~dx_Yellow;}
 }
 if(count==20)	
 {
  Time_dx--;
  Time_nb--;
	if(Flag_nb_Yellow==1)
	    {nb_Yellow=~nb_Yellow;}
	if(Flag_dx_Yellow==1)
	    {dx_Yellow=~dx_Yellow;}
  count=0;
 }	
}
void main(void)
{ 
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1; 
 ET0=1;
 TR0=1;
 Time_dx=3;	
 Time_nb=3;		
 while(Time_nb>=0||Time_dx>=0)
 { 
  Flag_dx_Yellow=0;
  P1=a[8];
  Display();
 }	
 while(1)			 
 {
  Time_dx=dx;	
  Time_nb=nb;		
  while(Time_nb>=4)
 { 
  Flag_dx_Yellow=0;
  P1=a[0];
  Display();
 }
  P1=0x00;
 while(Time_nb>=0)
 {
  Flag_nb_Yellow=1;
  dx_Red=1;     
  Display();
 }
 dx=dx1;
 nb=nb1;
 dxL=dxL1;
 nbL=nbL1;
 Time_dx=nb;
 Time_nb=dx;
 while(Time_dx>=4)
 {
  Flag_nb_Yellow=0; 		  
  P1=a[4];	
  Display();
 }
 P1=0X00;
 while(Time_dx>=0)
 {
  Flag_dx_Yellow=1;
  nb_Red=1;	
  Display();
 }
  dx=dx1;
  nb=nb1;
  dxL=dxL1;
  nbL=nbL1;
 } 
}

  • 1
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值