當前位置:編程學習大全網 - 編程語言 - 單片機交通燈c語言

單片機交通燈c語言

#include<reg51.h>

#define?uchar?unsigned?char

#define?uint?unsigned?int

sbit?RED_A=P3^0;?//東西向指示燈

sbit?YELLOW_A=P3^1;

sbit?GREEN_A=P3^2;

sbit?RED_B=P3^3;?//南北向指示燈

sbit?YELLOW_B=P3^4;

sbit?GREEN_B=P3^5;

sbit?KEY1=P1^0;

sbit?KEY2=P1^1;

sbit?KEY3=P1^2;

//延時倍數,閃爍次數,操作類型變量

uchar?Flash_Count=0,Operation_Type=1,LEDsng,LEDsns,LEDewg,LEDews,discnt;

uint?Time_Count=0,time;

uchar?ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};

void?displaysn()

{

LEDsng=((time-Time_Count)/20)%10;

LEDsns=((time-Time_Count)/20)/10;

LEDewg=0x10;

LEDews=0x10;

}

void?displayew()

{

LEDewg=((time-Time_Count)/20)%10;

LEDews=((time-Time_Count)/20)/10;

LEDsng=0x10;

LEDsns=0x10;

}

//定時器0?中斷函數

void?T0_INT()?interrupt?1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

switch(Operation_Type)

{

case?1:?//東西向綠燈與南北向紅燈亮

if((Time_Count%20)==0)displayew();

RED_A=0;YELLOW_A=0;GREEN_A=1;

RED_B=1;YELLOW_B=0;GREEN_B=0;

if(++Time_Count!=time)?return;

Time_Count=0;

Operation_Type=2;

break;

case?2:?//東西向黃燈開始閃爍,綠燈關閉

LEDewg=0x0;

LEDews=0x0;

if(++Time_Count!=8)?return;

Time_Count=0;

YELLOW_A=~YELLOW_A;GREEN_A=0;

if(++Flash_Count!=10)?return;?//閃爍

Flash_Count=0;

Operation_Type=3;

break;

case?3:?//東西向紅燈與南北向綠燈亮

if((Time_Count%20)==0)displaysn();

RED_A=1;YELLOW_A=0;GREEN_A=0;

RED_B=0;YELLOW_B=0;GREEN_B=1;

if(++Time_Count!=time)?return;

Time_Count=0;

Operation_Type=4;

break;

case?4:?//南北向黃燈開始閃爍,綠燈關閉

LEDsng=0x0;

LEDsns=0x0;

if(++Time_Count!=8)?return;

Time_Count=0;

YELLOW_B=~YELLOW_B;GREEN_A=0;

if(++Flash_Count!=10)?return;?//閃爍

Flash_Count=0;

Operation_Type=1;

break;

}

}

void?t1_isr()?interrupt?3

{

TR1=0;

TH1=(65536-3000)/256;

TL1=(65536-3000)%256;

TR1=1;

switch(discnt)

{

case?0:

P2=0x02;

P0=ledtab[LEDewg];

break;

case?1:

P2=0x01;

P0=ledtab[LEDews];

break;

case?2:

P2=0x08;

P0=ledtab[LEDsng];

break;

case?3:

P2=0x04;

P0=ledtab[LEDsns];

break;

default:discnt=0;break;

}

discnt++;

discnt&=0x03;

}

void?delay()

{

uint?i;

for(i=0;i<1000;i++);

}

//主程序

void?main()

{

TMOD=0x11;?//T0?方式1

EA=1;

ET0=1;

TR0=1;

TH1=(65536-3000)/256;

TL1=(65536-3000)%256;

TR1=1;

ET1=1;

time=600;

Time_Count=600;

Time_Count=0;

Operation_Type=1;

while(1)

{

if(KEY1==0) //按壹下加1S

{

delay();

if(KEY1==0)

{

while(KEY1==0);

TR0=0;

time+=20;

LEDsng=(time/20)%10;

LEDsns=(time/20)/10;

LEDewg=0x10;

LEDews=0x10;

}

}

if(KEY2==0) //按壹下減1S

{

delay();

if(KEY2==0)

{

while(KEY2==0);

TR0=0;

time-=20;

if(time==0)time=20;

LEDewg=(time/20)%10;

LEDews=(time/20)/10;

LEDsng=0x10;

LEDsns=0x10;

}

}

if(KEY3==0) //啟動

{

delay();

if(KEY3==0)

{

while(KEY2==0);

TR0=1;

Time_Count=0;

}

}

}

}

  • 上一篇:交通安全主題手抄報
  • 下一篇:C語言難麽?學習的時候有什麽註意事項?C語言能做大型軟件麽?有什麽更高級語言麽?
  • copyright 2024編程學習大全網