c51单片机交通灯设计程序和电路图 20

1、信号灯受一个起动开关控制,当起动开关接通时,信号系统开始工作,且先南北红灯亮,东西绿灯亮。当起动开关断开时,所有信号灯都熄灭。2、南北红灯亮维持25S。在南北红灯亮的... 1、信号灯受一个起动开关控制,当起动开关接通时,信号系统开始工作,且先南北红灯亮,东西绿灯亮。当起动开关断开时,所有信号灯都熄灭。
2、南北红灯亮维持25S。在南北红灯亮的同时东西绿灯也亮,并维持20S。到20S时,东西绿灯闪烁,闪烁3S后熄灭。在东西绿灯熄灭时,东西黄灯亮,并维持2S。到2S时,东西黄灯熄,东西红灯亮。同时,南北红灯熄灭,南北绿灯亮。东西红灯亮维持30S。南北绿灯亮维持25S。然后闪烁3S,熄灭。同时南北黄灯亮,维持2S后熄灭,这时南北红灯亮,东西绿灯亮
3、要有倒计时数码显示。
我的邮箱 707379119@qq.com
展开
 我来答
乱月齐风
2009-12-17 · TA获得超过223个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:101万
展开全部

我写这个没有倒计时显示,那个显示的部分就交给你自己完成吧。。。要学习的,不能老是靠别人啊!!

#include<reg52.h>

#define uchar unsigned char

unsigned char code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

sbit choice=P0^0;

sbit sel1=P3^6;

sbit sel2=P3^7;

sbit key1=P3^2;

sbit key2=P3^3;

sbit m_green=P2^0;

sbit s_green=P2^1;

sbit m_red=P2^2;

sbit s_red=P2^3;

sbit m_yellow=P2^4;

sbit s_yellow=P2^5;

unsigned char state,i,flag,num=20 ;

unsigned int j;

void display();

void main()

{

 EA=1;

 ET0=1;

 EX0=1; //外部中断允许位

 EX1=1;

 IT0=0; //外部中断方式为电平

 IT1=0;

 TMOD=0x01;

 TH0=(65536-5000)/256;

 TL0=(65536-5000)%256;

 TR0=1;

 

 while(1)

 {

    

   if(j==10) 

        {

       j=0;

     flag++;

     if(flag==2) state=1;

     if(flag==3) state=2;

     if(flag==5) state=3;

     if(flag==6) {flag=0; state=0;}

    

        }

  switch(state)

   {

         case 0: 

       

       P2=0xf6;

       break;     

         case 1:  

        if(i%2==0){m_green=1; s_red=1;}              

       else { m_green=0; s_red=0 ;}

       m_yellow=0;

       s_yellow=0;  break;

         case 2: 

       P2=0xf9;

          break;

         case 3: 

             if(i%2==0){s_green=1; m_red=1;}              

       else { s_green=0; m_red=0 ;}

       m_yellow=0;

       s_yellow=0; 

          break;

   }

 }

}

void timer0() interrupt 1

{

 TH0=(65536-50000)/256;

 TL0=(65536-50000)%256;

 i++;

 if(i==20)

   {

    i=0;

  j++;  

   }  

}

void int0() interrupt 0

{         

   P2=0xf3;

}

void int1() interrupt 2

{

  unsigned char i;

  if(choice==0)  i=0;

      else i=1;

 switch(i)

  {

   case 0 : 

             P2=0xf6; 

    break;

  case 1:

       P2=0xf3;  

    break;

  default : 

     P2=0xf3;

     break;

   }

}

qq911012555
2012-04-06
知道答主
回答量:6
采纳率:0%
帮助的人:9477
展开全部
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>

sfr p0 = 0x80;
sfr p1 = 0x90;
sfr p2 = 0xA0;
sfr p3 = 0xb0;

sbit sw = p0^0;

sbit OE =P0^6;
sbit LE =P0^7; //74LS373锁存器控制端定义

char display[]={ 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99 }; //p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;

//函数声明 begin

void delay1(int count);
void delay_long(int number1,int number2);
void people_car_drive();

//函数声明end

//***********************//延时子程序

void delay1(int count)
{ int i;
for(i=count;i>0;i--)
{ ;}
}

void delay_long(int number1,int number2)
{
int a,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{ _nop_(); }
}

}

//**********************//延时子程序

void people_car_drive()
{
int p_1=2,i,j=9,p_2=6; //****************//行人通行时,延时20秒
p2=0x09; //南北红灯亮
p3=0x24; //东西绿灯亮

while(p_1-->0)
{ LE=1;
OE=0;
if(p_1==0){OE=1;} //当十位数减到0时,只显示个位数
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break; //减到3时退出循环,让其黄灯闪烁显示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}

}

//*******************************************************************************//

p2=0x12; //南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

//*****************以下是车辆通行时延时60秒//

p2=0x24; //南北绿灯亮
p3=0x09; //东西红灯亮

while(p_2-->0)
{ LE=1;
OE=0;
if(p_2==0){OE=1;} //当十位数减到0时,只显示个位数
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break; //减到2时退出循环
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}

p2=0x12; //南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1); //南北黄灯闪烁三秒完毕

}

void main() //主函数入口处
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00; //初始化各端口

{ while(1)
{
if(sw==0)
{ people_car_drive();}
else
{
p2=0x00;
p3=0x00; //关闭所有交通灯
}

}

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
holp1024
2009-12-17 · TA获得超过163个赞
知道答主
回答量:198
采纳率:0%
帮助的人:89.7万
展开全部
刚开始做毕业设计的时候我也是说很忙都不懂,现在再看好像简单很多啊,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzh6678
2009-12-16 · TA获得超过327个赞
知道小有建树答主
回答量:331
采纳率:0%
帮助的人:161万
展开全部
无语,现在学生都不学习,光来百度问了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
许柳骑碧蓉
2019-11-12 · TA获得超过3800个赞
知道大有可为答主
回答量:3108
采纳率:26%
帮助的人:191万
展开全部
交通灯我做过,这方面资料我有,有邮箱发给你,这个很好做的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式