爆闪灯C51程序Word文档下载推荐.docx
《爆闪灯C51程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《爆闪灯C51程序Word文档下载推荐.docx(24页珍藏版)》请在冰点文库上搜索。
sfrIAP_ADDRH=0XC3;
sfrIAP_ADDRL=0XC4;
sfrIAP_CMD=0xc5;
sfrIAP_TRIG=0XC6;
sfrIAP_CONTR=0XC7;
unsignedcharliang_temp=1;
unsignedcharan_temp=1;
unsignedcharR_to_B_temp=1;
unsignedcharstop_temp=1;
unsignedcharmode=1;
unsignedchartime_key=0;
unsignedchartime_temp=0;
unsignedcharmode1_temp=0;
ucharajs,ljs;
ucharrtobjs,stopjs,js3c=1;
ucharrba=0;
bitla=1;
ksj=0;
unsignedcharcodezhifu0[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsignedcharcodezhifu2[16]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0XFe,0Xf6,0Xee,0X3e,0X9c,0X7a,0X9e,0X8e};
//*********************************************************
voiddelay20(void)//误差-0.000000000002us
{
unsignedchara,b,c;
for(c=2;
c>
0;
c--)
for(b=95;
b>
b--)
for(a=209;
a>
a--);
}
voiddelay500(void)//误差0us500ms
for(c=23;
for(b=152;
for(a=70;
voideeprom_erase(unsignedchara)
unsignedintadd=512;
unsignedintadd1=0;
add1=add*a;
IAP_ADDRH=add1/255;
IAP_ADDRL=add1%255;
IAP_CONTR=0X8C;
IAP_CMD=0X03;
IAP_TRIG=0X5A;
IAP_TRIG=0XA5;
_nop_();
voideeprom_writer(unsignedintadd,unsignedchardate)
IAP_DATA=date;
IAP_ADDRH=add/255;
IAP_ADDRL=add%255;
IAP_CMD=2;
//***********************************************************
unsignedchareeprom_read(unsignedintadd)
{
unsignedchardate=0;
//
IAP_CMD=0X01;
date=IAP_DATA;
return(date);
voidshow(unsignedchara)
unsignedcharshi;
unsignedcharge;
unsignedchar*p;
unsignedchar*p1;
p=zhifu0;
p1=zhifu2;
shi=a/10;
shi=*(p+shi);
//得到编码值
ge=a%10;
ge=*(p1+ge);
P0=shi;
P2=ge;
//**********************************************************
voidliang_key()
{
if(!
P1_0)
delay20();
liang_temp++;
if(liang_temp>
99)
{liang_temp=1;
show(liang_temp);
while(!
{
while(ksj){liang_temp++;
delay20();
if(liang_temp>
99)liang_temp=1;
show(liang_temp);
}
}
}
}
voidan_key()
if(P1_0==0)
if(P1_0==0)
an_temp++;
if(an_temp>
{an_temp=1;
show(an_temp);
while(ksj){an_temp++;
if(an_temp>
99)an_temp=1;
show(an_temp);
//***********************************************************
voidR_to_B_key()
R_to_B_temp++;
if(R_to_B_temp>
{
R_to_B_temp=1;
show(R_to_B_temp);
while(ksj){R_to_B_temp++;
if(R_to_B_temp>
99)R_to_B_temp=1;
show(R_to_B_temp);
}
voidstop_key()
stop_temp++;
if(stop_temp>
{stop_temp=1;
show(stop_temp);
while(!
while(ksj){stop_temp++;
if(stop_temp>
99)stop_temp=1;
show(stop_temp);
}
//************************************************************
voidshow_mode(unsignedchara)
unsignedcharge=0;
ge=*(p1+a);
//P0=0x00;
P2=ge;
voidset_mode()
TR1=1;
//开定时器
show_mode(mode);
while(time_key==0)
{
if(!
delay20();
mode++;
if(mode>
5)
{
mode=1;
time_temp=0;
}
show_mode(mode);
TR1=0;
//关定时器
time_key=0;
time_temp=0;
TH1=0x3C;
TL1=0xB0;
eeprom_erase
(1);
eeprom_writer(0,mode);
P0=0;
P2=0;
rtobjs=R_to_B_temp;
stopjs=stop_temp;
ajs=an_temp;
ljs=liang_temp;
rba=0;
voidset_fun()//设置时间的顺序是从亮,暗,红到蓝,停,4个步骤第一个模式
unsignedcharpanduan=0;
P1_1)
P0=zhifu0[15];
P2=zhifu2[1];
delay500();
panduan=1;
while(panduan)
{
liang_key();
show(liang_temp);
delay20();
panduan=0;
ljs=liang_temp;
delay20();
}
P0=zhifu0[15];
P2=zhifu2[2];
while(panduan)
an_key();
show(an_temp);
if(!
panduan=0;
ajs=an_temp;
P2=zhifu2[3];
R_to_B_key();
rtobjs=R_to_B_temp;
}
panduan=1;
P2=zhifu2[4];
while(panduan)
stop_key();
show(stop_temp);
if(!
panduan=0;
stopjs=stop_temp;
eeprom_erase(0);
eeprom_writer(0,liang_temp);
eeprom_writer(1,an_temp);
eeprom_writer(2,R_to_B_temp);
eeprom_writer(3,stop_temp);
P0=0X0;
P2=0X0;
//red=1;
//blue=0;
//yq=yq2=0;
rtobjs=R_to_B_temp;
stopjs=stop_temp;
ajs=an_temp;
ljs=liang_temp;
voidmode_out(bita1,bita2,bita3,bita4)//a为停留时间,各位为输出值
P1_4=a1;
P1_5=a2;
P1_6=a3;
P1_7=a4;
voidredfun(void)
if(js3c<
4)
if(la)mode_out(1,0,1,0);
elsemode_out(0,0,0,0);
else
mode_out(0,0,0,0);
voidbluefun(void)
if(la)mode_out(0,1,0,1);
elsemode_out(0,0,0,0);
voidallfun(void)
if(js3c<
if(la)mode_out(1,1,1,1);
voidmode1()//模式1
//unsignedchara=0;
switch(rba)
case0:
redfun();
break;
case1:
bluefun();
case2:
allfun();
default:
voidmode_work(unsignedchara)//参数为模式
switch(a)
mode1();
break;
//第一种模式
case3:
case4:
case5:
/*
voiddecipherment_dog()//解密完后才能使用本控制器
if((P1_0==0)&
(P1_1==0))
{
}*/
voidInitTimer1(void)
TMOD=0x11;
EA=1;
ET1=1;
voidInitTimer0(void)
TH0=0xf2;
TL0=0xfb;
ET0=1;
TR0=1;
main()
InitTimer1();
InitTimer0();
P0M0=0XFF;
//配成强上拉
P0M1=0X00;
P2M0=0XFF;
P2M1=0X00;
P1M1=0X00;
P1M0=0XF0;
P0=0;
P2=0;
P1_4=0;
P1_5=0;
P1_6=0;
P1_7=0;
liang_temp=eeprom_read(0);
an_temp=eeprom_read
(1);
R_to_B_temp=eeprom_read
(2);
stop_temp=eeprom_read(3);
rtobjs=R_to_B_temp;
stopjs=stop_temp;
ajs=an_temp;
ljs=liang_temp;
while
(1)
set_fun();
set_mode();
mode_work(mode);
//**********************************************************
voidTimer1Interrupt(void)interrupt3
TH1=0x7d;
TL1=0xcb;
time_temp++;
if(time_temp>
30)
time_key=1;
voidTimer0Interrupt(void)interrupt1
//TR0=0;
staticuchari=0;
staticucharkj=0;
//10ms
if(la)//如果在亮计时
ljs--;
//亮计数自减
if(ljs==0)//亮的时间到
la=0;
//置0亮暗计数
//还原暗计数值
}
else//如果在暗计时
ajs--;
//晚计数自减
if(ajs==0)//保持暗的时间到
la=1;
//点亮
//还原亮计数初值
js3c++;
//elseP1&
=0x0f;
if(rba==0&
&
js3c>
=3)
i++;
if(i>
i=0;
rtobjs--;
//红到蓝时间自减
if(rtobjs==0)//时间到进入到蓝亮
js3c=1;
rba=1;
rtobjs=R_to_B_temp;
if(rba==1&
}//红到蓝时间自减
rba=2;
if(rba==2&
{i++;
stopjs--;
if(stopjs==0)//时间到进入到蓝亮
rba=0;
rtobjs=R_to_B_temp;
P1_0)//ksj为长按标记。
如果长按,ksj置1,否则置0
kj++;
if(kj>
70){kj=0;
ksj=1;
else
kj=0;
ks