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

單片機c語言交通燈

發布時間: 2022-03-01 17:08:59

㈠ 關於單片機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語言編程,單片機控制交通燈是不是很難啊

我們現在就在學這個,你可以去找找郭天祥的教學視頻,c語言要比匯編語言容易,就是你所用到的器件你要查找相關資料比如時序啊管腳什麼.代碼什麼的就在一些原有的常式修改就可以,

㈣ 51單片機C語言程序:交通燈系統

這種問題一般沒人會的,像 CSDN、程序員網 等等有類似的設計,你可以去看看

㈤ 基於51單片機的交通燈c語言程序,麻煩各位大神看看,謝謝

有程序的流程圖嗎

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

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

㈦ 單片機交通燈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;

}

}

}

}

㈧ 80c51單片機交通燈,要求按鍵中斷綠燈,紅燈5秒後亮起,c語言,帶注釋,程序和模擬電路圖都要。

本身是入門級的單片機應用,但是題意不明,沒法動手:

1.是否有規定使用的引腳?使用的晶振是否有要求?延時計時使用定時器還是軟體延時?
2.未觸發中斷時亮燈情況未說明
3.觸發中斷後是綠燈一直常亮,5s後紅燈亮起,還是觸發中斷後是綠燈亮5s→綠燈熄滅→紅燈亮起?

㈨ 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語言的

匯編語言,C語言都有。模擬,你要什麼的,怎麼給你

熱點內容
資料庫數據的一致性 發布:2025-01-11 17:30:45 瀏覽:707
手機怎麼設置手勢安卓 發布:2025-01-11 17:15:54 瀏覽:964
威能壁掛爐解壓閥 發布:2025-01-11 17:15:53 瀏覽:559
突破伺服器ip限制 發布:2025-01-11 17:11:23 瀏覽:818
支付寶上傳憑證 發布:2025-01-11 17:10:29 瀏覽:876
怎麼打開行李箱的密碼鎖 發布:2025-01-11 17:09:51 瀏覽:593
蘋果怎麼刪除id賬號和密碼 發布:2025-01-11 17:09:50 瀏覽:784
7z解壓很慢 發布:2025-01-11 16:51:23 瀏覽:942
電腦改文檔伺服器 發布:2025-01-11 16:41:14 瀏覽:870
編譯匯編語言實例 發布:2025-01-11 16:36:55 瀏覽:671