當前位置:首頁 » 編程語言 » 單片機交通燈c語言

單片機交通燈c語言

發布時間: 2022-06-12 17:21:33

① c51單片機c語言交通燈的程序

Proteus模擬原理圖:

程序如下:

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar data buf[4];

uchar data sec_dx=20;//東西數默認

uchar data sec_nb=30;//南北默認值

uchar data set_timedx=20;

uchar data set_timenb=30;

int n;

uchar data b;//定時器中斷次數

sbit k1=P1^6;//定義5組開關

sbit k2=P1^7;

sbit k3=P2^7;

sbit k4=P3^0;

sbit k5=P3^1;

sbit Yellow_nb=P2^5; //南北黃燈標志

sbit Yellow_dx=P2^2; //東西黃燈標志

sbit Green_nb=P2^4;

sbit Green_dx=P2^1;

sbit Buzz=P3^7;

bit Buzzer_Indicate;

bit time=0;//燈狀態循環標志

bit set=1;//調時方向切換鍵標志

uchar code table[11]={ //共陰極字型碼

0x3f, //--0

0x06, //--1

0x5b, //--2

0x4f, //--3

0x66, //--4

0x6d, //--5

0x7d, //--6

0x07, //--7

0x7f, //--8

0x6f, //--9

0x00 //--NULL

};

//函數的聲明部分

void delay(int ms);//延時子程序

void key();//按鍵掃描子程序

void key_to1();//鍵處理子程序

void key_to2();

void key_to3();

void display();//顯示子程序

void logo(); //開機LOGO

void Buzzer();

//主程序

void main()

{

TMOD=0X01;

TH0=0XD8;

TL0=0XF0;

EA=1;

ET0=1;

TR0=1;

EX0=1;

EX1=1;

logo();

P2=0Xc3;// 開始默認狀態,東西綠燈,南北黃燈

sec_nb=sec_dx+5;

while(1)

{

key(); //調用按鍵掃描程序

display(); //調用顯示程序

Buzzer();

}

}

//函數的定義部分

void key() //按鍵掃描子程序

