|
可實現 警燈 夜間 等功能的51單片機交通燈
0.png (26.6 KB, 下載次數: 132)
下載附件
2016-6-3 18:29 上傳
51單片機交通燈的仿真圖
0.png (58.8 KB, 下載次數: 108)
下載附件
2016-6-3 18:28 上傳
交通燈的電路原理圖
源程序:
- #include<reg51.h>
- #define smg P1
- #define bit P3
- sbit red1=P0^0;//1方向紅燈
- sbit green1=P0^1;//1方向綠燈
- sbit yellow1=P0^2; //1方向黃燈
- sbit red2=P0^3;//2方向紅燈
- sbit green2=P0^4; //2方向綠燈
- sbit yellow2=P0^5; //2方向黃燈
- sbit setkey=P2^0; //設置按鍵
- sbit upkey=P2^1;//時間加
- sbit downkey=P2^2;//時間減
- sbit backkey=P2^3;//退出鍵
- sbit choosekey=P2^4;//選擇鍵
- unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char time,s,s1,s2,t,t2,x1,x2,flag,temp,r,q;
- int t1;
- void delay(int x); //延時程序
- void timer0(void); //中斷
- void set();//設置程序
- void int0();//秒計數
- void main(void) //主函數
- { t=60;
- s=1;
- r=0;
- timer0();
- int0();
- while(1)
- {
- set();
- t1=t-s;
- if(t1==-1)
- {s=1;}
- s1=t1%10;s2=t1/10;
- bit=0xfd;smg=tab[s1];delay(2);bit=0xfe;smg=tab[s2];delay(2); //個位,十位顯示賦值
- if(t1==-1){r++;q=r%2; if(r==4){r=2;}} //當數碼管顯示時間為-1時,對r進行加1并通過求余操作,產生兩種不同的紅綠燈狀態。
- if(q==1){red1=0;green1=1;yellow1=0;red2=1;green2=0;yellow2=0; //狀態1燈光。
- if(t1<3&&t1>-1){green1=0;if(time>9){yellow1=~yellow1;}}} //狀態1黃燈閃爍。
- if(q==0){red1=1;green1=0;yellow1=0;red2=0;green2=1;yellow2=0; //狀態2燈光。
- if(t1<3&&t1>-1){ green2=0;if(time>9){yellow2=~yellow2;}}} //狀態2黃燈閃爍。
- if(TF0==1)//定時器溢出操作
- {TF0=0;break;}
- }
- }
- void set()
- {
- if(setkey==0)
- { delay(5); //防抖操作
- if(setkey==0)
- {flag=1;
- while(flag)
- { TR0=0;
- bit=0xfd;smg=0x00;delay(1); //數碼管全滅
- bit=0xfe;smg=0x00;delay(1);
- if(backkey==0)
- {delay(15);
- if(backkey==0) //設置程序返回操作
- {flag=0;TR0=1;}
- }
- if(choosekey==0)
- {delay(60);
- if(choosekey==0)
- {++temp;
- if(temp==6){temp=1;}
- if(temp==1)
- {while(temp) //時間加減操作
- {x1=t%10; x2=t/10;
- bit=0xfd;smg=tab[x1];delay(2);bit=0xfe;smg=tab[x2];delay(2);
- if(upkey==0){delay(60);if(upkey==0)t++;if(t==100)t=10;}
- if(downkey==0){delay(60);if(downkey==0)t--;if(t==9)t=10;}
- red1=1;green1=0;yellow1=0;red2=1;green2=0;yellow2=0;
- if(setkey==0){ delay(60);if(setkey==0){break;} }}
- }
- else if(temp==2) {red1=1;green1=0;yellow1=0;red2=1;green2=0;yellow2=0;} //禁行模式
- else if(temp==3){red1=0;green1=1;yellow1=0;red2=1;green2=0;yellow2=0; }//方向1通行模式
- else if(temp==4){red1=1;green1=0;yellow1=0;red2=0;green2=1;yellow2=0; } //方向2通行模式
- else if(temp==5){red1=0;green1=0; red2=0;green2=0; //夜間模式
- while(1){delay(255);
- yellow1=~yellow1;
- yellow2=~yellow2;
- if(backkey==0)
- { delay(15);
- if(backkey==0)
- {break;}
- }}}}}
- }}}}
- void timer0(void)
- { TMOD = 0x01;
- TH0 = 0x3C;
- TL0 = 0xB0;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void int0() interrupt 1 using 0
- {
- TH0=0x3C;
- TL0=0xB0;
- time++;
- if(time==20)
- { s++;
- time=0;}
- }
- void delay(int x)
- { int i,j;
- for(i=x;i>0l;i--)
- for(j=255;j>0;j--);
- }
-
復制代碼
0.png (76.26 KB, 下載次數: 128)
下載附件
2016-6-3 18:27 上傳
交通燈所有資料下載:
1352200108_趙曉杰_交通燈.rar
(9.46 MB, 下載次數: 84)
2016-5-24 09:27 上傳
點擊文件名下載附件
文件包 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|