A. 單片機交通燈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;
}
}
}
}
B. 急求KEIL C51 紅綠燈程序!(用C語言!)
//12M晶振
//共陰數碼管
#include<reg51.h>
sbitred=P1^0;
sbitgreen=P1^1;
sbityellow=P1^2;
bitflag=1;
unsignedcharcodean[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharcodewei[]={0xfd,0xfe};
unsignedchartime=35;
voidmain()
{
voidshow_time();
voidshow_light();
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
red=0;
while(1)
{
show_time();
show_light();
}
}
voidshow_time()
{
voiddelay();
unsignedcharnum=time,i;
for(i=0;i<2;++i)
{
P2=wei[i];
P0=an[num%10];
delay();
基悉 P0=0x00;
num/=10;
}
}
voiddelay()
{
inti;
for(i=1000;i;i--);
}
voidshow_light()
{
if(flag)
{
if(!time)
{
flag=0;
red=1;
green=0;
time=35;
}
}
else
{
if(time>0&&time<4)
{
green=1;
yellow=0;
}
搏指乎 if(!time)
{
yellow=1;
red=0;
逗空 flag=1;
time=35;
}
}
}
voiddec_sec()interrupt1
{
staticcount=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++count==20)
{
count=0;
time--;
}
}
C. 用定時期控制一個交通燈亮c語言程序
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitRED_A=P0^0;//東西向指示燈
sbitYELLOW_A=P0^1;
sbitGREEN_A=P0^2;
sbitRED_B=P0^3;//南北向指示燈
sbitYELLOW_B=P0^4;
sbitGREEN_B=P0^5;
//延時倍數,閃爍次數,操作類型
變數
ucharTime_Count=0,Flash_Count=0,Operation_Type=1;
//定時器0中斷函數
voidT0_INT()interrupt1
{
TL0=-50000/256;
TH0=-50000%256;
switch(Operation_Type)
{
case1://東西向綠燈與南北向紅燈亮5s
RED_A=0;YELLOW_A=0;GREEN_A=1;
RED_B=1;YELLOW_B=0;GREEN_B=0;
if(++Time_Count!=100)return;//5s(100*50ms)切換
Time_Count=0;
Operation_Type=2;
break;
case則配2://東西向黃燈開始閃爍,綠燈關閉
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://東西向紅燈與南北向綠燈亮5s
RED_A=1;YELLOW_A=0;GREEN_A=0;
RED_B=0;YELLOW_B=0;GREEN_B=1;
if(++Time_Count!=100)return;//5s(100*50ms)切換
Time_Count=0;
Operation_Type=4;
break;
case4://南北向黃燈開始閃爍,綠燈關閉
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;
}
}
//主程序
voidmain()
{
TMOD=0x01;//T0方式1
IE=0x82;
TR0=1;
while(1);
}
D. 用C語言編程模擬交通路口(十字路口)紅綠燈的控制功能
http://hi..com/%BB۵%B1%C1%EC%BE%F8%B6%A5/blog/item/c851ae02e923357d3812bb18.html
這是發表在我的空間上的文章:「我們的系統斗扒仔設計說明書」
這此皮是我去年做過的一個系統,直接拷貝下來空汪之後應該可以直接運行,到時你按照自己的具體要求改動一下就好了。
E. c語言模擬交通燈控制
F. 用C語言編程模擬交通路口(十字路口)紅綠燈的控制功能
本系統的設計首先必須了解交通路燈的亮滅規律。設有一個十字路口,1、3 為南,北
方向, 2、4 為東,西方向,初始態為4 個路口的紅燈全亮。之後, 1、3 路口的綠燈亮,
2、4 路口的紅燈亮, 1、3 路口方向通車。延遲一段時間後, 1、3 路口的綠燈熄滅,而1、
3 路口的黃燈開始閃爍。閃爍若干次後, 1、3 路口的紅燈亮, 同時 2、4 路口的綠燈亮, 2、
4 路口方向開始通車。延遲一段時間後, 2、4 路口的綠燈熄滅,而黃燈開始閃爍。閃爍若
干次後,再切換到1、3 路口方向。之後,重復上述過程。對於各組燈的亮滅,我們運用的
是8255A 的輸入輸出功能。
G. c語言編寫十字路口交通燈的程序
這程序是自己寫的嗎?要是的話也有點太,,,,那啥了吧,就是有點亂,感覺不用sbit那麼多。不過自己寫的怎麼都比抄的好。
P0=table【I】
table數組從來沒看到。定義的數組是uchar codetable[]和uchar codeS[8,codes數組也沒看到。
H. C語言程序設計編寫一個交通紅綠燈的控制,各位高手幫幫忙急!
unsigned char counter;
sbit red_nb=P2^0;
......
void main()
{
TMOD=
TH0
TL0
ET0
TR0
while(1) //根據樓主所給,有4種狀態
{
state1;
state2;
state3;
state4;
}
}
void timer0() interrupt 1 //定時器0
{
TH0=0x3c;
TL0=0xb0;
counter++;
}
void state1() //控制南北紅燈亮,東西綠燈亮,30s
{
unsigned char temp = 30;
red_nb=1;
.....
green_dx=1;
while(1)
{
if( counter>19){counter=0;temp--} //每次counter=20,即1s,temp自減
if(temp) break; //當temp為0時,即30秒,退出狀態1,進入狀態2
}
}
沒經過測試,完全是5分誘惑不大。。
I. 用c語言或者c++寫交通信號燈模擬控制軟體設計
你這個程序,需要知道原理圖或模擬圖,結合電路才知道那些是用來控制什麼。不過,那些Pnn,應該是在程序的面定義的引腳,如P37,應該是用sbitP37=P3^7;這樣的語句定義過的,就是P3.7的引腳去控制什麼電路了。引腳是不是控制LED,用LED排列成的8字形的計時牌啊,就像數碼管似的。因交通燈的倒計時版就是由很多的LED燈排列而成的,並不是用現成的數碼管。
J. 如何用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;//關閉所有交通燈
}
}
}
}