【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT)

news2024/11/25 6:30:09

typora-root-url: ./

【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT)

文章目录

    • typora-root-url: ./
  • 【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT)
    • 设计说明书
      • 摘要
      • 设计框架架构
      • 设计说明书及设计文件
      • 源码展示

设计说明书

摘要

对于如何实现家庭防盗这一问题,传统机械锁由于构造简单,被撬事件屡见不鲜;电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。本设计以单片机STC89C52作为密码锁监控装置的检测和控制核心,采用矩阵键盘输入的电子密码和指纹密码解锁两种解锁方式。系统采用LCD12864液晶显示屏实时更新显示信息,并设有修改密码功能,在解锁或修改密码时如果在未确定时发现自己按错了可以进行退格或重输的操作,如果发现旁边有人看着或者不想输入密码了可以进行退出输入的操作,从一定程度上将确保安全性。测试结果表明,本系统各项功能已达到本设计的所有要求。
资料链接
原理图工程文件
原理图截图
搭建视频
答辩论文低重复率文档,25354字
英文文献及翻译
答辩PPT
实物操作图

设计框架架构

前 言… 1

第一章 绪论… 2

第一节 研究背景与研究意义… 2

第二节 指纹识别应用及前景… 3

第三节 本文的主要研究内容… 4

第四节 本章小结… 4

第二章 基于单片机的指纹识别系统设计系统方案分析… 5

第一节 系统设计方案需求… 5

第二节 系统元器件方案选择… 5

一、主控芯片选择… 5

二、指纹模块选择… 6

三、显示器选择… 6

四、数据存储芯片选择… 7

五、人机交互按键选择… 7

第三节 系统结构总框图… 7

第四节 本章小结… 8

第三章 基于单片机的指纹识别系统硬件设计… 9

第一节 单片机最小系统电路设计… 9

一、单片机介绍… 9

二、单片机最小系统电路设计… 10

第二节 电源电路设计… 11

第三节 按键电路设计… 12

第四节 LED显示模块电路… 12

第五节 LCD液晶显示模块电路… 13

一、LCD12864介绍… 13

二、LCD12864电路设计… 13

第六节 指纹识别电路设计… 14

第七节 蜂鸣器报警模块电路… 15

第八节 24C02存储电路设计… 16

一、24C02芯片介绍… 16

二、24C02电路设计… 16

第九节 继电器电路设计… 17

第十节 系统总电路图… 18

第十一节 本章小结… 18

第四章 基于单片机的指纹识别系统软件设计… 19

第一节 Keil软件介绍… 19

第二节 主函数设计… 19

一、主函数流程… 19

二、主函数程序源码… 21

第三节 按键程序设计… 22

一、按键程序流程… 22

二、按键程序源码… 23

第四节 LCD程序设计… 25

一、LCD程序流程… 25

二、LCD程序源码… 26

第五节 蜂鸣器及LED程序设计… 26

一、蜂鸣器及LED程序流程… 26

二、蜂鸣器及LED程序源码… 27

第六节 本章小结… 28

第五章 基基于单片机的指纹识别系统的实现… 29

第一节 系统调试及遇到的问题… 29

第二节 系统功能测试… 31

第三节 本章小结… 34

总 结… 35

致 谢… 36

参考文献… 37

附 录… 39

一、英文原文… 39

二、英文翻译… 44

三、工程图纸… 48

四、源代码… 49

设计说明书及设计文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码展示


