文章目录[隐藏]
基于AT89C51的蓝牙循迹避障小车
对标题的解读:
- AT89C51:在下使用的是STC89C52这款芯片,c51和c52在新手入门阶段是一样的,所以不必纠结于到底是哪个名字,在keil芯片选择中,选择c52即可,入门阶段c51=c52。
- 蓝牙:HC—05蓝牙
- 循迹:循迹巡的是黑白迹,即小车可以顺着白色布上面的黑色胶带跑。
- 避障:小车在循迹过程中遇到障碍物可识别并转弯,绕过后再回到原路线,也可遇到障碍物然后拐弯朝别的方向前进。
这两天去看了一本书,感受到了伟人生平为人处事的一些智慧。细节的重要性,志存高远,行循自然的真理!
该项目可以实现的任务(含一些做项目的过程,与小伙伴一起战斗!)
上b站链接:【谨以此纪念我和朋友们花一个月时间做蓝牙循迹避障小车项目的经历。-哔哩哔哩】https://b23.tv/uiLuGb
该项目需要用到的材料
上b站链接:【51蓝牙小车材料-哔哩哔哩】https://b23.tv/B4sHfq
接下来我根据代码解析解析这个小车
这是两个头文件
#include <REGX52.H>
#include <intrins.h>
预处理三个定义为了书写方便
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
定义使用到的所以端口
sbit a1=P1^7;sbit a2=P1^6;
sbit b1=P1^5;sbit b2=P1^4;
sbit c1=P0^7;sbit c2=P0^6;
sbit d1=P0^5;sbit d2=P0^4;
定义一个延时的函数(用的时候可以直接用的函数)
void Delay(uint xms)
{
uchar i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
小车运动的所有函数(前进后退左转右转)
void forward()
{
a1=1;a2=0;
b1=1;b2=0;
c1=1;c2=0;
d1=1;d2=0;
}
void back()
{
a1=0;a2=1;
b1=0;b2=1;
c1=0;c2=1;
d1=0;d2=1;
}
void left()
{
a1=0;a2=1;
b1=0;b2=1;
c1=1;c2=0;
d1=1;d2=0;
Delay(50);
a1=0;a2=0;
b1=0;b2=0;
c1=0;c2=0;
d1=0;d2=0;
Delay(1);
}
void right()
{
a1=1;a2=0;
b1=1;b2=0;
c1=0;c2=1;
d1=0;d2=1;
Delay(50);
a1=0;a2=0;
b1=0;b2=0;
c1=0;c2=0;
d1=0;d2=0;
Delay(1);
}
void stop()
{
a1=0;a2=0;
b1=0;b2=0;
c1=0;c2=0;
d1=0;d2=0;
}
有细心的朋友发现其中有Deay();这个函数的使用,因为学长要求转弯速度减下来才能更好完成任务,当时刚学51的我只能想到用delay();来做一个简易的“pwm”。多写一个stop的函数是因为当时不会按键消抖的我只能让车在遥控器不按键时蓝牙发送0,按键时发送按键指令来操作。
接下来就是蓝牙的配置了,我用的是HC—05蓝牙哦。
```c
void Com_Int(void) interrupt 4
{
uchar receive_data;
EA = 0;
if(RI == 1)
{
RI=0;
a1=0;a2=0;
b1=0;b2=0;
c1=0;c2=0;
d1=0;d2=0;
receive_data = SBUF;
switch(receive_data)
{
case ('1'):
forward();break;
case ('2'):
back();break;
case ('3'):
left();break;
case ('4'):
right();break;
case ('0'):
stop();break;
}
}
EA = 1;
}
void UsartConfiguration()
{
SCON=0X50;
TMOD=0X20;
PCON=0X00;
TH1=0Xfd;
TL1=0Xfd;
TR1= 1;
ES = 1;
EA = 1;
}
void main()
{
UsartConfiguration();
while(1);
}
接下来是视频中小车的全部代码(包含超声波的使用和绕行的程序,还有利用中断切换小车自动行走,绕行,遥控三种模式)
第一次写博客,有点生疏,有什么问题可以评论区问我哦,我是大学生很有时间解决初学者的问题的,帮助大家的同时也可以提升自己!
#include"reg51.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uint time=0,timer=0,timi=0;
ulong S=0,T=0,R=0;
uchar flag=0;
uchar receiveData;
uint x=0,y=0,z=0;
uint a[40]={0};
uint i;
sbit RX1=P3^3;
sbit TX1=P3^2;
sbit RX2=P3^7;
sbit TX2=P3^6;
sbit RX3=P3^4;
sbit TX3=P3^5;
sbit input1=P2^0;
sbit input2=P2^1;
sbit input3=P2^2;
sbit input4=P2^3;
sbit input5=P2^4;
sbit a1=P1^7;sbit a2=P1^6;
sbit b1=P1^5;sbit b2=P1^4;
sbit c1=P0^7;sbit c2=P0^6;
sbit d1=P0^5;sbit d2=P0^4;
/************************************************************************************************************/
void stop()
{
a1=0;a2=0;b1=0;b2=0;c1=0;c2=0;d1=0;d2=0;
}
void maichong()
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();
}
void Delay(uint xms)
{
uchar i, j;
while(xms--)
{
i=2;
j=239;
do
{
while (--j);
} while (--i);
}
}
int ys3(uint xms)
{
uchar i, j;
while(xms--)
{
i=2;
j=239;
do
{
while (--j)
if(RX2)
return 0;
}
while (--i);
}
return 0;
}
int ys4(uint xms)
{
uchar i, j;
while(xms--)
{
i=2;
j=239;
do
{
while (--j)
if(!RX2)
return 0;
}
while (--i);
}
return 0;
}
void forward(int pwm,uint time)
{
int t=0;
while(t<time)
{
a1=1,a2=0;b1=1,b2=0;c1=1,c2=0;d1=1,d2=0;Delay(pwm);
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;Delay(10-pwm);
t++;
}
}
void forward3(int pwm)
{
a1=1,a2=0;b1=1,b2=0;c1=1,c2=0;d1=1,d2=0;ys3(pwm);
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys3(10-pwm);
}
void forward4(int pwm)
{
a1=1,a2=0;b1=1,b2=0;c1=1,c2=0;d1=1,d2=0;ys4(pwm);
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys4(10-pwm);
}
void left(int z1,int z0,int u1,int u2,uint time)
{
int t=0;
while(t<time)
{ // ab cd
a1=0,a2=1;b1=0,b2=1;c1=1,c2=0;d1=1,d2=0;Delay(z1);// 1 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;Delay(z0);// 0 0 0
a1=0,a2=1;b1=0,b2=1;c1=0,c2=0;d1=0,d2=0;Delay(u1);// 1 0 0
a1=0,a2=0;b1=0,b2=0;c1=1,c2=0;d1=1,d2=0;Delay(u2);// 0 1 0
t++;
}
}
void left3(int z1,int z0,int u1,int u2)
{ // ab cd
a1=0,a2=1;b1=0,b2=1;c1=1,c2=0;d1=1,d2=0;ys3(z1);// 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys3(z0);// 0 0
a1=0,a2=1;b1=0,b2=1;c1=0,c2=0;d1=0,d2=0;ys3(u1);// 1 0
a1=0,a2=0;b1=0,b2=0;c1=1,c2=0;d1=1,d2=0;ys3(u2);// 0 1
}
void left4(int z1,int z0,int u1,int u2)
{ // ab cd
a1=0,a2=1;b1=0,b2=1;c1=1,c2=0;d1=1,d2=0;ys4(z1);// 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys4(z0);// 0 0
a1=0,a2=1;b1=0,b2=1;c1=0,c2=0;d1=0,d2=0;ys4(u1);// 1 0
a1=0,a2=0;b1=0,b2=0;c1=1,c2=0;d1=1,d2=0;ys4(u2);// 0 1
}
void right(int z1,int z0,int u1,int u2,uint time)
{
int t=0;
while(t<time)
{ // ab cd
a1=1,a2=0;b1=1,b2=0;c1=0,c2=1;d1=0,d2=1;Delay(z1);// 1 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;Delay(z0);// 0 0 0
a1=1,a2=0;b1=1,b2=0;c1=0,c2=0;d1=0,d2=0;Delay(u1);// 1 0 0
a1=0,a2=0;b1=0,b2=0;c1=0,c2=1;d1=0,d2=1;Delay(u2);// 0 1 0
t++;
}
}
void right3(int z1,int z0,int u1,int u2)
{ // ab cd
a1=1,a2=0;b1=1,b2=0;c1=0,c2=1;d1=0,d2=1;ys3(z1);// 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys3(z0);// 0 0
a1=1,a2=0;b1=1,b2=0;c1=0,c2=0;d1=0,d2=0;ys3(u1);// 1 0
a1=0,a2=0;b1=0,b2=0;c1=0,c2=1;d1=0,d2=1;ys3(u2);// 0 1
}
void right4(int z1,int z0,int u1,int u2)
{ // ab cd
a1=1,a2=0;b1=1,b2=0;c1=0,c2=1;d1=0,d2=1;ys4(z1);// 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys4(z0);// 0 0
a1=1,a2=0;b1=1,b2=0;c1=0,c2=0;d1=0,d2=0;ys4(u1);// 1 0
a1=0,a2=0;b1=0,b2=0;c1=0,c2=1;d1=0,d2=1;ys4(u2);// 0 1
}
void go(int z1,int z0,int u1,int u2,uint time)
{
int t=0;
while(t<time)
{ // ab cd
a1=1,a2=0;b1=1,b2=0;c1=1,c2=0;d1=1,d2=0;Delay(z1);// 1 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;Delay(z0);// 0 0 0
a1=1,a2=0;b1=1,b2=0;c1=0,c2=0;d1=0,d2=0;Delay(u1);// 1 0 0
a1=0,a2=0;b1=0,b2=0;c1=1,c2=0;d1=1,d2=0;Delay(u2);// 0 1 0
t++;
}
}
void go3(int z1,int z0,int u1,int u2)
{ // ab cd
a1=1,a2=0;b1=1,b2=0;c1=1,c2=0;d1=1,d2=0;ys3(z1);// 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys3(z0);// 0 0
a1=1,a2=0;b1=1,b2=0;c1=0,c2=0;d1=0,d2=0;ys3(u1);// 1 0
a1=0,a2=0;b1=0,b2=0;c1=1,c2=0;d1=1,d2=0;ys3(u2);// 0 1
}
void go4(int z1,int z0,int u1,int u2)
{ // ab cd
a1=1,a2=0;b1=1,b2=0;c1=1,c2=0;d1=1,d2=0;ys4(z1);// 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys4(z0);// 0 0
a1=1,a2=0;b1=1,b2=0;c1=0,c2=0;d1=0,d2=0;ys4(u1);// 1 0
a1=0,a2=0;b1=0,b2=0;c1=1,c2=0;d1=1,d2=0;ys4(u2);// 0 1
}
void down(int z1,int z0,int u1,int u2,uint time)
{
int a=0;
while(a<time)
{ // ab cd
a1=0,a2=1;b1=0,b2=1;c1=0,c2=1;d1=0,d2=1;Delay(z1);// 1 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;Delay(z0);// 0 0 0
a1=0,a2=1;b1=0,b2=1;c1=0,c2=0;d1=0,d2=0;Delay(u1);// 1 0 0
a1=0,a2=0;b1=0,b2=0;c1=0,c2=1;d1=0,d2=1;Delay(u2);// 0 1 0
a++;
}
}
void down3(int z1,int z0,int u1,int u2)
{ // ab cd
a1=0,a2=1;b1=0,b2=1;c1=0,c2=1;d1=0,d2=1;ys3(z1);// 1 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys3(z0);// 0 0 0
a1=0,a2=1;b1=0,b2=1;c1=0,c2=0;d1=0,d2=0;ys3(u1);// 1 0 0
a1=0,a2=0;b1=0,b2=0;c1=0,c2=1;d1=0,d2=1;ys3(u2);// 0 1 0
}
void down4(int z1,int z0,int u1,int u2)
{ // ab cd
a1=0,a2=1;b1=0,b2=1;c1=0,c2=1;d1=0,d2=1;ys4(z1);// 1 1 1
a1=0,a2=0;b1=0,b2=0;c1=0,c2=0;d1=0,d2=0;ys4(z0);// 0 0 0
a1=0,a2=1;b1=0,b2=1;c1=0,c2=0;d1=0,d2=0;ys4(u1);// 1 0 0
a1=0,a2=0;b1=0,b2=0;c1=0,c2=1;d1=0,d2=1;ys4(u2);// 0 1 0
}
void rao(uint x,uint y,uint z)
{
right(5,5,0,0,40);
forward(5,x);
left(5,5,0,0,40);
forward(5,y);
left(5,5,0,0,40);
forward(5,z);
}
void xb3()
{
if(S<280)
stop();
if(S>280)
{
if(input1==0&&input2==0&&input3==0&&input4==0&&input5==0) down3(2,8,0,0); // 0 0 0 0 0
if(input1==1&&input2==1&&input3==1&&input4==1&&input5==1) forward3(8); // 1 1 1 1 1
if(input1==0&&input2==1&&input3==0&&input4==1&&input5==0) forward3(8); // 0 1 0 1 0
if(input1==0&&input2==1&&input3==1&&input4==1&&input5==0) forward3(8); // 1 0 0 0 1
if(input1==0&&input2==0&&input3==1&&input4==0&&input5==0) forward3(8); // 0 0 1 0 0
if(input1==0&&input2==1&&input3==1&&input4==0&&input5==0) go3(6,0,0,4); // 0 1 1 0 0
if(input1==0&&input2==1&&input3==0&&input4==0&&input5==0) go3(3,0,0,7); // 0 1 0 0 0
if(input1==1&&input2==1&&input3==0&&input4==0&&input5==0) go3(0,0,0,10); // 1 1 0 0 0
if(input1==1&&input2==0&&input3==0&&input4==0&&input5==0) left3(2,0,0,8); // 1 0 0 0 0
if(input1==0&&input2==0&&input3==1&&input4==1&&input5==0) go3(6,0,4,0); // 0 0 1 1 0
if(input1==0&&input2==0&&input3==0&&input4==1&&input5==0) go3(3,0,7,0); // 0 0 0 1 0
if(input1==0&&input2==0&&input3==0&&input4==1&&input5==1) go3(0,0,10,0); // 0 0 0 1 1
if(input1==0&&input2==0&&input3==0&&input4==0&&input5==1) right3(2,0,8,0); // 0 0 0 0 1
}
}
void xb4()
{
if(S<280)
stop();
if(S>280)
{
if(input1==0&&input2==0&&input3==0&&input4==0&&input5==0) down4(2,8,0,0); // 0 0 0 0 0
if(input1==1&&input2==1&&input3==1&&input4==1&&input5==1) forward4(8); // 1 1 1 1 1
if(input1==0&&input2==1&&input3==0&&input4==1&&input5==0) forward4(8); // 0 1 0 1 0
if(input1==0&&input2==1&&input3==1&&input4==1&&input5==0) forward4(8); // 1 0 0 0 1
if(input1==0&&input2==0&&input3==1&&input4==0&&input5==0) forward4(8); // 0 0 1 0 0
if(input1==0&&input2==1&&input3==1&&input4==0&&input5==0) go4(6,0,0,4); // 0 1 1 0 0
if(input1==0&&input2==1&&input3==0&&input4==0&&input5==0) go4(3,0,0,7); // 0 1 0 0 0
if(input1==1&&input2==1&&input3==0&&input4==0&&input5==0) go4(0,0,0,10); // 1 1 0 0 0
if(input1==1&&input2==0&&input3==0&&input4==0&&input5==0) left4(2,0,0,8); // 1 0 0 0 0
if(input1==0&&input2==0&&input3==1&&input4==1&&input5==0) go4(6,0,6,0); // 0 0 1 1 0
if(input1==0&&input2==0&&input3==0&&input4==1&&input5==0) go4(3,0,0,7); // 0 0 0 1 0
if(input1==0&&input2==0&&input3==0&&input4==1&&input5==1) go4(0,0,0,10); // 0 0 0 1 1
if(input1==0&&input2==0&&input3==0&&input4==0&&input5==1) right4(2,0,8,0); // 0 0 0 0 1
}
}
void xb()
{
if(S<280)
rao(100,150,120);
if(S>280)
{
if(input1==0&&input2==0&&input3==0&&input4==0&&input5==0) down(2,8,0,0,1); // 0 0 0 0 0
if(input1==1&&input2==1&&input3==1&&input4==1&&input5==1) forward(8,1); // 1 1 1 1 1
if(input1==0&&input2==1&&input3==0&&input4==1&&input5==0) forward(8,1); // 0 1 0 1 0
if(input1==0&&input2==1&&input3==1&&input4==1&&input5==0) forward(8,1); // 1 0 0 0 1
if(input1==0&&input2==0&&input3==1&&input4==0&&input5==0) forward(8,1); // 0 0 1 0 0
if(input1==0&&input2==1&&input3==1&&input4==0&&input5==0) go(6,0,0,4,1); // 0 1 1 0 0
if(input1==0&&input2==1&&input3==0&&input4==0&&input5==0) go(3,0,0,7,2); // 0 1 0 0 0
if(input1==1&&input2==1&&input3==0&&input4==0&&input5==0) go(0,0,0,10,5); // 1 1 0 0 0
if(input1==1&&input2==0&&input3==0&&input4==0&&input5==0) left(2,0,0,8,10); // 1 0 0 0 0
if(input1==0&&input2==0&&input3==1&&input4==1&&input5==0) go(6,0,4,0,1); // 0 0 1 1 0
if(input1==0&&input2==0&&input3==0&&input4==1&&input5==0) go(3,0,7,0,2); // 0 0 0 1 0
if(input1==0&&input2==0&&input3==0&&input4==1&&input5==1) go(0,0,10,0,5); // 0 0 0 1 1
if(input1==0&&input2==0&&input3==0&&input4==0&&input5==1) right(2,0,8,0,20); // 0 0 0 0 1
}
}
int xjbz2()
{
TH0=0;TL0=0;
TX2=1;maichong();TX2=0;
while(!RX2)xb3();
TR0=1;
while(RX2)xb4();
TR0=0;
timer=TH0*256+TL0;
S=(long)(timer*0.17);
if(S<15&&flag==0)return 0;
else{flag=0;return 1;}
}
void xjbz()
{
if(xjbz2())xb();
}
void T0_int(void) interrupt 1
{
flag=1;
}
void Usart() interrupt 4
{
if(RI == 1)
{
RI=0;
receiveData = SBUF;
switch(receiveData)
{
case ('l'):x=1,y=0,z=0;break;//moshi(1);
case ('m'):x=0,y=1,z=0;break;//moshi(2);
case ('n'):x=0,y=0,z=1;break;//moshi(3);
case('1'):for(i=0;i<26;i++)a[i]=0;a[0]=1;break;//forward(10);
case('o'):for(i=0;i<26;i++)a[i]=0;a[1]=1;break;//forward(7);
case('2'):for(i=0;i<26;i++)a[i]=0;a[2]=1;break;//forward(4);
case('3'):for(i=0;i<26;i++)a[i]=0;a[3]=1;break;//back(10);
case('p'):for(i=0;i<26;i++)a[i]=0;a[4]=1;break;//back(7);
case('4'):for(i=0;i<26;i++)a[i]=0;a[5]=1;break;//back(4);
case('5'):for(i=0;i<26;i++)a[i]=0;a[6]=1;break;//left(8);
case('q'):for(i=0;i<26;i++)a[i]=0;a[7]=1;break;//left(5);
case('6'):for(i=0;i<26;i++)a[i]=0;a[8]=1;break;//left(2);
case('7'):for(i=0;i<26;i++)a[i]=0;a[9]=1;break;//right(8);
case('r'):for(i=0;i<26;i++)a[i]=0;a[10]=1;break;//right(5);
case('8'):for(i=0;i<26;i++)a[i]=0;a[11]=1;break;//right(2);
case('9'):for(i=0;i<26;i++)a[i]=0;a[12]=1;break;//turnleft(10);
case('s'):for(i=0;i<26;i++)a[i]=0;a[13]=1;break;//turnleft(7);
case('a'):for(i=0;i<26;i++)a[i]=0;a[14]=1;break;//turnleft(4);
case('b'):for(i=0;i<26;i++)a[i]=0;a[15]=1;break;//turnright(10);
case('t'):for(i=0;i<26;i++)a[i]=0;a[16]=1;break;//turnright(7);
case('c'):for(i=0;i<26;i++)a[i]=0;a[17]=1;break;//turnright(4);
case('d'):for(i=0;i<26;i++)a[i]=0;a[18]=1;break;//downleft(10);
case('e'):for(i=0;i<26;i++)a[i]=0;a[19]=1;break;//downleft(6);
case('f'):for(i=0;i<26;i++)a[i]=0;a[20]=1;break;//downright(10);
case('g'):for(i=0;i<26;i++)a[i]=0;a[21]=1;break;//downright(6);
case('h'):for(i=0;i<26;i++)a[i]=0;a[22]=1;break;//pyleft(6);
case('i'):for(i=0;i<26;i++)a[i]=0;a[23]=1;break;//pyleft(10);
case('j'):for(i=0;i<26;i++)a[i]=0;a[24]=1;break;//pyright(6);
case('k'):for(i=0;i<26;i++)a[i]=0;a[25]=1;break;//pyright(10);
case ('0'):
for(i=0;i<26;i++)a[i]=0;break;
}
}
}
void kaishi()
{
SCON=0X50;
TMOD=0X21;
PCON=0X00;
TH1=0Xfd;
TL1=0Xfd;
ET0=1;
TR1=1;
ES=1;
EA=1;
}
void main()
{
kaishi();
x=1,y=0,z=0;
while(1)
{
while(x)//yaokong();
{
stop();
while(a[0])forward(10,1);
while(a[1])forward(7,1);
while(a[2])forward(4,1);
while(a[3])down(10,0,0,0,1);
while(a[4])down(7,3,0,0,1);
while(a[5])down(4,6,0,0,1);
while(a[6])left(8,2,0,0,1);
while(a[7])left(5,5,0,0,1);
while(a[8])left(2,8,0,0,1);
while(a[9])right(8,2,0,0,1);
while(a[10])right(5,5,0,0,1);
while(a[11])right(2,8,0,0,1);
while(a[12])go(4,0,0,6,1);
while(a[13])go(2,3,0,5,1);
while(a[14])go(0,6,0,4,1);
while(a[15])go(4,0,6,0,1);
while(a[16])go(2,3,5,0,1);
while(a[17])go(0,6,4,0,1);
while(a[18])down(4,0,0,6,1);
while(a[19])down(2,3,0,5,1);
while(a[20])down(4,0,6,0,1);
while(a[21])down(2,3,5,0,1);
while(a[22])go(2,0,0,8,1);
while(a[23])left(0,0,0,10,1);
while(a[24])go(2,0,8,0,1);
while(a[25])right(0,0,10,0,1);
}
while(y)//xjbz();
xjbz();
while(z)//bz();
;
}
}
版权声明:本文为CSDN博主「拯救9亿美少女我辈义不容辞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/WBB123222/article/details/120663834
暂无评论