?? 05-22 黃燈不閃ok.txt
字號:
#include<reg52.h>
#define uchar unsigned char
sbit p00=P0^0;
sbit p01=P0^1;
sbit p02=P0^2;
sbit p03=P0^3;
sbit p04=P0^4;
sbit p05=P0^5;
sbit left=P0^6;
sbit right=P0^7;
sbit p20=P2^0; //前右綠
sbit p21=P2^1; //前右黃
sbit p22=P2^2; //前左黃
sbit p23=P2^3; //前左綠
sbit p24=P2^4; //后右黃
sbit p25=P2^5; //后右紅
sbit p26=P2^6; //后左紅
sbit p27=P2^7; //后左黃
bit ykok;
uchar v,flag,ykcode,ykbnum,ykbtc,ykdelay,cc,temp,yknumber,sflag;
unsigned int snum;
bdata uchar ykcodetemp;
sbit ykcodetemp0=ykcodetemp^0;
void YkInit(void);
unsigned char YkGetcode(void);
scan()
{ if(ykcode==16) {v=v-2;ykcode=200;if(v<0) v=0;}
if(ykcode==17) {v=v+3;ykcode=200;if(v>30) v=30;}
}
void delay(unsigned int x)
{ unsigned int a,b;
for(a=x;a>0&&temp!=12&&temp!=7;a--)
for(b=250;b>0&&temp!=12&&temp!=7;b--)
if(temp==12||temp==7) break;
else scan();
}
void pwmdelay(unsigned int y)
{ unsigned int a;
for(a=y*5;a>0&&temp!=12;a--)
scan();
}
gof() //of tb p20=p23=0; 綠燈
{
P2=0xF6;
P0=0xFF;
pwmdelay(v);
P0=0xE7;
pwmdelay(3);
}
gob() //ob tf p25=p26=0 p24=p27=0/1; 后紅燈亮 黃燈閃
{
P2=0x9F;
P0=0xFF;
pwmdelay(v);
P0=0xDB;
pwmdelay(3);
cc++;
if(cc>200) {cc=0;p24=!p24;p27=!p27;}
}
gor() //of tf p21=p24=0; 右側(cè)黃燈閃爍
{
P2=0xED;
P0=0xFF;
pwmdelay(v);
P0=0xD7;
pwmdelay(3);
cc++;
if(cc>200) {cc=0;p21=p21!;p24=!p24;}
}
gol() //ob tb p27=p22=0 左側(cè)黃燈閃爍
{
P2=0xFF;
P0=0xFF;
pwmdelay(v);
P0=0xEB;
pwmdelay(3);
cc++;
if(cc>222) {cc=0;p22=!p22;p27=!p27;}
}
gos() //p25=p26=0 后紅燈
{
P2=0x4F;
P0=0xFF;
scan();
}
gorr() //os tb p24=p21=0/1; 右側(cè)黃燈閃爍 右紅亮p25=0
{
P0=0xFF;
P2=0xDF;
pwmdelay(v);
P0=0xF7;
pwmdelay(3);
cc++;
if(cc>200) {cc=0;p21==!p21;p24=!p24;}
}
goll() //of ts p27=p22=0/1 左側(cè)黃燈閃爍 左紅亮p26=0
{
P0=0xFF;
P2=0xBF;
pwmdelay(v);
P0=0xEF;
pwmdelay(3);
cc++;
if(cc>200) {cc=0;p22=!p22;p27=!p27;}
}
void main(void)
{
YkInit();
while(1)
{
if (ykok)
{
temp=ykcode;
if(temp==1||temp==2||temp==3||temp==4||temp==5||temp==6||temp==7||temp==12||temp==13)
flag=temp;
}
if(flag==1) gof();
if(flag==2) gob();
if(flag==3) gol();
if(flag==4) gor();
if(flag==5) goll();
if(flag==6) gorr();
if(flag==12)gos();
if(flag==13)
{
if(sflag==0) gof(); snum++;
if(snum>1000) {sflag++;snum=0;}
if(sflag==1) gob();
if(sflag==2) gol();
if(sflag==3) gor();
if(sflag==4) goll();
if(sflag==5) gorr();
if(sflag==6) {gos();sflag=0;flag=12;break;}
}
}
}
void YkInit(void)
{
EA=1;
TMOD=0x11;
SCON=0x00;
TH1=0;
TL1=0;
IE|=0x89;
IP|=0x01;
TCON |= 0x41;
ykbnum=0;
ykcodetemp=0;
ykdelay=0;
cc=0;
v=20;
sflag=snum=0;
flag=0;
}
void intx0() interrupt 0 using 2
{
ykbtc=TH1;TH1=0;TL1=0;TR1=1;ET1=1;
switch(ykbnum)
{
case(0):
ykbnum=1;
break;
case(1):
if(ykbtc==6)
ykbnum=2;
else
ykbnum=0;
break;
case(2):
if(ykbtc==6||ykbtc==9)
ykbnum=3;
else
ykbnum=0;
break;
case(3):
if(ykbtc==9||ykbtc==6)
ykbnum=4;
else
ykbnum=0;
break;
default:
if(ykbnum<7)
{
if(ykbtc==6)
ykbnum++;
else
ykbnum=0;
}
else
{
if(ykbtc==6)
{
if(ykcodetemp0)
ykcodetemp=ykcodetemp*2+1;
else
ykcodetemp=ykcodetemp*2;
ykbnum++;
}
else if(ykbtc==9)
{
if(ykcodetemp0)
{
ykbnum++;
ykcodetemp=ykcodetemp*2;
}
else
{
ykbnum+=2;
ykcodetemp=ykcodetemp*2;
ykcodetemp=ykcodetemp*2+1;
}
}
else if(ykbtc>11&&ykbtc<15)
{
ykbnum+=2;
ykcodetemp=ykcodetemp*2;
ykcodetemp=ykcodetemp*2+1;
}
else if(ykbtc>30)
EX0=1;
else
ykbnum=0;
}
}
}
void intt1() interrupt 3 using 3
{
if(ykdelay)
{
ykdelay--;
EX0=0;
}
else
{
if(ykbnum==13)
{
ykcode=ykcodetemp*=2;
ykdelay=3;
EX0=0;
ykok=1;
}
else if(ykbnum==14)
{
ykcode=ykcodetemp;
ykdelay=3;
EX0=0;
ykok=1;
}
else
EX0=1;
ykbnum=0;
ykcodetemp=0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -