|
我看有人說加了三極管上去,我加- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ON 0
- #define OFF 1
- sbit NS_G=P2^5; // 南北綠燈
- sbit NS_Y=P2^4; // 南北黃燈
- sbit NS_R=P2^3; // 南北紅燈
- sbit EW_G=P2^2; // 東西綠燈
- sbit EW_Y=P2^1; // 東西黃燈
- sbit EW_R=P2^0; // 東西紅燈
- sbit LED_D1=P3^7; // 南北方向數(shù)碼管位控制
- sbit LED_C1=P3^6; // 南北方向數(shù)碼管位控制
- sbit LED_B1=P3^1; // 東西方向數(shù)碼管為控制
- sbit LED_A1=P3^0; // 東西方向數(shù)碼管位控制
- sbit key1=P3^2; //開關(guān)位定義
- sbit key2=P3^3;
- /********* 倒計(jì)時(shí)賦初值 *************/
- uchar EWF=30,NSF=25,X=30,Y=25,Z=30,SHU=30;
- uchar count;
- void keyscan1() //南北緊急制動(dòng)按鍵函數(shù)
- {
- if(!key1)
- {
- while(!key1); //松手檢測
- }
- }
- void keyscan2() //東西緊急制動(dòng)按鍵函數(shù)
- {
- if(!key2)
- {
- while(!key2); //松手檢測
- }
- }
- void init(void)
- {
- TMOD=0x01;
- TH0=(65536-40000)/256;
- TL0=(65536-40000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void timer1(void) interrupt 1
- {
- TMOD=0x01;
- TH0=(65536-40000)/256;
- TL0=(65536-40000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- count++;
- if(count>29)
- {
- EWF--;
- NSF--;
- X--;
- Y--;
- Z--;
- SHU--;
- count=0;
- }
- }
-
- /****************** 延時(shí) **********************/
- void delay(uchar z)
- {
- uchar x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- /******************led 控制 *******************/
- unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 共陰極數(shù)碼管賦值
- void display1(uchar num1,uchar num2) //控制東西方向 led 顯示
- {
- P0=table[num1];
- LED_A1=ON;
- delay(1);
- LED_A1=OFF;
- P0=table[num2];
- LED_B1=ON;
- delay(1);
- LED_B1=OFF;
- if(!key1)//南北緊急制動(dòng)
- {
- while(1)
- {
- P0=0xc0;
- EW_G=EW_Y=OFF;
- NS_G=NS_Y=OFF;
- EW_R=NS_R=ON;
- keyscan1();
- EW_R=NS_R=OFF;
- EW_Y=NS_Y=OFF;
- NS_G=ON;
- EW_R=ON;
- break;
- }
- }
- }
- void display2(uchar num3,uchar num4) // 控制南北方向 led 顯示
- {
- P0=table[num3];
- LED_C1=ON;
- delay(1);
- LED_C1=OFF;
- P0=table[num4];
- LED_D1=ON;
- delay(1);
- LED_D1=OFF;
- if(!key2)//東西緊急制動(dòng)
- {
- while(1)
- {
- P0=0xc0;
- EW_G=EW_Y=OFF;
- NS_G=NS_Y=OFF;
- EW_R=NS_R=ON;
- keyscan2();
- EW_R=NS_R=OFF;
- EW_Y=NS_Y=OFF;
- EW_G=ON;
- NS_R=ON;
- break;
- }
- }
- }
- void main()
- {
- int i;
- /************ 初始狀態(tài)東西南北禁止通行 ************/
- NS_R=ON; //南北方向紅燈打開
- EW_R=ON; //東西方向紅燈打開
- for(i=0;i<210;i++)
- {
- delay(10);
- }
- NS_R=OFF;// 南北方向紅燈關(guān)閉
- EW_R=OFF;// 東西方向紅燈關(guān)閉
-
- while(1)
- {
- /************** 狀態(tài) 1:東西紅燈 (30s), 南北綠燈 (25s)************/
- /**************** 狀態(tài) 2:東西紅燈 (30s), 南北黃燈 (5s)***************/
- while(1)
- {
- init(); // 初始化計(jì)時(shí)器
-
- NS_G=ON; // 南北方向的綠燈打開
- EW_R=ON; // 東西方向的紅燈打開
- while(EWF!=0)
- {
- display1(EWF/10,EWF%10);// 東西方向紅燈 (25s)
- display2(NSF/10,NSF%10);// 南北方向綠燈 (30s)
- while(EWF==5)
- {
- while(X!=0)
- {
- display1(EWF/10,EWF%10);// 東西方向紅燈 (5s)
- display2(X/10,X%10);// 南北方向黃燈 (5s)
- NS_G=OFF; // 南北方向的綠燈關(guān)閉
- NS_Y=ON; // 南北方向的黃燈打開
- }
- }
- }
- EW_R=OFF; // 東西方向的紅燈關(guān)閉
- NS_G=OFF; // 南北方向的綠燈關(guān)閉
- NS_Y=OFF; // 南北方向的黃燈打開
- EWF=30,NSF=25,X=30,Y=25,Z=30,SHU=30;// 重新賦值
- /**************** 狀態(tài) 3:東西綠燈 (25s), 南北紅燈 (30s)**************/
- /*************** 狀態(tài) 4:東西黃燈 (5s) , 南北紅燈 (30s)****************/
- while(1)
- {
- init(); // 初始化計(jì)時(shí)器
-
- NS_R=ON;// 南北方向的紅燈打開
- EW_G=ON;// 東西方向的綠燈打開
- while(Z!=0)
- {
- display2(Z/10,Z%10);// 南北方向紅燈 (25s)
- display1(Y/10,Y%10);// 東西方向綠燈 (30s)
- while(Z==5)
- {
- while(SHU!=0)
- {
- display1(Z/10,Z%10);// 東西紅燈 (5s)
- display2(SHU/10,SHU%10);// 南北綠燈 (5s)
- EW_G=OFF; // 東西方向的綠燈關(guān)閉
- EW_Y=ON; // 東西方向的黃燈打開
- }
- }
- }
- NS_R=OFF; // 南北方向的紅燈關(guān)閉
- EW_G=OFF; // 東西方向的綠燈關(guān)閉
- EW_Y=OFF; // 東西方向的黃燈關(guān)閉
- EWF=30,NSF=25,X=30,Y=25,Z=30,SHU=30;// 重新賦值
- break;
- }
- }
- }
- }
復(fù)制代碼
了變成了常亮,應(yīng)該要怎么做呢
|
|