|
四個(gè)干道的初始值可變
51hei圖片_20241106213823.png (288.6 KB, 下載次數(shù): 0)
下載附件
2024-11-6 21:38 上傳
單片機(jī)源程序如下:
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ON 0
- #define OFF 1
- sbit Z_G=P1^2; // 主干道綠燈
- sbit Z_Y=P1^3; // 主干道黃燈
- sbit Z_R=P1^4; // 主干道紅燈
- sbit F_G=P1^5; // 支干道綠燈
- sbit F_Y=P1^6; // 支干道黃燈
- sbit F_R=P1^7; // 支干道紅燈
- sbit wei_Z1=P2^0; // 主干道數(shù)碼管位控制
- sbit wei_Z2=P2^1; // 主干道數(shù)碼管位控制
- sbit wei_F1=P2^2; // 支干道數(shù)碼管位控制
- sbit wei_F2=P2^3; // 支干道數(shù)碼管為控制
- sbit key1=P1^0; //開(kāi)關(guān)位定義
- sbit key2=P1^1;
- sbit buzzer=P3^7; //蜂鳴器定義
- uchar count; //定時(shí)器中斷計(jì)數(shù)值
- /********* 倒計(jì)時(shí)賦初值 *************/
- int T_Z_G=60,T_F_G=30,T_F_R=60,T_Z_R=30,T_Y=3;//T_Z_G主干道的綠燈初始值為60,T_F_G支干道的綠燈為30,T_Y黃燈都為3
- //T_F_R為支干道的紅燈值60,T_Z_R為主干道的紅燈值30
- void init(void)
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
-
- /****************** 延時(shí) **********************/
- void delay(uchar z)
- {
- uchar x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- /******************seg 控制 *******************/
- unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 共陰極數(shù)碼管賦值
- void display1(uchar num1,uchar num2) //控制支干道數(shù)碼管倒計(jì)時(shí)顯示
- {
- P3=table[num1];
- wei_F1=ON;
- delay(1);
- wei_F1=OFF;
- P3=table[num2];
- wei_F2=ON;
- delay(1);
- wei_F2=OFF;
- if(key1==0)//主干道緊急制動(dòng)
- {
- delay(2);
- if(key1==0)
- {
- while(1)
- {
- P0=0x00;
- P3=0x00;
- F_G=OFF;
- F_Y=OFF;
- F_R=ON;
-
- Z_G=OFF;
- Z_Y=OFF;
- Z_R=ON;
- buzzer=~buzzer;//蜂鳴器叫
- if(key2==0)
- {
- delay(2);
- if(key2==0)
- {
- F_R=OFF;
- Z_R=OFF;
- buzzer=OFF;
- break;
- }
- }
-
- }
- }
-
- }
- }
- void display2(uchar num3,uchar num4) //控制主干道數(shù)碼管倒計(jì)時(shí)顯示
- {
- P0=table[num3];
- wei_Z1=ON;
- delay(1);
- wei_Z1=OFF;
- P0=table[num4];
- wei_Z2=ON;
- delay(1);
- wei_Z2=OFF;
-
- if(key1==0)//主干道緊急制動(dòng)
- {
- delay(2);
- if(key1==0)
- {
- while(1)
- {
- P0=0x00;
- P3=0x00;
- F_G=OFF;
- F_Y=OFF;
- F_R=ON;
-
- Z_G=OFF;
- Z_Y=OFF;
- Z_R=ON;
- buzzer=~buzzer;//蜂鳴器叫
- if(key2==0)
- {
- delay(2);
- if(key2==0)
- {
- F_R=OFF;
- Z_R=OFF;
- buzzer=OFF;
- break;
- }
- }
-
- }
- }
-
- }
- }
- void main()
- {
- int i;
- buzzer=OFF;//關(guān)閉蜂鳴器
- //初始狀態(tài)支干道主干道禁止通行
- Z_R=ON; //主干道紅燈打開(kāi)
- F_R=ON; //支干道紅燈打開(kāi)
-
- for(i=0;i<210;i++) //延時(shí)
- {
- delay(10);
- }
- Z_R=OFF;// 主干道紅燈關(guān)閉
- F_R=OFF;// 支干道紅燈關(guān)閉
- init(); // 初始化計(jì)時(shí)器
- while(1)
- {
- /**************** 狀態(tài) 1:支干道紅燈 (30s), 主干道綠燈 (60s)************/
- /**************** 狀態(tài) 2:支干道紅燈 (30s), 主干道黃燈 (3s) ************/
- while(T_Z_G >= 0)
- {
- display1(T_F_R/10,T_F_R%10);// 支干道紅燈 (60s)
- display2(T_Z_G/10,T_Z_G%10);// 主干道綠燈 (60s)
- Z_G=ON; // 主干道的綠燈打開(kāi)
- F_R=ON; // 支干道的紅燈打開(kāi)
- }
- T_Y=3;// 重新賦值黃燈
- while(T_Y >= 0)
- {
- display1(T_Y/10,T_Y%10);// 支干道黃燈(3s)
- display2(T_Y/10,T_Y%10);// 主干道黃燈(3s)
- F_R=OFF; // 支干道的紅燈關(guān)閉
- F_Y=ON; // 支干道的黃燈打開(kāi)
- Z_G=OFF; // 主干道的綠燈關(guān)閉
- Z_Y=ON; // 主干道的黃燈打開(kāi)
- }
- F_R=OFF; // 支干道的紅燈關(guān)閉
- Z_G=OFF; // 主干道的綠燈關(guān)閉
- Z_Y=OFF; // 主干道的黃燈關(guān)閉
- F_Y=OFF; // 支干道的黃燈關(guān)閉
- T_F_G=30,T_F_R=60,T_Z_R=30;// 重新賦值
- /**************** 狀態(tài) 3:支干道綠燈 (30s), 主干道紅燈 (30s)**************/
- /*************** 狀態(tài) 4:支干道黃燈 (3s) , 主干道紅燈 (30s)***************/
- //init(); // 初始化計(jì)時(shí)器
- while(T_F_G >= 0)
- {
- display1(T_F_G/10,T_F_G%10);// 支干道綠燈 (30s)
- display2(T_Z_R/10,T_Z_R%10);// 主干道紅燈 (30s)
- Z_R=ON;// 主干道的紅燈打開(kāi)
- F_G=ON;// 支干道的綠燈打開(kāi)
- }
- T_Y=3;// 重新賦值黃燈
- while(T_Y >= 0)
- {
- display1(T_Y/10,T_Y%10);// 支干道黃燈 (3s)
- display2(T_Y/10,T_Y%10);// 主干道黃燈 (3s)
- F_G=OFF; // 支干道的綠燈關(guān)閉
- F_Y=ON; // 支干道的黃燈打開(kāi)
- Z_R=OFF; // 主干道的紅燈關(guān)閉
- Z_Y=ON; // 主干道的黃燈打開(kāi)
- }
- Z_R=OFF; // 主干道的紅燈關(guān)閉
- Z_Y=OFF; // 主干道的黃燈關(guān)閉
- F_G=OFF; // 支干道的綠燈關(guān)閉
- F_Y=OFF; // 支干道的黃燈關(guān)閉
- T_Z_G=60,T_F_G=30,T_F_R=60,T_Z_R=30,T_Y=3;// 重新賦值
- }
- }
- //定時(shí)器中斷函數(shù)
- void timer1(void) interrupt 1
- {
- //重裝初值 0.05s
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count++;
- if(count==20) //20次為1s 20*0.05=1
- {
- T_Z_G--;
- T_F_G--;
- T_F_R--;
- T_Z_R--;
- T_Y--;
- count=0;
- }
- }
復(fù)制代碼
下載:
C51交通燈.rar
(72.37 KB, 下載次數(shù): 6)
2024-11-6 21:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|