#include<reg52.h>			//头文件
#include<LCD12864.h>
#include<AT24C02.h>
#include<KEY.h>
#include<FPM10A.h>
#define uchar unsigned char	//宏定义
#define uint unsigned int
#define ulong unsigned long
#define MAX 5          //指纹最大数量
#define ID_MAX 3//输入ID最大位数
sbitjdq=P3^6;
sbit buzz=P3^7;
sbit led=P0^0;
uint T0_num=0;
uchar mode=0;   //0正常打卡,1管理界面,2注册模式,3删除模式,4查询模式,5修改密码,6校准时钟,7工作时间
uchar mode_num=0;
uint ID=0;		 //存储输入编号ID
uchar n=0;	     //输入的位数
bit zhiwen_f=0;	 //1=标记进入指纹采集
uchar shu;
uchar a;										//存储按键值
uchar num;										//记录输入的密码位数
bit   in_f;										//输入密码的标志
bit   reset_f;									//重设密码的标志
bit   input_f;									//六位密码按完的标志
uchar reset_num;								//标记修改密码阶段,=1输入旧密码,=2输入新密码,=3再次输入新密码
ulonglow_mima=0;//系统密码
ulongin_mima=0; //暂存输入的密码
ulongnew_mima=0;//暂存输入新密码
uchar set_f=0;
uchar temp[5]="    \0";  
/********************************************************
函数名称:void delayms(uintms)
函数作用:毫秒延时函数
参数说明:
********************************************************/ 
void delayms(uintms)
{
	unsigned char i=100,j;
	for(;ms;ms--)
	{
		while(--i)
		{
			j=10;
			while(--j);
		}
	}
}
/********************************************************
函数名称:void didi(uchar i)
函数作用:蜂鸣器鸣叫
参数说明:i为鸣叫次数
********************************************************/ 
void didi(uchar i)
{
	uchar j;
	for(j=0;j<i;j++)
	{
		led=0;
		buzz=0;
		delayms(20);
		led=1;
		buzz=1;
		delayms(15);
	}
}
/********************************************************
函数名称:void diaplay_mode0()
函数作用:显示打卡主界面
参数说明:
********************************************************/
void diaplay_mode0()
{
	LCD12864_display_string(1,1,"指纹密码锁");
	LCD12864_display_string(0,2,"编号: ");	
	LCD12864_display_string(0,3,"状态: ");
}
/********************************************************
函数名称:void xunzhiwen()
函数作用:查找指纹
参数说明:
********************************************************/
void xunzhiwen()
{
	searchnum=search();
	if((searchnum>=1&&searchnum<=MAX)||searchnum==255)//最多是N个指纹
	{	
		if(searchnum>=1&&searchnum<=MAX)//指纹识别成功
		{
			temp[0]=searchnum%1000/100+0x30;
			temp[1]=searchnum%100/10+0x30;
			temp[2]=searchnum%10+0x30;
			temp[3]=' ';
			LCD12864_display_string(3,2,temp);
			LCD12864_display_string(3,3,"指纹解锁");
			LCD12864_display_string(1,4,"            ");
			in_mima=0;
			num=0;
			input_f=0;
			jdq=0;
			T0_num=0;	
		}
		else//不正确的指纹
		{
			LCD12864_display_string(3,3,"无效指纹");
			didi(3);
		}
		delay1ms(500);
		LCD12864_display_string(3,2,"    ");
		LCD12864_display_string(3,3,"        ");
	}										
}

/********************************************************
函数名称:void cunchu()
函数作用:存储指纹
参数说明:
********************************************************/
void cunchu()
{
	LCD12864_display_string(0,3,"状态: ");
	if(ID>0&&ID<=MAX)
	{
		if(enroll()==1)//采集两次,生成1个指纹模板成功
		{
			if(savefingure(ID)==1)//保存也成功
			{
				LCD12864_display_string(3,3,"录入成功");
				AT24C02_write_date(ID,1);
			} 
			else
				LCD12864_display_string(3,3,"存储失败");	
		}
		else
			LCD12864_display_string(3,3,"采集失败");	
	}
	else
		LCD12864_display_string(3,3,"编号错误");
	n=0;
	ID=0;
	zhiwen_f=0;
}
/********************************************************
函数名称:void shanchu()
函数作用:删除指纹
参数说明:
********************************************************/
void shanchu()
{
	uinti;
	LCD12864_display_string(0,3,"状态: ");
	if(ID>0&&ID<=MAX)
	{
		if(dellfingure(ID)==1)
		{
			LCD12864_display_string(3,3,"删除成功");
			AT24C02_write_date(ID,0);
		}
		else
			LCD12864_display_string(3,3,"删除失败");	
	}
	else
	{
		if(ID==999)
		{
			if(Clear_All()==1)
			{
				for(i=1;i<6;i++)
					AT24C02_write_date(i,0); 
				LCD12864_display_string(3,3,"清空指纹");
			}
			else
				LCD12864_display_string(3,3,"清空失败");	
		}
		else
			LCD12864_display_string(3,3,"编号错误");
	}		
	n=0;
	ID=0;
	zhiwen_f=0;									
}

