|
分享需要請查看
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit p16=P1^6 ;
- sbit p17=P1^7 ;
- uint i,j,k,turn=0;
- uint code Seg[19]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x40};
- //數(shù)碼管譯碼表: { 0 , 1 , 2 , 3 , 4 ,5 6 7 8 9 . - }
- uchar jps,ks,key_do;//鍵盤緩存,上次有按鍵按下標(biāo)志位,按鍵已處理標(biāo)志位
- int count_10ms=0,second=15; //初始值
- void delay(uint tt) //延時函數(shù)
- {
- uint i;
- for(;tt>0;tt--)
- for(i=0;i<200;i++);
- }
- void LED(uint d1,uint d2)
- {
- if(d1==1) P0=(P0|0xff)&0xf1;//與運算
- if(d1==2) P0=(P0|0xff)&0xf2;
- if(d1==3) P0=(P0|0xff)&0xf4;
- if(d1==4) P0=(P0|0xff)&0xf8;
- P2=Seg[d2];
- }
- int keyscan() //鍵盤掃描函數(shù)
- {
- int t=0;
- if(p17==0) { t=1; jps=1;}
- return(t);
- }
- void ledshow()//
- {
- LED(1,11);
- delay(8);
- LED(2,second/10);
- delay(8);
- LED(3,second%10);
- delay(8);
- LED(4,11);
- delay(8);
-
- }
- void Time_fun() interrupt 1 //10ms中斷函數(shù)
- {
- j++;
- if(j==30) j=0;
- if(k==30) { k=0; p16=1; }
- else k++;
- TH0=(0xffff-10000)/256; //10ms
- TL0=(0xffff-10000)%256; //10ms
- count_10ms++;
- if(count_10ms==100)
- {count_10ms=0;second--;}
- if(second<0)
- {
- second=15;
- turn=!turn;
- k=0;
- p16=0; //提示音
- }
- if((ks==1)&&(keyscan()==1)&&(key_do==0))
- {
- P1=0x89;
- while(1); // 按鍵報警
- key_do=1;
- }
- ks=keyscan();
- if(ks==0) key_do=0;
- }
- main()
- {
- TMOD=0x01; //Time0為16計數(shù)器
- TH0=(0xffff-10000)/256;
- R0=1; //打開定時器
- ITL0=(0xffff-10000)%256;
- TE=0x82; //EA=1 ET0=1 打開中斷
-
- while(1)
- {
- ledshow();
- if(turn==0 && second>3) P1=(P1&0xc0)|0x21; // 東西紅燈,南北綠燈
- else if(turn==0 && second<=3)
- {
- if(j<15) P1=(P1&0xc0)|0x31; // 東西紅燈,南北綠燈閃黃燈亮
- else P1=(P1&0xc0)|0x11;
- }
- if(turn==1 && second>3) P1=(P1&0xc0)|0x0c; // 東西綠燈,南北紅燈
- else if(turn==1 && second<=3)
- {
- if(j<15) P1=(P1&0xc0)|0x0e; // 東西綠燈閃、黃燈亮,南北紅燈
- else P1=(P1&0xc0)|0x0a;
- }
- // P1=P1|0xc0;
- }
- }
復(fù)制代碼
|
-
-
程序.zip
2024-8-6 23:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
55.46 KB, 下載次數(shù): 1, 下載積分: 黑幣 -5
交通燈
|