基于89C51单片机的交通灯设计报告

哪位大哥大姐 能给一个 万急啊我的邮箱是907817574@qq.com
2024-11-22 05:59:43
推荐回答(1个)
回答1:

可能不是很符合你的要求,看一看能不能用。

功能:红灯10秒,黄灯2秒。 照着你的要求改一改。

看不清的话,留下邮箱,发给你。

#include"reg51.h"

#define uint  unsigned int

#define uchar unsigned char

sbit dula=P2^1;

sbit wela=P2^2;

sbit p1_0=P1^0;

uchar code dat[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

uchar code tem[]={0x01,0x02,0x04,0x08,0x10,0x20};

uint  i;

uchar num,st;

void delay(uint);

void init();

void main()

 init();

 dula=1;   

 P0=0xc0;

 dula=0;

 while(1) 

 {     

  if(i==1000)

  {

   i=0;

   num++;  

   if(st==0)

   {

    if(num==10)

    {

     num=0;

     st=1;

     P2=0x40;

    }

   }

   if(st==1)

   {

    if(num==2)

    {

     num=0;

     st=2;

     P2=0x30;

    }

   }

   if(st==2)

   {

    if(num==10)

    {

     num=0;

     st=3;

     P2=0x40;

    }

   }

   

   if(st==3)

   {

    if(num==2)

    {

     num=0;

     st=0;

     P2=0x88;

    }

   }

  dula=1;   

  P0=dat[num];

  dula=0;

  delay(5);

  }  

  }

}

//程序初始化

void init()

{

 EA=1;//开总中断允许

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

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

 TMOD=0X01;//设定T0为16位定时器

 ET0=1;//定时器T0中断允许

 TR0=1;//启动定时器T0

 TH0=0XFC;

 TL0=0X66;

 i=0;

 num=0;

 st=0;

 p1_0=1;

 wela=1;

 P0=0x01;

 wela=0;

 P0=0xff;

 P2=0x88;

 }

//延时约为Z毫秒

void delay(uint z)

{

 uint x,y;

 for(x=z;x>0;x--)

  for(y=113;y>0;y--);

 }

//外部中断0

void int0() interrupt 0

{

 P2=0x28;

 st=0;

 i=0;

 num=0;

 dula=1;

 P0=0xc0;

 dula=0;

 delay(10);

 P2=0x88;

 }

//定时器T0精确1ms

void timer0() interrupt 1

{

 TH0=0XFC;

 TL0=0X66;

 i++;

 }