/********************************************************
函数名称:void display_guanli()
函数作用:显示管理界面
参数说明:
********************************************************/
void display_guanli()
{
	LCD12864_display_string(0,1,"  管理系统界面  ");
	LCD12864_display_string(0,2,"    录入指纹    ");
	LCD12864_display_string(0,3,"    删除指纹    ");
	LCD12864_display_string(0,4,"    修改密码    ");
	switch(mode_num)		
	{
	   case 0: LCD12864_display_string(0,2," >> "); break;
	   case 1: LCD12864_display_string(0,3," >> "); break;
	   case 2: LCD12864_display_string(0,4," >> "); break;
	   default: break;
	}
}
/*********************************************************
函数名称:void chuli()
函数作用:对所按下的按键进行处理
参数说明:
*********************************************************/
void chuli()
{
	if(key_f==1)	//先判断是否有按键按下
	{	
		if(a==11&&mode==0&&in_f==0)
		{
			shu++;
			if(shu>=4)
			{
				AT24C02_write_date(200,0);
				AT24C02_write_date(201,0);
				AT24C02_write_date(202,0);
				low_mima=0;
				shu=0;	
			}
		}	
		else
			shu=0;
		if((mode==2||mode==3)&&a<10)  //如果输入ID状态,并且按下的是数字键
		{
	if(n<ID_MAX)//判断是否为输入状态,并且输入未满最大整数位数,才可以继续输入
			{
				if(n==0)   //判断为编号第1位		
				{	
					LCD12864_display_string(3,2,"        ");
					LCD12864_display_string(0,3,"              ");				
				} 
				LCD12864_display_char(3+n,2,a+0x30);//显示出输入的数字  ASCII[a]
				ID=ID*10+a;//编号计算
				n++;	   //编号输入位数+1
			}										
		}
		if((mode==0||mode==4)&&input_f==0&&a<10)//如果在in_f=1(输入密码状态),并且按下的是数字键
		{			
			if(in_f==1||mode==4)
			{	
				if(num==0)                  //清除显示后、显示输入新密码
					LCD12864_display_string(1,3,"           ");	
				if(reset_f==1&&reset_num>1)
				    LCD12864_display_char(num+1,2,a+0x30);//ASCII[a]
				else
					LCD12864_display_char(num+1,2,'*');//显示“*”
			}
			else
				LCD12864_display_char(num+1,4,'*');//显示“*”
			in_mima=in_mima*10+a;//读入密码	
			num++;			//密码输入次数加一			
			if(num==6)		//六位密码输入完成																				
				input_f=1;	//标记六位密码输入完成						
		}
		if(a==10)
		{
			if(mode==0&&in_f==0)//输入密码
			{
				num=0;
				in_f=1;
				in_mima=0;
				input_f=0;  //清除确定标志
				write_com(0x01);
				LCD12864_display_string(0,1,"请输入管理密码: ");//显示输入密码
			}
		}
		if(a==15) //返回上一级菜单
		{
			if(mode>1)			  //在管理操作中
			{	
				write_com(0x01);
				LCD12864_clear12864(); 
				mode=1;		//回到管理选择界面
			}
			else
			{
				if(mode!=0||in_f==1)
				{
					write_com(0x01);
					mode=0;
					diaplay_mode0();
					in_f=0;
					num=0;
					input_f=0;	
				}
			}			
			if(jdq==0)
			{
				jdq=1;
				T0_num=0;
			}			
		}				
		if(a==11)//选择上一项
		{
			if(mode==1)//选择上一项管理	
			{
				if(mode_num==0)
					mode_num=2;	
				else
					mode_num--;	
			}
		}
		if(a==12)//选择下一项
		{
			if(mode==1)//选择下一项管理
			{
				if(mode_num>=2)
					mode_num=0;	
				else
					mode_num++;		
			}	
		}
		if(a==13) //退格
		{										
			 if(mode==0||mode==4)//在输入密码状态
			 {
				if(num!=0)
				{			 //输入密码个数减1
					num--;
					if(in_f==1||mode==4)
						LCD12864_display_char(num+1,2,' ');	
					else
						LCD12864_display_char(num+1,4,' ');					
					in_mima=in_mima/10;
					input_f=0;
				}
			 }
			 if(mode==2||mode==3)//在ID编号输入状态
			 {
				if(n!=0)
				{
					LCD12864_display_char(2+n,2,' ');
					n--;
					ID=ID/10;
					zhiwen_f=0;
				}
			 }
		}
		if(a==14)//确定
		{
			if(mode==1)		    //确定选择管理操作
			{	
				write_com(0x01);
				mode=mode_num+2;
				n=0;
				ID=0;
				zhiwen_f=0; 
				input_f=0;   //清除确定标志
				num=0;
				in_mima=0;
				new_mima=0;
				switch(mode_num)		
				{
				   case 0:  	
								LCD12864_display_string(0,1,">>录入指纹");
								LCD12864_display_string(0,2,"编号: ");
								break;
				   case 1:  	
								LCD12864_display_string(0,1,">>删除指纹");
								LCD12864_display_string(0,2,"编号: ");
								break;
				   case 2:  	
								reset_f=1;
								reset_num=1;
								LCD12864_display_string(0,1,"请输入旧密码: "); 
								break;	
				   default: break;
				}	
			}
			else 
			{
				if(input_f==1)//密码输入完成确定
				{
					if(reset_f==1/*&&num==6*/) //修改密码区间
					{
						if(reset_num==3)
						{	
							if(new_mima==in_mima)
							{	
								low_mima=new_mima;
								AT24C02_write_date(200,low_mima/10000);
								AT24C02_write_date(201,low_mima%10000/100);
								AT24C02_write_date(202,low_mima%100);
								write_com(0x01);
								LCD12864_display_string(1,1,"密码修改成功");
								LCD12864_display_string(1,3,"请妥善保管好");
							}
							else
							{
								LCD12864_display_string(1,3,"密码修改失败");
							}
							reset_num=0;
							reset_f=0;	
						} 
						if(reset_num==2)
						{	
							write_com(0x01);
							LCD12864_display_string(0,1,"请再次输入新密码");		
							new_mima=in_mima;
							reset_num++;	
						} 
						if(reset_num==1)
						{
							if(low_mima==in_mima)
							{	
								write_com(0x01);
								reset_num++;
								LCD12864_display_string(0,1,"请输入新密码: ");//显示输入新密码
							}
							else
							{
								LCD12864_display_string(2,3,"密码错误");//显示密码错误
								reset_num=1;
								LCD12864_display_string(1,2,"            ");	
							}
						}
					}
					if(in_f==1)		   //进入管理输入密码时候
					{
						if(low_mima==in_mima)
						{						
							mode=1;
							write_com(0x01);
							in_f=0;
						}
						else
						{
							LCD12864_display_string(2,3,"密码错误");	//显示密码错误
							LCD12864_display_string(1,2,"            ");	
						}
					} 
					if(mode==0&&in_f==0)
					{
						if(low_mima==in_mima)
						{					
							LCD12864_display_string(3,3,"解锁成功");
							jdq=0;
							T0_num=0;
						}
						else
						{
							LCD12864_display_string(3,3,"密码错误");	//显示密码错误
							didi(3);
						}
						LCD12864_display_string(1,4,"            ");
						delay1ms(500);
						LCD12864_display_string(3,3,"        ");	
					}
					in_mima=0;
					num=0;		//清除密码计数。重新计算输入的密码个数
					input_f=0;  //清除确定标志
				}
				if((mode==2||mode==3)&&n==ID_MAX)
				{
					zhiwen_f=1;		
				}
			}			
		}						
		key_f=0;        //清除按键标志	
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

anaconda ( jupyter notebook ) 虚拟环境安装 lazypredict

安装lazypredict 点击 Anaconda Prompt 1.创建虚拟环境 conda create -n py3.9 python3.92.激活虚拟环境 conda activate py3.93.安装lazypredict pip3 install lazypredict0.2.7 numpy pandas tqdm scikit-learn xgboost lightgbm4.安装ipykernel &#xff08;第一次导入…

SpringBoot3.0正式发布,我来尝尝鲜

GraalVM 版本&#xff1a;graalvm-ce-java17-22.3.0 SpringBoot3.0 中最重要的特性就是对 GraalVM 的支持&#xff0c;从而达到更快的启动速度&#xff0c;有两种使用方式。 利用 GraalVM 构建可执行文件 因为需要利用 GraalVM 来打包可执行文件&#xff0c;所以需要你的机器上…

bestphp‘s revenge/ 安洵杯Babyphp(phpsession题目)

目录 [LCTF]bestphp‘s revenge 一.SoapClient 二.CRLF Injection漏洞 简单来说就是&#xff0c;“回车换行”&#xff08;\r\n)的简称。 三、call_user_func 四、PHPsession反序列化 安洵杯Babyphp 第一步 第二步 第三步 最后 [LCTF]bestphp‘s revenge 一.SoapCl…

基于docker创建mysql容器

基础环境 Server: Docker Engine - CommunityEngine:Version: 20.10.9选择镜像 好用、可靠 不好用&#xff1a;DOCKER OFFICIAL IMAGE mysql 好用&#xff1a; VERIFIED PUBLISHER bitnami/mysql 部署容器 创建桥接网络 docker network create app-tier --drive…

java 把a.txt文件中的内容复制到当前项目目录下的b.txt文件中,2种方式比较复制效率 毫秒比较

java 把a.txt文件中的内容复制到当前项目目录下的b.txt文件中&#xff0c;2种方式比较复制效率 毫秒比较 package xxx;import java.io.*; public class JavaApplication1 {public static void main(String[] args) throws IOException {long start System.currentTimeMillis(…

[附源码]Python计算机毕业设计Django第三方游戏零售平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

手把手教你写一个Vue3组件库但是乞丐版

好久没写文章了&#xff0c;最近在研究一些组件库的实现方法&#xff0c;分享一下。在这我这篇文章之前其实已经有一篇文章讲了Vue如何打包组件库了&#xff08;最底部&#xff09;&#xff0c;但是这篇文章一是没有源码二是Vue3和Vue2的组件库写法有点不一样&#xff0c;关于这…

数据挖掘-理论与算法 公开课笔记

1.1.1.1 整装待发 近年来数据存储和数据处理的能力都产生了飞跃&#xff0c;为数据挖掘奠定了基础。虽然数据量大&#xff0c;但是真正有用的信息少 2.1.2.1 学而不思则罔 是多学科&#xff08;机器学习、人工智能、模式识别、统计学&#xff09;的交叉领域如何学习数据挖掘&…

【分布式能源的选址与定容】基于非支配排序多目标粒子群优化算法求解分布式能源的选址与定容附Matlab代码

​✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法…

【HDU No. 1166】 敌兵布阵

【HDU No. 1166】 敌兵布阵 杭电 OJ 题目地址 【题意】 A国在海岸线沿直线布置了N 个工兵营地。C国通过先进的监测手段对A国每个工兵营地的人数都掌握得一清二楚。每个工兵营地的人数都可能发生变动&#xff0c;可能增加或减少若干人手。 【输入输出】 输入&#xff1a; 第…

知识整理:1802907-99-8,Desthiobiotin-PEG4-Alkyne生物素类似物

&#xff08;本品应密封避光&#xff0c;储存于阴凉&#xff0c;干燥&#xff0c;通风处&#xff0c;取用一定要干燥&#xff0c;避免频繁的溶解和冻干&#xff09; ●中文名&#xff1a;脱硫生物素-四聚乙二醇-炔基 ●英文&#xff1a;Desthiobiotin-PEG4-Alkyne ●外观以及性…

浮点数渐进下溢

文章目录浮点数渐进下溢浮点数渐进下溢 当IEEE754浮点数的运算结果或转化结果中&#xff0c;存在阶码全0的情况时&#xff0c;在IEEE754标准的描述中说&#xff0c;若此时尾数不全为0&#xff0c;则表示次正规数&#xff0c;即次数浮点数的真值其实应该成为&#xff1a; (−1)…

YUV数据格式

1. YUV的原理 YUV 的原理是把亮度&#xff08;Luma&#xff09;与色度&#xff08;Chroma&#xff09;分离。 “Y”表示亮度&#xff0c;也就是灰度值。 “U”表示蓝色通道与亮度的差值。 “V”表示红色通道与亮度的差值。 其中 Y 信号分量除了表示亮度信号外&#xff0c;还含…

Redis学习笔记(一)

NoSQL 泛指非关系型数据库&#xff0c;作为关系型数据库的补充作用&#xff1a;应对海量用户和海量数据前提下的数据处理问题特征 可扩容、可伸缩大数据量下高性能灵活的数据模型高可用 常见的NoSQL数据库 RedismemcacheHBaseMongoDB Redis 一种高性能键值对数据库特征 数据间…

[附源码]计算机毕业设计springboot酒店在线预约咨询小程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

STL 迭代器萃取

导言 什么是迭代器 迭代器是一种抽象的设计概念&#xff0c;《Design Patterns》一书中对于 iterator 模式的定义如下&#xff1a;提供一种方法&#xff0c;使之能够依序巡访某个聚合物&#xff08;容器&#xff09;所含的各个元素&#xff0c;而又无需暴露该聚合物的内部表述…

wcdma基站的重选和切换

首先移动组网的特点&#xff0c;单个基站覆盖一定区域范围&#xff0c;我们称之为小区&#xff0c;为了组成一个连续服务不断的网&#xff0c;需要在空间上部署多个基站&#xff0c;应对用户的移动。 为了实现业务的连续性&#xff0c;必须给每个小区设置相邻的小区&#xff0c…

C/C++-指针

C/C-指针参考1. 指针指针与内存/地址指针使用2.数组指针数组/指针/sizeof一维数组与指针多维数组指针3.字符/字符串指针4. 其他指针二级指针 -- 还没看空指针void指针野指针5.指针与函数函数指针引用传递指针函数6.结构体指针结构体数组指针???c 对象指针参考 https://www.…

Kotlin 开发Android app(十四):startActivity跳转Activity活动

从一个Activity跳到另一个Activity 在编写安卓代码是最常见的事情了。我们不可能在一个页面中&#xff0c;把所有的事情都做完。 在kotlin中跳转的程序也比较简单&#xff0c;跟java差不多。如果熟悉java代码的话&#xff0c;只需要把代码改变过来而已。 带参数的调整 从一个…

极空间Docker安装Alist套件整合阿里云盘、百度云盘等网盘资源并挂载到本地供极影视刮削播放完整教程

文章目录0、前言1、在docker中安装alist套件1.1、拉取并下载alist镜像1.2.安装alist镜像2、访问并设置alist2.1、访问alist2.2、配置alist2.2.1、在alist中添加阿里云盘2.2.2、在alist中添加其它网盘3、在极空间中将前述网盘挂载到本地4、在极影视中扫描刮削挂载到本地的云盘中…