交通燈C語言程序_第1頁
交通燈C語言程序_第2頁
交通燈C語言程序_第3頁
交通燈C語言程序_第4頁
交通燈C語言程序_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar data buf4;uchar data sec_dx=20; /東西數(shù)默認uchar data sec_nb=30;/南北默認值uchar data set_timedx=20;/設置東西方向的時間uchar data set_timenb=30;/設置南北方向的時間int n;uchar data countt0;/定時器0中斷次數(shù)/定義5組開關sbit k4=P37; /切換方向sbit k1=P35

2、;/時間加sbit k2=P36;/時間減sbit k3=P34;/確認sbit k5=P31;/禁止/ P32/只允許東西方向通行,中斷0/ P33/只允許南北方向通行,中斷1sbit Red_nb=P26;/南北紅燈標志sbit Yellow_nb=P25;/南北黃燈標志sbit Green_nb=P24; /南北綠燈標志sbit Red_dx=P23;/東西紅燈標志sbit Yellow_dx=P22;/東西黃燈標志sbit Green_dx=P21;/東西綠燈標志sbit Buzz=P30;bit Buzzer_Indicate;bit set=0;/調(diào)時方向切換鍵標志 =1時,南北,

3、=0時,東西bit dx_nb=0;/東西南北控制位bit shanruo=0;uchar code table11=/共陰極字型碼0x3f, /-00x06, /-10x5b, /-20x4f, /-30x66, /-40x6d, /-50x7d, /-60x07, /-70x7f, /-80x6f, /-90x00 /-NULL;/函數(shù)的聲明部分void delay(int ms);/延時子程序void key();/按鍵掃描子程序void key_to1();/鍵處理子程序void key_to2();void key_to3();void display();/顯示子程序void lo

4、go(); /開機LOGOvoid Buzzer();/主程序void main()TMOD=0X11; /定時器設置TH0=0X3C;/定時器0置初值 0.05STL0=0XB0;EA=1;/開總中斷ET0=1;/定時器0中斷開啟TR0=1;/啟動定時0EX0=1;/開外部中斷0EX1=1;/開外部中斷1 logo();P2=0Xc3;/ 開始默認狀態(tài),東西綠燈,南北黃燈 sec_nb=sec_dx+5; /默認南北通行時間比東西多5秒while(1) key(); /調(diào)用按鍵掃描程序display(); /調(diào)用顯示程序Buzzer();/函數(shù)的定義部分void key(void)/按鍵掃描

5、子程序 if(k1!=1)/當K1(時間加)按下時display(); /調(diào)用顯示,用于延時消抖if(k1!=1) TR0=0; /關定時器shanruo=0;P2=0x00;if(set=0)set_timedx+; /南北加1Selseset_timenb+; /東西加1Sif(set_timenb=100)set_timenb=1;if(set_timedx=100)set_timedx=1; /加到100置1sec_nb=set_timenb ; /設置的數(shù)值賦給東西南北sec_dx=set_timedx;/ do display();while(k1!=1);if(k2!=1)/當K

6、2(時間減)按鍵按下時display(); /調(diào)用顯示,用于延時消抖if(k2!=1) TR0=0; /關定時器shanruo=0;P2=0x00;if(set=0)set_timedx-; /南北減1Selseset_timenb-; /東西減1Sif(set_timenb=0)set_timenb=99;if(set_timedx=0 )set_timedx=99; /減到1重置99sec_nb=set_timenb ; /設置的數(shù)值賦給東西南北sec_dx=set_timedx; do display(); /調(diào)用顯示,用于延時while(k2!=1);if(k3!=1)/當K3(確認)

7、鍵按下時display(); /調(diào)用顯示,用于延時消抖if(k3!=1)TR0=1; /啟動定時器Buzzer_Indicate=0;sec_nb=set_timenb;/從中斷回復,仍顯示設置過的數(shù)值sec_dx=set_timedx;/顯示設置過的時間if(set=0)/時間倒時到0時 P2=0X00;/東西綠燈,南北紅燈Green_dx=1;Red_nb=1;sec_nb=sec_dx+5; /回到初值else P2=0x00;/南北綠燈,東西紅燈Green_nb=1;Red_dx=1;sec_dx=sec_nb+5; if(k4!=1)/當K4(切換)鍵按下 display(); /調(diào)

