- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar temp,aa,nn;
- sbit rn=P2^0;
- sbit nb=P2^1;
- sbit gn=P2^2;
- sbit rw=P2^3;
- sbit dx=P2^4;
- sbit gw=P2^5;
- sbit shi=P3^6;
- sbit ge=P3^7; /*對要使用的單片機各個口進行定義*/
- bit flag=0;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71}; /*將數字0123456789的16進制數定義成數組用以顯示*/
- void delay(uint z);
- void disp(uint n);
- void nb_flash(void);
- void dx_flash(void);
- void xint0();
- void timer0();
- void LED_ON();
- void xint1();
- void LED_OFF();
- void nanbei();
- void dongxi();
- /*將所使用的子函數定義*/
- void main()
- {
- uint num;
- num=0;
- aa=0;
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- EX0=1;
- IT0=0;
- EX1=1;
- IT1=1; /*中斷初始化*/
- while(1)
- {
- nanbei();
- nb_flash();
- dongxi();
- dx_flash(); /*主函數中顯示部分*/
- }
- }
- void delay(uint z) /*延時子函數*/
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void timer0() interrupt 1 /*定時器初始化*/
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- aa++;
- if(aa==18)
- {
- aa=0;
- flag=1;
- }
- }
- void disp(uint n) /*顯示子函數*/
- {
- while(!flag)
- {
- ge=0;
- P0=table[n%10];
- delay(50);
- shi=1;ge=1;
- shi=0;
- P0=table[n/10];
- delay(50);
- shi=1;ge=1;
- }
- if(flag==1)
- flag=0;
- }
- void nanbei() /*南北方向的紅綠燈和數碼管顯示子函數*/
- { uint num;
- num=60;
- disp(num);
- while(num<=60&&num>0)
- { num--;
- P2=0xde;
- disp(num);
- }
- }
- void dongxi() /*東西方向的紅綠燈和數碼管顯示子函數*/
- { uint num;
- num=60;
- while(num<=60&&num>0)
- { P2=0xf3;
- disp(num);
- num--;
- }
- }
- void nb_flash(void) /*南北方向的黃燈和數碼管顯示子函數*/
- {
- uint a;
- for(a=3;a>0;a--)
- { P2=0xdd;
- nb=1;
- delay(100);
- nb=0;
- disp(a);
- }
- }
- void dx_flash(void) /*東西方向的黃燈和數碼管顯示子函數*/
- {
- uint a;
- for(a=3;a>0;a--)
- { P2=0xeb;
- dx=1;
- delay(100);
- dx=0;
- disp(a);
- }
- }
- void xint0() interrupt 2 /*中斷定義*/
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- LED_ON();
- }
- void LED_ON() /*開關控制燈的子函數*/
- { uint b;
- rn=0;
- rw=0;
- gn=1;
- gw=1;
- nb=1;
- dx=1;
- for(b=5;b>0;b--)
- {
- ge=0;shi=1;
- P0=table[b];
- delay(1000);
- ge=1; shi=1;
- }
- return;
- }
復制代碼 |