|
这是我用一星期做的交通灯,请大家多多指教。- #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; //东西红灯灭
- }
- }
-
复制代码
|
|