|
這是我用一星期做的交通燈,請大家多多指教。- #include <reg51.h>
- #include<rtx51tny.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
- uint time=0;
- uint num=0;
- uint dis_num=0;
- sbit key1=P1^0;
- sbit key2=P1^1;
- sbit Y1=P2^0;
- sbit Y2=P2^1;
- sbit led1=P2^5; //東西紅燈
- sbit led2=P2^7; //東西黃燈
- sbit led3=P2^6; //東西綠燈
- sbit led5=P2^3; //南北綠燈
- sbit led6=P2^4; //南北黃燈
- sbit led7=P2^2; //南北紅燈
- /*-------------------------1ms延時子函數(1T、12T、主時鐘不同時,需做調整)------------*/
- void delay(uint t)
- {
- uchar x;
- while(t--)
- for(x=0;x<250;x++);
- }
- void my_int() interrupt 3
- {
- time++;
- if(time==123)
- {
- time=0;
- num++;
- if(num%60==0)
- dis_num++;
- }
-
-
- }
- void timer()
- {
- TMOD=0x00;
- TH1=0x3c;
- TL1=0xb0;
- EA=1;
- ET1=1;
- TR1=1;
- while(1)
- {
- P0=0;
- Y1=0;Y2=1;
- P0=table[num%60/10];
- delay(2);
- P0=0;
- Y1=1;Y2=1;
- P0=table[num%60%10];
- delay(2);
- P0=0;
- Y1=0;Y2=0;
- P0=table[dis_num%60/10];
- delay(2);
- P0=0;
- Y1=1;Y2=0;
- P0=table1[dis_num%60%10];
- delay(2);
- }
- }
- void key()
- {
- if(P1!=0xff)
- {
- delay(5);
- if(P1!=0Xff)
- {
- if(key1==0)
- {
- num++;
- while(key1==0)
- {
- timer();
- }
- }
- if(key2==0)
- {
- dis_num++;
- while(key2==0)
- {
- timer();
- }
- }
- }
- }
- }
- /////////////////////////////////////////////
- /*---------------------鍵盤掃描子函數--------------------------------*/
- void job0() _task_ 0
- {
- os_create_task(1);
- os_create_task(2);
- os_delete_task(0);
- }
- void job1() _task_ 1
- {
- while(1)
- {
- timer();
- key();
- }
- }
- void job2() _task_ 2
- {
- uint i;
- while(1)
- {
- led7=0; //南北紅燈亮
- led3=0; //東西綠燈亮,車輛東西方向通行
- delay(1000); //狀態延時5s
- led3=1; //東西綠燈滅,
-
- for(i=0;i<3;i++) //東西黃燈閃爍5次,
- {
- led2=0;
- delay(100);
- led6=1,led2=1;
- delay(100);
- }
- _nop_ ();
- _nop_ ();
- led7=1; //南北紅燈滅
- led5=0; //南北綠燈亮,車輛南北方向通行
- led1=0; //東西紅燈亮
- delay(1000); //狀態延時5s
- led5=1; //南北綠燈滅
-
- for(i=0;i<3;i++) //南北黃燈閃爍5次
- {
- led6=0;
- delay(100);
- led6=1,led2=1;
- delay(100);
- }
- led1=1; //東西紅燈滅
- }
- }
-
復制代碼
|
|