{

if(k1!=1)

{

delay(10);

if(k1!=1)

{

while(k1!=1)

{

key_to1();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k2!=1)

{

delay(10);

if(k2!=1)

{

while(k2!=1)

{

key_to2();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k3!=1)

{

TR0=1; //啟動定時器

Buzzer_Indicate=0;

sec_nb=set_timenb; //從中斷回復,仍顯示設置過的數值

sec_dx=set_timedx;

if(time==0)

{ P2=0X99;sec_nb=sec_dx+5; }

else { P2=0xC3;sec_dx=sec_nb+5; }

}

if(k4!=1)

{

delay(5);

if(k4!=1)

{

while(k4!=1);

set=!set;

}

}

if(k5!=1)

{

delay(5);

if(k5!=1)

{

while(k5!=1)

key_to3();

}

}

}

void display() //顯示子程序

{

buf[1]=sec_dx/10; //第1位 東西秒十位

buf[2]=sec_dx%10; //第2位 東西秒個位

buf[3]=sec_nb/10; //第3位 南北秒十位

buf[0]=sec_nb%10; //第4位 南北秒個位

P1=0xff; // 初始燈為滅的

P0=0x00;

P1=0xfe; //片選LCD1

P0=table[buf[1]];

delay(1);

P1=0xff;

P0=0x00;

P1=0xfd; //片選LCD2

P0=table[buf[2]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xfb; //片選LCD3

P0=table[buf[3]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xf7;

P0=table[buf[0]]; //片選LCD4

delay(1);

}

void time0(void) interrupt 1 using 1 //定時中斷子程序

{

b++;

if(b==19) // 定時器中斷次數

{ b=0;

sec_dx--;

sec_nb--;

if(sec_nb<=5&&time==0) //東西黃燈閃

{ Green_dx=0;Yellow_dx=!Yellow_dx;}

if(sec_dx<=5&&time==1) //南北黃燈閃

{ Green_nb=0;Yellow_nb=!Yellow_nb;}

if(sec_dx==0&&sec_nb==5)

sec_dx=5;

if(sec_nb==0&&sec_dx==5)

sec_nb=5;

if(time==0&&sec_nb==0)

{ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}

if(time==1&&sec_dx==0)

{P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}

}

}

void key_to1() //鍵盤處理子程序之+

{

TR0=0; //關定時器

if(set==0)

set_timenb++; //南北加1S

else

set_timedx++; //東西加1S

if(set_timenb==100)

set_timenb=1;

if( set_timedx==100)

set_timedx=1; //加到100置1

sec_nb=set_timenb ; //設置的數值賦給東西南北

sec_dx=set_timedx;

}

void key_to2() //鍵盤處理子程序之-

{

TR0=0; //關定時器

if(set==0)

set_timenb--; //南北減1S

else

set_timedx--; //東西減1S

if(set_timenb==0)

set_timenb=99;

if( set_timedx==0 )

set_timedx=99; //減到1重置99

sec_nb=set_timenb ; //設置的數值賦給東西南北

sec_dx=set_timedx;

}

void key_to3() //鍵盤處理之緊急車通行

{

TR0=0;

P2=0Xc9;

sec_dx=00;

sec_nb=00;

Buzzer_Indicate=1;

}

void int0(void) interrupt 0 using 1 //只允許東西通行

{

TR0=0;

P2=0Xc3;

Buzzer_Indicate=0;

sec_dx=00;

sec_nb=00;

}

void int1(void) interrupt 2 using 1 //只允許南北通行

{

TR0=0;

P2=0X99;

Buzzer_Indicate=0;

sec_nb=00;

sec_dx=00;

}

void logo()//開機的Logo "- - - -"

{ for(n=0;n<50;n++)

{

P0=0x40;

P1=0xfe;

delay(1);

P1=0xfd;

delay(1);

P1=0Xfb;

delay(1);

P1=0Xf7;

delay(1);

P1 = 0xff;

}

}

void Buzzer()

{

if(Buzzer_Indicate==1)

Buzz=!Buzz;

else Buzz=0;

}

void delay(int ms) //延時子程序

{

uint j,k;

for(j=0;j<ms;j++)

for(k=0;k<124;k++);

}


② 交通燈 C語言 單片機。中斷函數問題

參考《51單片機C語言創新教程》溫子祺等著。

源碼轉自:《51單片機C語言創新教程》。

/*實驗名稱:交通燈實驗

*描述:交通燈實驗要求紅燈亮15秒,綠燈亮10秒,黃燈亮5秒,

當紅燈切換為綠燈或者綠燈切換為紅燈,

要實現燈閃爍。紅燈、綠燈、黃燈的點亮持續時間可以通過串口來修改,

並在下一個循環中更新數值。

*作者:溫子祺

*修改日期:2010/5/4

*說明:代碼注釋與講解詳見《51單片機C語言創新教程》溫子祺等著,北京航空航天大學出版社

*/

#include"stc.h"

typedefunsignedcharUINT8;

typedefunsignedint UINT16;

typedefunsignedlongUINT32;

typedefcharINT8;

typedefintINT16;

typedeflongINT32;

#defineTIMER0_INITIAL_VALUE5000

#defineHIGH1

#defineLOW0

#defineON1

#defineOFF0

#defineSEG_PORTP0

#defineLS164_DATA(x){if((x))P0_4=1;elseP0_4=0;}

#defineLS164_CLK(x){if((x))P0_5=1;elseP0_5=0;}

#defineNORTH_R_LIGHT(x){if((x))P2_0=0;elseP2_0=1;}

#defineNORTH_Y_LIGHT(x){if((x))P2_1=0;elseP2_1=1;}

#defineNORTH_G_LIGHT(x){if((x))P2_2=0;elseP2_2=1;}

#defineSOUTH_R_LIGHT(x){if((x))P2_3=0;elseP2_3=1;}

#defineSOUTH_Y_LIGHT(x){if((x))P2_4=0;elseP2_4=1;}

#defineSOUTH_G_LIGHT(x){if((x))P2_5=0;elseP2_5=1;}

#defineTRAFFIC_STATUS_10

#defineTRAFFIC_STATUS_21

#defineTRAFFIC_STATUS_32

#defineUART_MARKER0xEE

UINT8Timer0IRQEvent=0;

UINT8Time1SecEvent=0;

UINT8Time500MsEvent=0;

UINT8TimeCount=0;

UINT8SegCurPosition=0;

UINT8LightOrgCount[4]={15,5,15,5};

UINT8LightCurCount[4]={15,5,15,5};

UINT8TrafficLightStatus=0;

codeUINT8SegCode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

UINT8SegBuf[4]={0};

codeUINT8SegPosition[4]={0x07,0x0b,0x0d,0x0e};

typedefstruct_LIGHT_VAL

{

UINT8Head;

UINT8val[4];

}LIGHT_VAL;

typedefunion_LIGHT_VAL_EX

{

LIGHT_VALlv;

UINT8p[5];

}LIGHT_VAL_EX;

voidLS164Send(UINT8byte)

{

UINT8j;

for(j=0;j<=7;j++)

{

if(byte&(1<<(7-j)))

{

LS164_DATA(HIGH);

}

else

{

LS164_DATA(LOW);

}

LS164_CLK(LOW);

LS164_CLK(HIGH);

}

}

voidRefreshDisplayBuf(UINT8s1) //刷新顯示緩存

{

SegBuf[0]=s1%10;

SegBuf[1]=s1/10;

SegBuf[2]=s1%10;

SegBuf[3]=s1/10;

}

voidSegDisplay(void)

{

UINT8t;

t=SegCode[SegBuf[SegCurPosition]];

SEG_PORT|=0x0f;

LS164Send(t);

SEG_PORT=(SEG_PORT|0x0f)&SegPosition[SegCurPosition];

if(++SegCurPosition>=4)

{

SegCurPosition=0;

}

}

voidTimerInit(void)

{

TH1=0;

TL1=0;

TH0=(65536-TIMER0_INITIAL_VALUE)/256;

TL0=(65536-TIMER0_INITIAL_VALUE)%256;//定時1MS

TMOD=0x51; /*01010001T1計數,T0定時*/

}

voidTimer0Start(void)

{

TR0=1; //啟動計時器1

ET0=1;

}

voidTimer0Stop(void)

{

TR0=0; //啟動計時器1

ET0=0;

}

voidPortInit(void)

{

P0=P1=P2=P3=0xFF;

}

voidUartInit(void)

{

SCON=0x40;

T2CON=0x34;

RCAP2L=0xD9;

RCAP2H=0xFF;

REN=1;

ES=1;

}

voidUartSendByte(UINT8byte)

{

SBUF=byte;

while(TI==0);

TI=0;

}

voidUartPrintfString(INT8*str)

{

while(str&&*str)

{

UartSendByte(*str++);

}

}

voidmain(void)

{

UINT8i=0;

PortInit();

TimerInit();

Timer0Start();

UartInit();

RefreshDisplayBuf(LightCurCount[0]);

EA=1;

NORTH_R_LIGHT(ON);

SOUTH_G_LIGHT(ON);

while(1)

{

if(Timer0IRQEvent)

{

Timer0IRQEvent=0;

TimeCount++;

if(TimeCount>=200)

{

TimeCount=0;

if(LightCurCount[0])

{

TrafficLightStatus=0;

}

elseif(LightCurCount[1])

{

TrafficLightStatus=1;

}

elseif(LightCurCount[2])

{

TrafficLightStatus=2;

}

elseif(LightCurCount[3])

{

TrafficLightStatus=3;

}

else

{

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

{

LightCurCount[i]=LightOrgCount[i];

}

TrafficLightStatus=0;

}

switch(TrafficLightStatus)

{

case0:

{

NORTH_R_LIGHT(ON);

SOUTH_R_LIGHT(OFF);

NORTH_G_LIGHT(OFF);

SOUTH_G_LIGHT(ON);

NORTH_Y_LIGHT(OFF);

SOUTH_Y_LIGHT(OFF);

}

break;

case1:

{

if(LightCurCount[1]%2)

{

NORTH_R_LIGHT(ON);

SOUTH_G_LIGHT(ON);

}

else

{

NORTH_R_LIGHT(OFF);

SOUTH_G_LIGHT(OFF);

}

NORTH_Y_LIGHT(ON);

SOUTH_Y_LIGHT(ON);

}

break;

case2:

{

NORTH_R_LIGHT(OFF);

SOUTH_R_LIGHT(ON);

NORTH_G_LIGHT(ON);

SOUTH_G_LIGHT(OFF);

NORTH_Y_LIGHT(OFF);

SOUTH_Y_LIGHT(OFF);

}

break;

case3:

{

if(LightCurCount[3]%2)

{

NORTH_G_LIGHT(ON);

SOUTH_R_LIGHT(ON);

}

else

{

NORTH_G_LIGHT(OFF);

SOUTH_R_LIGHT(OFF);

}

NORTH_Y_LIGHT(ON);

SOUTH_Y_LIGHT(ON);

}

break;

default:break;

}

RefreshDisplayBuf(LightCurCount[TrafficLightStatus]);

LightCurCount[TrafficLightStatus]--;

}

SegDisplay();

}

}

}

voidUartIRQ(void)interrupt4

{

staticUINT8cnt=0;

staticLIGHT_VAL_EXLightValEx;

if(RI)

{

RI=0;

LightValEx.p[cnt++]=SBUF;

if(LightValEx.lv.Head==UART_MARKER)

{

if(cnt>=5)

{

for(cnt=1;cnt<5;cnt++)

{

LightOrgCount[cnt-1]=LightValEx.lv.val[cnt];

LightCurCount[cnt-1]=LightValEx.lv.val[cnt];

}

cnt=0;

UartPrintfString("設置交通燈完成 ");

}

}

else

{

cnt=0;

}

}

}

voidTimer0IRQ(void)interrupt1

{

ET0 =0;

TH0=(65536-TIMER0_INITIAL_VALUE)/256;

TL0=(65536-TIMER0_INITIAL_VALUE)%256;//定時1MS

Timer0IRQEvent=1;

ET0 =1;

}

=====================================================================

坐等拿分!

③ 52單片機c語言程序怎麼寫交通燈控制外部中斷延時10秒,黃燈閃爍5次

摘要 北南:P1.0,p2.0----紅,p1.1,p1.7----綠,p1.2,p1.6----黃;西東:p1.3,p2.3-----紅

④ 單片機設計倒計時交通燈(c語言程序)設計要求如下;

樓主,我感覺我們認識

⑤ 單片機c語言寫簡單交通燈

#include<reg51.h>
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
int a = 0;
int b = 10;
int c = 0;
int d = 5;

void timer0(void) interrupt 1
{
TH0 = 15536/256;
TL0 = 15536%256;
++a;
if(a==20)
{
a=0;
--b;
if(b==0)
{
b=10;
++c;
}

if(c==0)
{
P10 = 1;//紅燈亮的埠
P11 = 0;
P12 = 0;
}

if(c==1)
{
P11 = 1;//綠燈亮的埠
P10 = 0;
P12 = 0;
}

if(c == 2)
{
b = d;//黃燈亮,顯示為5~0
--d;//////////////////////////這里
P12 = 1;
P11 = 0;
P10 = 0;
}

if(c==3)
{
c=0;
}
}

}
void show()
{
P2 = (b/10)*16 + b%10;
}
void main()
{

TMOD = 0x01;
P10 = 0;
P11 = 0;
P12 = 0;
TH0 = 15536/256;
TL0 = 15536%256;
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
show();
}
}

⑥ 單片機交通燈c語言

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitRED_A=P3^0;//東西向指示燈

sbitYELLOW_A=P3^1;

sbitGREEN_A=P3^2;

sbitRED_B=P3^3;//南北向指示燈

sbitYELLOW_B=P3^4;

sbitGREEN_B=P3^5;

sbitKEY1=P1^0;

sbitKEY2=P1^1;

sbitKEY3=P1^2;

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

ucharFlash_Count=0,Operation_Type=1,LEDsng,LEDsns,LEDewg,LEDews,discnt;

uintTime_Count=0,time;

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

voiddisplaysn()

{

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

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

LEDewg=0x10;

LEDews=0x10;

}

voiddisplayew()

{

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

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

LEDsng=0x10;

LEDsns=0x10;

}

//定時器0中斷函數

voidT0_INT()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

switch(Operation_Type)

{

case1://東西向綠燈與南北向紅燈亮

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;

case2://東西向黃燈開始閃爍,綠燈關閉

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;

case3://東西向紅燈與南北向綠燈亮

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;

case4://南北向黃燈開始閃爍,綠燈關閉

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;

}

}

voidt1_isr()interrupt3

{

TR1=0;

TH1=(65536-3000)/256;

TL1=(65536-3000)%256;

TR1=1;

switch(discnt)

{

case0:

P2=0x02;

P0=ledtab[LEDewg];

break;

case1:

P2=0x01;

P0=ledtab[LEDews];

break;

case2:

P2=0x08;

P0=ledtab[LEDsng];

break;

case3:

P2=0x04;

P0=ledtab[LEDsns];

break;

default:discnt=0;break;

}

discnt++;

discnt&=0x03;

}

voiddelay()

{

uinti;

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

}

//主程序

voidmain()

{

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語言編程在單片機上做交通信號燈

硬體電路設計

此電中路設計採用AT89C51單片機,74LS47(數碼管驅動)74LS373(數碼管驅動輸出鎖存),8個數碼管顯示其延時值,四個紅、黃、綠指示燈。硬體設計關鍵在於,延時顯示時,要考慮到當個位數字顯示時,要確保十位數字顯示輸出的不變。因此,可加輸出鎖存器。在延時最後三秒時,要讓黃燈進行閃爍,並同時顯示數字(這一步在軟體設計上很關鍵)。

(1)電路連接圖:

三、軟體程序(C語言)

以下是整個設計的軟體程序,直接可以編譯成*。Hex代碼。通過以上電路,下載到單片機,可直接運行。

//*****************************//
//程序名:十字路口交通燈控制
//編寫人:黃庭劍
//初寫時間:2009年1月2日
//程序功能:南北為車行道,延時60秒;東西方向為人行道,延時20秒,且在最後3秒黃燈顯示2秒鍾再實現切換.
//CPU說明:AT89C51型單片機;24MHZ晶體振盪器
//完成時間:2009年1月6日
//*****************************//
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
sfrp0=0x80;
sfrp1=0x90;
sfrp2=0xA0;
sfrp3=0xb0;//這部分內容其實在「#include<reg51.h>」里已經有,但裡面定義的必須區分大小寫,在這里,因為我程序採用的是小寫,reg51.h里對各個埠與寄存器的定義都是大寫,所以在編譯連接時,會報錯,所以,在本設計程序里,我只用到了埠,在這里也就只定義了四個,而沒有去改reg51.h裡面的內容。其實兩者是一樣的。
sbitsw=p0^0;
sbitOE=P0^6;
sbitLE=P0^7;//74LS373鎖存器控制端定義
chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的數碼管時間顯示調用,利用74L74BCD碼,8位驅動輸出;
//函數聲明begin
voiddelay1(intcount);
voiddelay_long(intnumber1,intnumber2);
voidpeople_car_drive();
//函數聲明end
//***********************//延時子程序
voiddelay1(intcount)
{inti;
for(i=count;i>0;i--)
{;}
}
voiddelay_long(intnumber1,intnumber2)
{
inta,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{_nop_();}
}

}
//**********************//延時子程序
voidpeople_car_drive()
{
intp_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);//南北黃燈閃爍三秒完畢
}

voidmain()//主函數入口處
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00;//初始化各埠
{while(1)
{
if(sw==0)
{people_car_drive();}
else
{
p2=0x00;
p3=0x00;//關閉所有交通燈
}
}

}
}

⑧ 求助一個單片機設計的交通燈程序,用C語言編寫。

#include <reg52.h>
#define uint unsigned int
sbit red1=P1^2;
sbit yel1=P1^1;
sbit gre1=P1^7;
sbit red2=P1^4;
sbit yel2=P1^5;
sbit gre2=P1^6;//假設燈亮為低電平
sbit key1=P0^2;
sbit key2=P0^3;
uint tt;
void delay(uint z)
{
uchar x;
while(z--)
for(x=110;x>0;x--);
}
void key_1() //按鍵1
{
if(key1==0)
{
delay(10);
if(key1==0)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
tt=0;
while(!key1);
}

}
}
void key_2()///按鍵2
{
if(key2==0)
{
delay(10);
if(key2==0)
{
TR0=0;
P1=0xff;
while(!key2);
}

}
}
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
key_1();
key_2();

}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==1)
{
red1=0;gre2=0;// 紅燈1綠燈2亮
}
if(tt==501)
{
red1=1;gre2=1; //紅燈1綠燈2關
red1=0;yel2=0;//紅燈1黃燈2亮
}
if(tt==601)
{
red1=1;yel2=1;//紅燈1黃燈2關
gre1=0;red2=0;//綠燈1紅燈2亮
}
if(tt==701)
{
tt=0;
gre1=1;red2=1;//綠燈1紅燈2關
}
}

