1. 基於51單片機控制交通燈的電路圖與C語言程序
思路:
紅燈停,綠燈行,黃燈閃爍提示行人紅綠燈即將切換。四個方向各有一個紅、黃、綠顯示和兩個數碼管。
東西道為人行道(20秒),南北道為車行道(60秒),黃燈延時最後三秒時,閃爍並切換。
三、硬體電路設計
此電中路設計採用AT89C51單片機,74LS47(數碼管驅動)74LS373(數碼管驅動輸出鎖存),8個數碼管顯示其延時值,四個紅、黃、綠指示燈。硬體設計關鍵在於,延時顯示時,要考慮到當個位數字顯示時,要確保十位數字顯示輸出的不變。因此,可加輸出鎖存器。在延時最後三秒時,要讓黃燈進行閃爍,並同時顯示數字(這一步在軟體設計上很關鍵)。
四、軟體程序(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;//關閉所有交通燈
}
}
}
}
詳情訪問:http://hi..com/hjiannew/
2. 基於單片機的交通燈系統設計 論文
這些方向都可以些,但是plc也可以
你覺得如
3. 如何用單片機AT89S51設計交通燈
這個完整的暫時沒有,不過思路可以介紹一下:
主程序主要就是處理哪個燈亮
子程序主要就是顯示。燈和數碼管
系統圖 就是一個晶元加幾個線很簡單的,如果有深度要求可以探討
4. 基於89C51單片機的交通燈設計報告
可能不是很符合你的要求,看一看能不能用。
功能:紅燈10秒,黃燈2秒。照著你的要求改一改。
看不清的話,留下郵箱,發給你。
#include"reg51.h"
#defineuintunsignedint
#defineucharunsignedchar
sbitla=P2^1;
sbitwela=P2^2;
sbitp1_0=P1^0;
ucharcodedat[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
ucharcodetem[]={0x01,0x02,0x04,0x08,0x10,0x20};
uinti;
ucharnum,st;
voiddelay(uint);
voidinit();
voidmain()
{
init();
la=1;
P0=0xc0;
la=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;
}
}
la=1;
P0=dat[num];
la=0;
delay(5);
}
}
}
//程序初始化
voidinit()
{
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毫秒
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=113;y>0;y--);
}
//外部中斷0
voidint0()interrupt0
{
P2=0x28;
st=0;
i=0;
num=0;
la=1;
P0=0xc0;
la=0;
delay(10);
P2=0x88;
}
//定時器T0精確1ms
voidtimer0()interrupt1
{
TH0=0XFC;
TL0=0X66;
i++;
}
5. 基於51單片機的紅綠燈設計
ORG 0000H
MOV DPTR ,#0B00H ;選中8155的命令寄存器,P2.2接CE端,p2.1接I/O
MOV A,#01H ;命令寄存器設為01H=000000001B D0=1A口輸出,D1=0B口輸入
MOVX @DPTR,A
LOOP :MOV DPTR,#0B01H
LED0:MOV A,#0FFH ;第一組燈點亮
MOVX @DPTR,A
MOV R4,#09H
LOOP0:ACALL DELAY
DJNZ R4,LOOP0
MOV A,#11011110B
MOVX @DPTR,A
ACALL DELAY
ACALL DELAY
ACALL DELAY
LED1:ACALL DELAY ;第二組燈點亮
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
MOV A,#0FFH
MOVX @DPTR,A
ACALL DELAY
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
MOV A,#0FFH
MOVX @DPTR,A
ACALL DELAY
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
LED2:MOV R5,#09H ;第三組燈點亮
LOOP1:ACALL DELAY
DJNZ R5,LOOP1
MOV A,#11110011B
MOVX @DPTR,A
ACALL DELAY
ACALL DELAY
ACALL DELAY
SJMP LOOP
DELAY:MOV R3,#02H
LOP3:MOV R1,#85H
LOP1:MOV R2,#0FAH
LOP2:DJNZ R2,LOP2
DJNZ R1,LOP1
DJNZ R3,LOP3
RET
END
6. 基於89s51單片機的交通燈控制設計的匯編程序
沒辦法,我只有一個C的,剛開始學單片機的時候,一直用的匯編,後來,轉學C了,覺得C要方便很多。網上應該都有啊,很多例子的呀
這樣吧,如果你需要,給我一個郵箱,我可以發到你郵箱,你可以參考參考,語言只是一種方式,最關鍵是思路和演算法。
7. 我准備用51單片機做交通燈設計選擇哪個單片機合適,而且需要做實物哪個更方便那
用ATMEGA8吧,免費的IDE,GCC編譯器!網上先去買個最小ATMEGA8系統,讓後改改,搞一搞就行了。
8. 如何運用51單片機設計一個交通燈系統
運用定時器,數碼管LED和8255A設計一個交通燈控制系統! 1.南北綠燈,東西紅燈,20秒 2.南北轉黃燈,東西紅燈,5秒 3.南北紅燈,東西綠燈,20秒 4.南北紅燈,東西轉黃燈,5秒 5.循環步驟1
9. 用單片機AT89C51設計一個交通燈系統
交通燈 有 C 語言,有匯編
發了