基于89C52单片机的智能循迹测速避障小车
为了参加我校举办的电子科技竞赛,刚刚开始学习单片机的我们,经过讨论,决定做一辆智能循迹测速小车,综合我们搜集的材料以及自己的修改,我们做出了我们的作品。以下是我们整理的材料:
1、 原理图
1、 最小系统
我们采用的是89C52单片机来做小车的最小系统,针对自己的需要只把要用到的排针口接了上去,具体电路图如下:
2、 电机驱动
我们采用L293D作为驱动芯片,L293D是一种直流电机控制器件,具有外围电路简单,易于集成、控制等特点,电路图如下:
其中我们用TLP521-4光耦器作为电机的稳定,即稳定的是电机的电压,避免电机的电流过大烧坏单片机,起到保护单片机的作用,增加安全性,减少电路干扰,简化电路设计。其电路图如下:
3、 测速电路
我们采用RPR220反射式光电传感器作为测速器,反射式红外光电传感器模块是一种利用反射式红外光电传感器制成的在传感器的有效检测距离范围内对被测物体的存在性进行检测的电路装置,由红外光发射接收器、电压变化检测电路、检测灵敏度调节电位器、检测状态指示 LED 灯等四个主要部分组成,额定工作电压 DC3.3V 或 DC5.5V(兼容支持 DC3V~DC5.5V,而无需额外的硬件配置),DC5V 工作电压条件下,约为 60mA,最大不超过 80 mA。具体电路图如下:
4、探测器
我们仍采用RPR220反射式光电传感器作为探测器,基于它受被测物体的红外反射特性影响很大,亦能通过检测灵敏度调节电位器进行调节,我们用它来探测黑线(即路线),实现循迹功能。事实
证明
住所证明下载场所使用证明下载诊断证明下载住所证明下载爱问住所证明下载爱问
它的灵敏度是很高的,具体电路如下:
相应的放大电路我们采用LM339芯片作为放大器,LM339芯片通常用作电压比较器,该电压比较器的特点是:1)失调电压小,典型值为2mV;2)电源电压范围宽,单电源为2-36V,双电源电压为±1V-±18V;3)对比较信号源的内阻限制较宽;4)共模范围很大,为0~(Ucc-1.5V)Vo;5)差动输入电压范围较大,大到可以等于电源电压;6)输出端电位可灵活方便地选用。LM339类似于增益不可调的运算放大器,在本装置中,我们将它用来放大探测信号。电路图如下:
5、电源
我们采用L7805作为电源的稳压芯片,虽然用lm78/lm79系列三端稳压IC来组成稳压电源所需的外围元件极少,但是电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。电路图如下:
6、我们用DYP-ME007超声波作为避障部分,DYP-ME007超声波测距模块可提供3cm—3.5m的肥接触式距离感测功能。下图为DYP-ME007外观,包括超声波发射器、接收器与控制电路。其基本工作原理为给予此超声波测距模块一触发信号后发射超声波,当超声波投射到物体上后反射回来时,模块输出一回响信号,以触发信号和回响信号间的间差,来判定物体的距离。
7、程序
驱动程序如下:
#include
//包含单片机寄存器的头文件
#include //包含随机函数rand()的定义文件
#include //包含_nop_()函数定义的头文件
#include
#define uchar unsigned char; //char单字节整型数据或字符型数据
#define uint unsigned int;
#define CM 3
sbit RS=P2^7; //寄存器选择位,将RS位定义为P2.0引脚
sbit RW=P2^6; //读写选择位,将RW位定义为P2.1引脚
sbit E=P2^5; //使能信号位,将E位定义为P2.2引脚
sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚
sbit S_LEFT=P1^4;//左轮测速器
sbit S_RIGHT=P1^5;//右轮测速器
sbit EN12=P3^6;//电机1使能端
sbit IN1=P2^1;//电机1前进驱动
sbit IN2=P2^2;//电机1后退驱动
sbit EN34=P3^7;//电机2使能端
sbit IN3=P1^6; //电机2前进驱动
sbit IN4=P1^7; //电机2后退驱动
sbit D1=P1^0;//定义探测器1
sbit D2=P1^1;//定义探测器2
sbit D3=P1^2;//定义探测器3
sbit D4=P1^3;//定义探测器4
sbit SPK=P2^0;//定义蜂鸣器
sbit EX=P3^4;//超声波接收端
sbit TX=P3^5;//超声波发送端
//*****************延时函数
uint count0=0,w=0,w2=0,H,L;//定义需要用到的变量
float w0,w3,w1,w4;//
unsigned int p,j,k,s,m;//
unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字
unsigned char code string[ ]={""}; //定义字符数组显示提示信息
//unsigned char count,count2,count3; //定义变量统计中断累计次数
uint PWM=20;//定义占空比
/**********************************************************/
void delay1(int ms)//延时函数
{ unsigned char y;
while(ms--)
{
for(y = 0; y<250; y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void forward()// 前进函数
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
PWM=85;
TR0=1;
}
void forward2()//前进函数2
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
PWM=90;
TR0=1;
}
void stop1()//停止函数
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
TR0=0;
}
void turnleft()//左转函数
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
PWM=50;
TR0=1;
}
void turnright()// 右转函数
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
PWM=50;
TR0=1;
}
void back()//后退函数
{
IN1=0;
IN2=0;
IN3=0;
IN4=1;
PWM=60;
TR0=1;
}
//-- 蜂鸣
void delay5(unsigned int cnt)
{
while(--cnt);
}
void speak()
{
unsigned char i,j;
for(i=0;i<3;i++)
{
for(j=0;j<200;j++)// 喇叭发声的时间循环,改变大小可以改变发声时间长短
{
delay5(80); // 参数决定发声的频率,估算值,可以自行更改参数并
SPK=!SPK;
}
SPK=1; // 喇叭停止工作,间歇的时间,可更改
delay5(20000);
}
}
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);
}
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
8-6,写指令时,E为高脉冲,
// 就是让E从0到1发生正跳变,所以应先置"0"
_nop_();
_nop_(); //空操作两个机器周期,给硬件反应时间
P0=dictate; //将数据送入P0口,即写入指令或地址
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
E=1; //E置高电平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令
}
void WriteAddress(unsigned char x)
{
WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"
}
void WriteData(unsigned char y)
{
while(BusyTest()==1);
RS=1; //RS为高电平,RW为低电平时,可以写入数据
RW=0;
E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,
// 就是让E从0到1发生正跳变,所以应先置"0"
P0=y; //将数据送入P0口,即将数据写入液晶模块
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
E=1; //E置高电平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令
}
void LcdInitiate(void)
{
delay(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间
WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
delay(5); //延时5ms ,给硬件一点反应时间
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x38); //连续三次,确保初始化成功
delay(5);
WriteInstruction(0x0c); //显示模式设置:显示开,无光标,光标不闪烁
delay(5);
WriteInstruction(0x06); //显示模式设置:光标右移,字符不移
delay(5);
WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除
delay(5);
}
void DisplaySecond()
{
unsigned int i,j,k,q,t,d,z;
i=s/10; //取整运算,求得十位数字
j=s%10;
//取余运算,求得各位数字
WriteAddress(0x44); //写显示地址,将十位数字显示在第2行第11列
WriteData(digit[i]); //将十位数字的字符常量写入LCD
WriteData(digit[j]);
k=m%10; //将个位数字的字符常量写入LCD
WriteAddress(0x42);
WriteData(digit[k]);
WriteData(':');
q=p/1000;
t=(p/100)%10;
d=(p/10)%10;
z=p%10;
WriteAddress(0x4a);
WriteData(digit[q]);
WriteData(digit[t]);
WriteData(digit[d]);
WriteData(digit[z]);
WriteAddress(0x48);
WriteData('s');
WriteData(':');
}
//-- 定时器 1 用于输出 PWM 信号控制电机速度
void Init()
{
TMOD=0x11;
TH1=(65536-100)/256;//100us溢出一次
TL1=(65536-100)%256;
ET1=1;
EA=1;
TR1=1;
}
//定时器1
void time1()interrupt 3//产生PWM
{
int speed;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
speed++;
if(speed==PWM)
{EN12=0;EN34=0;}
if(speed==100)
{speed=0;EN12=1;EN34=1;}
}
void Time0(void ) interrupt 1 using 1 //定时器T0的中断编号为1,使用第1组工作寄存器
{
unsigned char count,count2,count3;; //定义变量统计中断累计次数
count++; //每产生1次中断,中断累计次数加1
if(count==20) //如果中断次数计满20次
{
count=0; //中断累计次数清0
s++; //秒加1
}
if(s==60) //如果计满60秒
{
s=0; //秒清0
m++; //分钟加1
}
if(m==100)
{
s=0;
}
count2++;
{
if(count2==1&&S_LEFT==1)
{
j+=CM;
count2=0;
}
if(count2>1&&count2<20&&S_LEFT==1)
{
j+=CM;
count2=0;
}
}
count3++;
{if(count3==1&&S_RIGHT==1)
{
k+=CM;
count3=0;
}
if(count3>1&&count3<20&&S_RIGHT==1)
{
k+=CM;
count3=0;
}
}
p=(j+k)/2;
TH0=(65536-50000)/256; //定时器T0高8位重新赋初值
TL0=(65536-50000)%256; //定时器T0低8位重新赋初值
}
void main()
{
unsigned char i;
LcdInitiate(); //调用LCD初始化函数
Init();
TMOD=0x11; //使用定时器T0的模式1
TH0=(65536-50000)/256; //定时器T0的高8位设置初值
TL0=(65536-50000)%256; //定时器T0的低8位设置初值
EA=1; //开总中断
ET0=1; //定时器T0中断允许
TR0=1; //启动定时器T0
EX0=1;
IT0=0;
s=0;
p=0; //秒初始化为0
WriteAddress(0x00); //写地址,从第1行第4列开始显示
i=0; //从字符数组的第1个元素开始显示
while(string[i]!='\0') //只要没有显示到字符串的结束标志'\0',就继续
{
WriteData(string[i]); //将第i个字符数组元素写入LCD
i++; //指向下一个数组元素
}
while(1) //无限循环
{
DisplaySecond(); //显示秒
delay(5);
//给硬件一点反应时间
forward2();//上电后先前进
TX=0;
TX=1;
delay1(1);
TX=0;
TH2=0;
TL2=0;
TR2=0;
while(!EX);
TR2=1;
while(EX){if(TH1==50){TH2=0;TL2=0;break;} }
TR2=0;
H=TH2;
L=TL2;
H=TH2;
H=TH2;
L=TL2;
H=TH2;
w=H*256+L;//放入16位的高8位
w0=(float)w;//
w1=w0*340/10000/2; //由空气中的声速转为厘米
w2=(int)w1; //取整
w3=w1-w2;// 差值即为距离
w4=w3*10;//小数取十位
WriteAddress(0x00);
WriteData('c');
WriteData('e');
WriteData('j');
WriteData('u');
WriteData(':');
WriteData(w2/100+0x30);
WriteData(w2/10%10+0x30);
WriteData(w2%10+0x30);
WriteData('.');
WriteData(w4+0x30);
WriteData('c');
WriteData('m');
if(w2<=7){stop1();delay5(80);back();speak();delay5(40000);}
else if(w2<=11&&w2>7){turnleft();speak();}
if((D1==1&&D2==0&&D3==0&&D4==0)||(D1==0&&D2==1&&D3==0&&D4==0)||(D1==1&&D2==1&&D3==0&&D4==0))
{turnleft();if(D1==0&&D2==0&&D3==0&&D4==0)forward();}
else if((D1==0&&D2==0&&D3==1&&D4==0)||(D1==0&&D2==0&&D3==0&&D4==1)||(D1==0&&D2==0&&D3==1&&D4==1))
{turnright();if(D1==0&&D2==0&&D3==0&&D4==0)forward();}
else if(m==1)
{stop1();speak();}
delay1(10);
}
}袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈
芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