⑨ 單片機模擬交通燈C語言例子,看不懂,求解釋

問題1:Flash_count每加1黃燈的引腳狀態取反一次,引腳高低電平取反兩次是閃一下。(原來是滅,取反,亮了,再取反,滅了,這才完成了一次閃爍。)因此Flash_count每加2才是閃爍一次。
問題2:1、return有函數返回數值作用,在函數末尾添加return (數字)可以使函數在被調用的地方返回一個值。例:uchar hanshu(){return 99;} void main(){num=hanshu();}則num值為1.
2、return有完全結束循環的作用,在循環中插入return可以徹底結束循環。
例:while(1){if(i==0)return; (後文省略)}如果i==1,則一直死循環,當i==0時跳出循環。
3、return可以結束函數。
例:void hanshu(){ return; while(1); }這個子函數不會陷入死循環,while(1)根本執行不到。
您的函數中到達return後其實子函數Light()也結束了,其實跳出了該函數,返回到main中了,
只不過由於main中的while的作用再次重頭進入了而已。
4、return在switch語句中還有終止查找的作用。這個您網路switch就可以了

⑩ 基於51單片機C語言交通燈系統

思路挺簡單的 資源用到的也就一個定時器/計數器,程序寫起來有點煩,所以還是繞過吧。。。

熱點內容
ip提取源碼 發布:2024-05-04 05:01:42 瀏覽:761
駕校報名了密碼是什麼 發布:2024-05-04 04:49:02 瀏覽:608
安卓加密的rar軟體 發布:2024-05-04 04:18:30 瀏覽:605
聚會編程題 發布:2024-05-04 04:02:41 瀏覽:404
我的世界伺服器自動掃地 發布:2024-05-04 03:48:41 瀏覽:612
4500能配什麼電腦配置 發布:2024-05-04 03:22:29 瀏覽:592
阿U編程課堂 發布:2024-05-04 03:10:23 瀏覽:618
上傳音樂搜音樂 發布:2024-05-04 03:10:23 瀏覽:601
編譯器工作負載 發布:2024-05-04 03:06:09 瀏覽:422
摩斯編譯 發布:2024-05-04 03:06:00 瀏覽:613