找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3368|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机做的十字路口交通灯控制仿真

[复制链接]
跳转到指定楼层
楼主
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int


uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0xc9,0x5FF,0x40     };


void delay(uint x);
void display(uchar,uchar,uchar,uchar);
void scankeys();
void traffic();  


uchar num,num1,num2,shi1,ge1,shi2,ge2,
value1,value2,value3,value4,count1,
count2,flag1,flag2;



void mian()
{

     TMOD=0x01;
     TH0=(65536-45872)/256;
     TL0=(65536-45872)%256;
     EA=1;
     ET0=1;
     TR0=1;
     value1=15;
     value2=5;
     value3=10;
     value4=5;
     num1=value1;
     num2=value2+value1;
    P1=0x41;
     while(1)
{

    if(num==20)
{
    num=0;
    num1--;
    num2--;
    traffic();
    shi1=num1/10;
    ge1=num1%10;
    shi2=num2/10;
    ge2=num2%10;
}


scankeys();
display(shi1,ge1,shi2,ge2);
}
}


void traffic()
  {
     if(num1==0)
    {
      count1++;
      if(count1==1)
     {
       P1=0x42;
       num1=value2;
      }
      if(count1==2)
      {
       P1=0x14;
       num1=value3+value4;
      }
       if(count1==3)
      {
       P1=0x41;
       num1=value1;
       count1=0;

      }
}

if(num==0)
{
count2++;
if(count2==1)
{
    P1=0x14;
    num2=value3;
}
if(count2==2)
{
    P1=0x24;
    num2=value4;
}
if(count2==3)
{
    P1=0x41;
    num2=value1+value2;
    count2=0;
}

}

}      

void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2)
{
     uchar temp;
     temp=P2;
     P2=0xfe;
     P0=table[shi1];
     delay(5);
     P2=0xfd;
     P0=table[ge1];
     delay(5);
     P2=0xfd;
     P0=table[shi2];
     delay(5);
     P2=0xf7;
     P0=table[ge2];  
     delay(5);
}

void delay(uint x)
{

   uint i,j;
   for(i=x;i>0;i--)
   for(j=110;j>0;j--);
}


void scankeys()
{
    uchar temp,key;
    P3=0xfe;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
{
    delay(10);
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
{
    temp=P3;
    switch(temp)
{
    case 0xee:key=0;break;
    case 0xde:key=1;break;
    case 0xbe:key=2;break;
    case 0x7e:key=3;break;
}

while(temp!=0xf0)
{
     temp=P3;
     temp=temp&0xf0;
}

if(key==0)
{
    TR0=~TR0;
    flag1=~flag1;
    flag2=~flag2;
}


if(key==1&&flag1==0)
{

    TR0=0;
    P1=0x44;
    shi1=ge1=shi2=ge2=16;
}

if(key==2&&flag2==0)
{

   TR0=1;
   num=0;
   P1=0x41;
   num1=value1;
   num2=value2+value1;
   shi1=num/10;
   ge1=num1%10;
   shi2=num2/10;
   ge2=num2%10;
}

if(key==3&&P1==0x44)
{
   P1=0xff;
   delay(1000);
   P1=~P1;
   shi1=ge1=shi2=ge2=17;
   P1=0x44;
}

}
}
    P3=0xf7;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
{
    delay(10);
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
{
    temp=P3;
    switch(temp)
{
    case 0xe7:key=0;break;
    case 0xd7:key=1;break;
    case 0xb7:key=2;break;
    case 0x77:key=3;break;
}

while(temp!=0xf0)
{
     temp=P3;
     temp=temp&0xf0;
}

if(key==0&&P1==0x44)
{
    P1=0x41;
    shi1=ge1=shi2=ge2=18;
}
if(key==1&&P1==0x44)
{
    P1=0x41;
    shi1=ge1=shi2=ge2=18;
}
if(key==2&&P1==0x44)
{
    P1=0x41;
    shi1=ge1=shi2=ge2=18;
}
  if(key==3&&P1==0x44)
{
    P1=0x41;
    shi1=ge1=shi2=ge2=18;
}
}
}


P3=0xfd;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
{
    delay(10);
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
{
    temp=P3;
    switch(temp)
{
    case 0xeb:key=0;break;
    case 0xdb:key=1;break;
    case 0xbb:key=2;break;
    case 0x7b:key=3;break;
}

while(temp!=0xf0)
{
     temp=P3;
     temp=temp&0xf0;
}

if(key==0&&P1==0x44)
{
    num2=value3;
    if(num1!=159)
{
num2++;
value3=num2;
}

   shi2=num2/10;
   ge2=num2%10;
   num1=value3+value4;
   shi1=num1/10;
   ge1=num1%10;
}


if(key==1&&P1==0x44)
{  num2=value4;
    if(num1!=159)
{
num2++;
value4=num2;
}

   shi2=num2/10;
   ge2=num2%10;
   num1=value3+value4;
   shi1=num1/10;
   ge1=num1%10;
}


if(key==2&&P1==0x44&&value3>3)
{  num2=value3;
   num2--;
value3=num2;

   shi2=num2/10;
   ge2=num2%10;
   num2=value3+value4;
   shi1=num1/10;
   ge1=num1%10;
}



if(key==3&&P1==0x44&&value4>3)
{  num2=value4;
   num2--;
value4=num2;

   shi2=num2/10;
   ge2=num2%10;
   num1=value3+value4;
   shi1=num1/10;
   ge1=num1%10;
}

}
}


P3=0xf7;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
{
    delay(10);
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
{
    temp=P3;
    switch(temp)
{
    case 0xe7:key=0;break;
    case 0xd7:key=1;break;
    case 0xb7:key=2;break;
    case 0x77:key=3;break;
}
while(temp!=0xf0)
{
   temp=P3;
   temp=temp&0xf0;
}
if(key==0&&P1==0x44)
{
   P1=0x41;
   shi1=ge1=shi2=ge2=18;
}
if(key==1&&P1==0x44)
{
   P1=0x41;
   shi1=ge1=shi2=ge2=18;
}
if(key==2&&P1==0x44)
{
   P1=0x41;
   shi1=ge1=shi2=ge2=18;
}
if(key==3&&P1==0x44)
{
   P1=0x41;
   shi1=ge1=shi2=ge2=18;
}

}
}

}

void T0_time() interrupt 1
{
    TH0=(65536-45872)/256;
    TL0=(65536-45872)%256;
num++;
}

捕获.PNG (19.3 KB, 下载次数: 52)

捕获.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:527416 发表于 2019-6-14 16:37 | 只看该作者
请问信号灯是什么装置
回复

使用道具 举报

板凳
ID:194782 发表于 2019-6-17 21:21 | 只看该作者
好东西
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表