8、用顯示,用于延時消抖if(k4!=1) TR0=0;set=!set;/取反set標志位,以切換調(diào)節(jié)方向dx_nb=set;dodisplay(); while(k4!=1);if(k5!=1)/當K5(禁止)鍵按下時 display(); /調(diào)用顯示,用于延時消抖 if(k5!=1) TR0=0;/關定時器P2=0x00;Red_dx=1;Red_nb=1;/全部置紅燈sec_dx=00;/四個方向的時間都為00sec_nb=00;Buzzer_Indicate=1;dodisplay(); while(k5!=1); void display(void) /顯示子程序buf1=sec_nb

9、/10; /第1位 東西秒十位buf2=sec_nb%10; /第2位 東西秒個位buf3=sec_dx/10; /第3位 南北秒十位buf0=sec_dx%10; /第4位 南北秒個位P1=0xff; / 初始燈為滅的P0=0x00;P1=0xfe; /片選LED1P0=tablebuf1;/送東西時間十位的數(shù)碼管編碼delay(1);/延時P1=0xff;/關顯示P0=0x00;P1=0xfd; /片選LED2P0=tablebuf2;delay(1);P1=0xff;P0=0x00;P1=0Xfb; /片選LED3P0=tablebuf3;delay(1);P1=0xff;P0=0x00

10、;P1=0Xf7;P0=tablebuf0;/片選LED4delay(1);void time0(void) interrupt 1 using 1 /定時中斷子程序TH0=0X3C;/重賦初值TL0=0XB0;TR0=1;/重新啟動定時器countt0+;/軟件計數(shù)加1if(countt0=10)if(sec_nb<=5)&&(dx_nb=0)&&(shanruo=1) /東西黃燈閃 Green_dx=0;Yellow_dx=0; if(sec_dx<=5)&&(dx_nb=1)&&(shanruo=1) /南北黃燈

11、閃 Green_nb=0;Yellow_nb=0;if(countt0=20) / 定時器中斷次數(shù)=20時(即1秒時)countt0=0;/清零計數(shù)器sec_dx-;/東西時間減1sec_nb-;/南北時間減1if(sec_nb<=5)&&(dx_nb=0)&&(shanruo=1) /東西黃燈閃 Green_dx=0;Yellow_dx=1; if(sec_dx<=5)&&(dx_nb=1)&&(shanruo=1) /南北黃燈閃 Green_nb=0;Yellow_nb=1; if(sec_dx=0&&am

12、p;sec_nb=5) /當東西倒計時到0時,重置5秒,用于黃燈閃爍時間sec_dx=5;shanruo=1;if(sec_nb=0&&sec_dx=5)/當南北倒計時到0時,重置5秒,用于黃燈閃爍時間sec_nb=5;shanruo=1;if(dx_nb=0&&sec_nb=0)/當黃燈閃爍時間倒計時到0時, P2=0x00;/重置東西南背方向的紅綠燈Green_nb=1;Red_dx=1;dx_nb=!dx_nb;shanruo=0;sec_nb=set_timenb;/重賦南北方向的起始值sec_dx=set_timenb+5;/重賦東西方向的起始值if(

13、dx_nb=1&&sec_dx=0)/當黃燈閃爍時間到P2=0X00;/重置東西南北的紅綠燈狀態(tài)Green_dx=1;Red_nb=1;dx_nb=!dx_nb;shanruo=0;sec_dx=set_timedx;/重賦東西方向的起始值sec_nb=set_timedx+5;/重賦南北方向的起始值/外部中斷0void int0(void) interrupt 0 using 1 /只允許東西通行TR0=0;/關定時器P2=0x00;Green_dx=1;/東西方向置綠燈Red_nb=1;/南北方向為紅燈Buzzer_Indicate=0;sec_dx=00;/四個方向的時間都為00sec_nb=00;/外部中斷1void int1(void) interrupt 2 using 1 /只允許南北通行 TR0=0;/關定時器P2=0x00;Green_nb=1;/置南北方向為綠燈Red_dx=1;/東西方向為紅燈Buzzer_Indicate=0;sec_nb=00;/四個方向的時間都為00sec_dx=00;void logo()/開機的Logo "- - - -" for(n=0;n<50;n+) P0=0x40; P1=0xfe;delay(1);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論