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%
帮助的人:102万
展开全部

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

#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;

   }

}

意法半导体(中国)投资有限公司
2023-06-12 广告
单片机复位电路原理通常包括以下几个主要步骤:1. 电平检测:单片机复位电路需要检测一个关键参数,即控制器的复位引脚是否处于高电平(2V)。如果复位引脚没有高电平,复位电路就会启动一个复位过程来清除单片机内部的错误状态并将其恢复到正常状态。2... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
qq911012555
2012-04-06
知道答主
回答量:6
采纳率:0%
帮助的人:9493
展开全部
#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.8万
展开全部
刚开始做毕业设计的时候我也是说很忙都不懂,现在再看好像简单很多啊,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzh6678
2009-12-16 · TA获得超过327个赞
知道小有建树答主
回答量:331
采纳率:0%
帮助的人:162万
展开全部
无语,现在学生都不学习,光来百度问了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
许柳骑碧蓉
2019-11-12 · TA获得超过3800个赞
知道大有可为答主
回答量:3108
采纳率:26%
帮助的人:193万
展开全部
交通灯我做过,这方面资料我有,有邮箱发给你,这个很好做的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式