搜集的比較好的一份交通燈按鍵控制程序+仿真+原理圖
0.png (551.39 KB, 下載次數: 108)
下載附件
2016-12-5 03:43 上傳
/**********交通燈元件清單***********/
1、9*15萬用板 一塊
2、單片機 一枚
3、兩位數碼管 4個
4、LED燈 9個
5、排阻 一個
6、晶振 1個
7、三極管8550 4個
8、電解電容10uf 1個
9、按鍵 6個
10、USB接口 1個
11、自鎖開關 1個
12、電阻470 9個
13、電阻.7K 4個
14、電阻10K 1個
交通燈的pcb:
0.png (603.17 KB, 下載次數: 111)
下載附件
2016-12-5 03:41 上傳
0.png (1004.21 KB, 下載次數: 84)
下載附件
2016-12-5 03:42 上傳
交通燈原理圖:
0.png (129.99 KB, 下載次數: 101)
下載附件
2016-12-5 03:42 上傳
交通燈仿真:
0.png (29.53 KB, 下載次數: 104)
下載附件
2016-12-5 03:42 上傳
0.png (536.24 KB, 下載次數: 80)
下載附件
2016-12-5 03:43 上傳
交通燈的電機源程序:
-
- #include<reg51.H> // 對單片機的口進行了定義
- #define uint unsigned int
- #define uchar unsigned char
- uchar code a[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//段碼組合,共陽極
- uchar code b[4]={0x01,0x02,0x04,0x08}; //位碼組合
- uchar code c[4]={0xcc,0xd4,0x78,0xb8};/*P1 綠紅、黃紅、紅綠、紅黃*/
-
- //12MHz
- //*************************************************************************************
- uchar NB=25,DX=30,NBG=25,DXG=15,H=5; /*數碼管顯示值設置*/
- uchar i,k=0,cnt=0,j=0;
- sbit K0=P3^4; /*支干道通行*/
- sbit K1=P3^5; /*主干道通行*/
- sbit K4=P3^6; /*返回*/
- sbit K3=P3^2; /*設置時間*/
- sbit K2=P3^3; /*緊急剎車*/
- void delay(uchar t); /*定義延時程序*/
- void key(); /*定義鍵盤程序*/
- void display(); /*定義顯示程序*/
- void settime(); /*定義時間設置顯示程序*/
- //*************************程序初始*********************************************
- void init(void)
- {
- TMOD=0x01; /*使用定時器0模式一*/
- TH0=0x3c; /*(65536-5000)/256*/
- TL0=0xb0; /*(65536-5000)%256*/
- IT0=1; //開中斷
- ET0=1;
- TR0=1;
- EA=1;
- EX0=1;
- EX1=1;
- P1=c[k]; //開啟交通燈
- }
- //*************************中斷0處理程序***************************************
- void int0(void) interrupt 0 // 通行時間設置
- {
- EA=0;
- P1=0xd8; /*紅燈全亮*/
-
- for(;;)
- {
- settime();
- if(K1==0) /*P3^6=0設置主干道通行時間*/
- {
- delay(40);
- if(K1==0)
- {
- while(!K1)
- {settime();}
- DXG++; /*主干道通行時間加1*/
- if(DXG==100)
- DXG=0;
- }
- }
-
- if(K0==0) /*P3^5=0設置支干道通行時間*/
- {
- delay(40);
- if(K0==0)
- {
- while(!K0)
- {settime();}
- NBG++; /*支干道通行時間加1*/
- if(NBG==100)
- NBG=0;
- }
- }
-
- if(K4==0) /*P3^7=0返回*/
- {
- delay(40);
- if(K4==0)
- {
- while(!K4)
- {
- }
- k=0;P1=c[k];
- NB=NBG,DX=NBG+H;
- display();
- EA=1;
-
- break;
- }
- }
- }
- }
-
- //***********************************中斷1處理程序********************
- void int1(void) interrupt 2 //緊急情況
- {
- /*東西南北紅燈亮*/
- EA=0;
- TR0=!TR0; /*停止計數*/
- for(;;) /*主支干道顯示全為0*/
- {
- P1=0xd8,
- P0=a[0];
- P2=b[0];
- delay(20);
-
- P2=b[1];
- delay(20);
- P2=b[2];
- delay(20);
- P2=b[3];
- delay(20);
-
- if(K4==0) /*返回*/
- {
- delay(20);
- EA=1;
-
- P1=c[k]; /*返回緊急前狀態開始計數*/
- TR0=!TR0; /*重啟計數*/
- break;
- }
- }
- }
- void time1(void) interrupt 1 /*交通燈控制程序*/
- {
- TH0=0x3c; /*定時50ms*/
- TL0=0xb0;
- cnt++;
-
- if(cnt>=20) /*每20*50ms=1s自減一*/
- {
- NB--;
- DX--;
- cnt=0;
- if(NB==0||DX==0)
- {
- k++;
- if(k>3) /*k取0,1,2,3*/
- k=0;
- switch(k)
- {
- case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break; /*主干道通行顯示綠紅*/
- case 1:NB=H;j=1;P1=c[k];break; /*主干道黃燈閃爍*/
- case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break; /*支干道通行顯示紅綠*/
- case 3:DX=H;j=2;P1=c[k];break; /*支干道黃燈閃爍*/
- }
- }
- }
- }
- void delay(uchar t) //延時程序延時0.1*nms
- {
- uchar i;
- do
- {
- for(i=0;i<20;i++)
- ;;;
- } while(t--);
- }
- void settime()
- {
- P2=b[0],P0=a[(NBG+H)%10]; /*顯示主干道通行時間 */
- delay(20);
-
- P2=b[1],P0=a[(NBG+H)/10];
- delay(20);
-
- P2=b[2],P0=a[(DXG+H)%10]; /*顯示支干道通行時間*/
- delay(20);
-
- P2=b[3],P0=a[(DXG+H)/10];
- delay(20);
- }
- void key() //鍵盤程序用KO K1模擬一道有車一道無車
- {
- if(K1==0) /*主干道有車支干道無車*/
- {
- delay(40);
- if(K1==0)
- {
- while(!K1)
- {
- display();
- }
- k=0,P1=c[k];cnt=0;
- NB=NBG, DX=NBG+H;
- display();
- }
- }
- if(K0==0) /*支干道有車主干道無車*/
- {
- delay(40);
- if(K0==0)
- {
- while(!K0)
- {
- display();
- }
- k=2,P1=c[k];cnt=0;
- NB=DXG+H,DX=DXG;
- display();
- }
- }
- }
- void display() //顯示程序
- {
- P2=b[0],P0=a[NB%10]; /*由k的不同值進入確定顯示數值*/
- delay(20);
-
- P2=b[1],P0=a[NB/10];
- delay(20);
-
- P2=b[2],P0=a[DX%10];
- delay(20);
-
- P2=b[3],P0=a[DX/10];
- delay(20);
- }
- void main(void)
- { //主程序
- init();
-
- for(;;)
- {
- display();
- key();
-
- //黃燈閃爍程序
- while(j==1) /*主干道黃燈閃爍*/
- {
- P1=0xdc; /*給黃燈一高電平黃燈滅*/
- for(i=83;i>0;i--){display();} /*執行for循環延時*/
- P1=c[k]; /*再給黃燈一低電平黃燈亮*/
- for(i=83;i>0;i--){display();}
- }
- while(j==2)
- { /*支干道黃燈閃爍*/
-
- P1=0xf8;
- for(i=83;i>0;i--){display();}
- P1=c[k];
- for(i=83;i>0;i--){display();}
- }
- }
- }
復制代碼
0.png (61.13 KB, 下載次數: 101)
下載附件
2016-12-5 03:41 上傳
交通燈的所有資料下載:
交通燈.zip
(4.03 MB, 下載次數: 213)
2016-11-20 19:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|