为何要实施这个项目?
一般小区楼下,每幢都会有一个门禁系统,
可以使用钥匙打开门禁,
有的可以使用刷卡打开门禁,
有的可以使用密码打开门禁,
但是,长期下来,因为小区人多,锁的钥匙孔会被捅坏,物业修起来也很怠慢
使用密码按键解锁门禁,按键也会失灵
每家都会安装一个【楼宇对讲器】,用来与楼下人对话,或者可以从视频看出,是哪位亲朋,并且可以门禁解锁。

目标:
使用智能家居,嵌入楼宇对讲机,模拟开门按键,完成开门动作。

适用对象:
家里人多,拥有门禁的钥匙不够用的家庭
出入门禁不想带钥匙的人
大冬天,懒得拿冰冷的钥匙开门的人
物业门禁钥匙,密码不好使的人

使用方法:
1,给模块插入一张有来电显示功能的移动/联通SIM卡,上电初始化,一个短的嘀的一声提示,初始化完成。
2,在任何时候任何地点,手机呼叫SIM900A GSM通信模块的号码,门禁解锁。

【小区楼幢-门禁外观】钥匙+键盘+刷卡+摄像头

【小区楼幢-门禁外观】键盘+摄像头+刷卡

【小区楼幢-门禁外观】  钥匙

室内【楼宇对讲机】外观

室内【楼宇对讲机】内部图

室内【楼宇对讲机】结合单片机

【SIM900A模块】结合单片机

【单片机串口通信  波特率计算器】

Ver2.0版本程序

C51  SIM900A 判断来电身份,蜂鸣器响起 远程控制

工程名  :手机呼叫SIM900A,门禁解锁
1  先用USB转TTL模块测试模块好用,发送AT,波特率到9600同步
2  STC12C4052AD单片机晶振 11.0592MHz,12M不可以用  
版本号:V1.0
手机呼叫SIM900A的号码,蜂鸣器亮500MS;

具体实现看程序,注释我写的非常详细了

/******************************
工程名  :手机呼叫SIM900A,门禁解锁
1 先用USB转TTL模块测试模块好用,发送AT,波特率到9600同步
2 51单片机晶振 11.0592MHz,12M不可以用  手机呼叫SIM900A的号码,LED亮500MS;
*******************************/
#include "string.h"
#include "STC12C2052AD.h"
#define cache_max 200                      //串口接收缓存长度
xdata unsigned char uart_cache[cache_max]; // xdata 把变量存在flash中,而不存在RAM中//code 定义的数据要放在ROM里面,写入后就不能再更改
bdata unsigned char Flag;    //定时器标志位  bdata 把变量定义为可拆成8位寻址
sbit Timer_start =Flag^0;    //延时计数功能开关
sbit RUNING  = P3^7;         //SIM900A运行指示灯,1秒闪烁一次
sbit unlock  = P1^7;         //解锁
unsigned char code *ring="CLIP";           //来电标记
unsigned char code *phone1="1336218****";  //管理员1的手机号
unsigned char code *phone2="1395804****";  //管理员2的手机号
unsigned char code *phone3="1776715****";  //管理员3的手机号
unsigned char Times=0;        // 定时器中断次数累加
unsigned char First_Int = 0;  // 串口数组字符索引
unsigned char delay=0;        //中断定时器,实际数据delay*50次void SendData(unsigned char dat){   // 发一个8位数据到串口SBUFES=0;                  SBUF=dat;          while(TI!=1);  TI=0;                  ES=1;
}void SendString(unsigned char *s){  // 发多个8位数据到串口SBUFwhile(*s)SendData(*s++);
}
void SendLR(void) {      // 发回车换行SendString("\r\n");
}void DELAY_MS (unsigned int a){   // 延时unsigned int i;while ( --a != 0 )    for (i=0;i<=600;i++);
}void Uart1Init(void)   {   //9600bps@11.0592MHzPCON &= 0x7F;          //波特率不倍速SCON  = 0x50;          //8位数据,可变波特率AUXR &= 0xBF;          //定时器1时钟为Fosc/12,即12TAUXR &= 0xFE;          //串口1选择定时器1为波特率发生器TMOD &= 0x0F;          //清除定时器1模式位TMOD |= 0x20;          //设定定时器1为8位自动重装方式TL1 = 0xFD;            //设定定时初值TH1 = 0xFD;            //设定定时器重装值ET1 = 0;               //禁止定时器1中断TR1 = 1;               //启动定时器1ES=1;                  //开串口中断
}void Uart1() interrupt 4{uart_cache[First_Int] = SBUF;     //将接收到的字符串存到缓存中First_Int++;                      //缓存指针向后移动if(First_Int > cache_max)         //如果缓存满,将缓存指针指向缓存的首地址First_Int = 0;                  //数组索引,归位RI = 0;                           //清除RI位
}void Timer0Init(void)  {   //20毫秒@11.0592MHzAUXR &= 0x7F;          //定时器时钟12T模式TMOD &= 0xF0;     TMOD |= 0x01;          //设置定时器模式,16位定时器TL0 = 0x00;            //设置定时器初值TH0 = 0xB8;            //设置定时器初值TF0 = 0;               //清TF0标志TR0 = 1;               //定时器0开始计时ET0 = 1;               //使能定时器0中断EA=1;                  //开总中断
}void Timer0_ISR() interrupt 1{          //最高级别中断服务程序static unsigned char Time_count=0;  // 定时器计数器 static全局生命周期TR0=0;                              //关定时器TL0 = 0x00;                         //重设定时器初值TH0 = 0xB8;                         //重设定时器初值Time_count++;             if(Time_count>=50)   {Time_count = 0;RUNING =~RUNING;      //SIM900A运行指示灯,1秒闪烁一次}if(Timer_start) Times++;  //如果收到允许定时,开始计时if(Times > (50*delay)){   //如果Times 到达设定时间Timer_start = 0;Times = 0;            // 全部变量Times,通知程序 计时时间已到}TR0=1;                     //开定时器
}void CLR_Buf1(void){unsigned int k;for(k=0;k<cache_max;k++)     //将缓存内容清零uart_cache[k] = 0x00;First_Int = 0;              //接收字符串的起始存储位置
}void Send_Command(unsigned char *b,unsigned char *a,unsigned char wait_time){         unsigned char i;unsigned char *c;c = b;                                 //保存字符串地址到cCLR_Buf1(); i = 0;while(i == 0) { if(strstr(uart_cache,a)==NULL)  {  //查找需要应答的字符if(Timer_start == 0){b = c;                     //将字符串地址给bfor (b; *b!='\0';b++)SendData(*b);SendLR();  Times = 0;delay = wait_time;Timer_start = 1;           // 开启定时器,}}else{i = 1;Timer_start = 0;}}CLR_Buf1();
}
void Unlock(void)   {//执行函数,会有一个持续1秒低电平的动作,然后电平拉高unlock = 0;  DELAY_MS(200);  unlock = 1;
}void Wait_CREG(void) { //等待模块注册成功unsigned char i;unsigned char k;i = 0;CLR_Buf1();while(i == 0) {  CLR_Buf1(); SendString("AT+CREG?");  //查询模块网络注册状态SendLR();DELAY_MS(1000);                  for(k=0;k<cache_max;k++) {if(uart_cache[k] == ':')  {if((uart_cache[k+4] == '1')||(uart_cache[k+4] == '5')){  //表明网络注册成功i = 1; break;}}}}
}void Check_Ring(void)   {                       //检查是否有新信息,并执行信息内容指令if(strstr(uart_cache,ring)!=NULL)  {        //若缓存字符串中含有来电标记DELAY_MS(100);                         //等待数据全部接收完成if((strstr(uart_cache,phone1)!=NULL)||(strstr(uart_cache,phone2)!=NULL)||(strstr(uart_cache,phone3)!=NULL))  Unlock();    //如果管理员来电,就解锁CLR_Buf1();  // 清空SBUF缓存}
}void main(void){Timer0Init();                      //初始化定时器0Uart1Init();                       //初始化串口9600Send_Command("AT","OK",3);         //波特率同步Send_Command("ATE0","OK",3);       //取消回显 Send_Command("AT+CLIP=1","OK",3);  //开启来电显示Wait_CREG();                       //查询等待模块注册成功while(1){ Check_Ring();}
}

编译结果:0错误,0警告

Ver3.0版本程序

/******************************
工程名  :手机呼叫SIM900A,门禁解锁
1 先用USB转TTL模块测试模块好用,发送AT,波特率到9600同步
2 STC12C2052AD单片机,晶振 11.0592MHz,12M不可以用  软件功能:
1,联网成功,一个短的嘀的一声提示
2,手机呼叫SIM900A的号码,一个长的嘀的一声提示,并完成门禁解锁动作*******************************/
#include "string.h"
#include "STC12C2052AD.h"
#define cache_max 100                      //串口接收缓存长度
// xdata 把变量存在flash中,而不存在RAM中
//code 定义的数据要放在ROM里面,写入后就不能再更改
// Timer_start =Flag^0 定时器标志位  bdata 把变量定义为可拆成8位寻址
xdata unsigned char uart_cache[cache_max];
bdata unsigned char Flag;
sbit beep     = P1^3;          //蜂鸣器
sbit control  = P1^4;         //解锁控制
sbit power    = P1^7;         //运行指示灯unsigned char code *ring="CLIP";           //SIM900A的来电标记
unsigned char code *phone1="1395719····";  //授权手机号1
unsigned char code *phone2="1395804····";  //授权手机号2
unsigned char code *phone3="1358812····";  //授权手机号3sbit Timer_start =Flag^0;     //计时器,功能开关
unsigned char Times=0;        // 定时计数器
unsigned char First_Int = 0;  // 串口数组字符索引
unsigned char delay=0;        //中断定时器,实际延时delay*50次void SendData(unsigned char dat){   // 发一个英文8位数据到串口SBUFES=0;                  SBUF=dat;          while(TI!=1);  TI=0;                  ES=1;
}void SendString(unsigned char *s){  // 发英文字符到串口SBUFwhile(*s)SendData(*s++);
}void SendLR(void) {      // 发回车换行SendString("\r\n");
}void DELAY_MS (unsigned int a){   // 延时unsigned int i;while ( --a != 0 )    for (i=0;i<=600;i++);
}void Beep_Ring(unsigned int a)   {//发出嘀的一声,或者解锁if(a==1){beep = control=0;  DELAY_MS(500);  beep = control=1;}if(a==2){beep=0;  DELAY_MS(100);  beep=1;}
}void Uart1Init(void)   {   //9600bps@11.0592MHzPCON &= 0x7F;          //波特率不倍速SCON  = 0x50;          //8位数据,可变波特率AUXR &= 0xBF;          //定时器1时钟为Fosc/12,即12TAUXR &= 0xFE;          //串口1选择定时器1为波特率发生器TMOD &= 0x0F;          //清除定时器1模式位TMOD |= 0x20;          //设定定时器1为8位自动重装方式TL1 = 0xFD;            //设定定时初值TH1 = 0xFD;            //设定定时器重装值ET1 = 0;               //禁止定时器1中断TR1 = 1;               //启动定时器1ES=1;                  //开串口中断
}void Timer0Init(void)  {   //20毫秒@11.0592MHzAUXR &= 0x7F;          //定时器时钟12T模式TMOD &= 0xF0;     TMOD |= 0x01;          //设置定时器模式,16位定时器TL0 = 0x00;            //设置定时器初值TH0 = 0xB8;            //设置定时器初值TF0 = 0;               //清TF0标志TR0 = 1;               //定时器0开始计时ET0 = 1;               //使能定时器0中断EA=1;                  //开总中断
}void CLR_Buf1(void){unsigned int k;for(k=0;k<cache_max;k++)     //将缓存内容清零uart_cache[k] = 0x00;First_Int = 0;              //接收字符串的起始存储位置
}void Send_Command(unsigned char *command,unsigned char *ack,unsigned char wait_time){         unsigned char *pointer;pointer = command;                     //保存字符串command的首地址到cCLR_Buf1();                            //清除串口缓存while(1) { if(!strstr(uart_cache,ack))  {     //查找需要应答的字符if(Timer_start == 0){command = pointer;         //将字符串地址给bfor (command; *command!='\0';command++)SendData(*command);SendLR();  Times = 0;delay = wait_time;Timer_start = 1;           // 开启定时器}}else{Timer_start = 0;              //关闭定时器break; }}CLR_Buf1();                            //清除串口缓存
}void Wait_CREG(void) {          //等待模块注册成功unsigned char i,k;i = 0;
//    CLR_Buf1(); 想想本处串口缓存该不该注释while(i == 0) {  CLR_Buf1(); SendString("AT+CREG?");  //查询模块网络注册状态SendLR();DELAY_MS(1000);                  for(k=0;k<cache_max;k++) {if(uart_cache[k] == ':')  {if((uart_cache[k+4] == '1')||(uart_cache[k+4] == '5')){//表明网络注册成功i = 1;   CLR_Buf1();}}}}
}void Check_Ring(void)   {                       if(strstr(uart_cache,ring)!=NULL)  {        //检测是否有来电标记DELAY_MS(100);                         //等待数据全部接收完成if((strstr(uart_cache,phone1))||        //注释要写得清晰明了(strstr(uart_cache,phone2))||(strstr(uart_cache,phone3)))  Beep_Ring(1);                          //符合权限,就解锁CLR_Buf1();                            // 清空SBUF缓存}
}
void SIM900aInit(void){Send_Command("AT","OK",3);                  //波特率同步Send_Command("AT+CLIP=1","OK",3);           //开启来电显示Wait_CREG();                                //查询等待模块注册成功Beep_Ring(2);                               //联网成功提示音
} //主函数
void main(void){Timer0Init();                      //初始化定时器0Uart1Init();                       //初始化串口9600SIM900aInit();                     //初始化SIM900A模块while(1){Check_Ring();}
}//4级串口中断函数
void Uart1() interrupt 4{uart_cache[First_Int] = SBUF;     //将接收到的字符串存到缓存中First_Int++;                      //缓存指针向后移动if(First_Int > cache_max)         //如果缓存满,将缓存指针指向缓存的首地址First_Int = 0;                  //数组索引,归位RI = 0;                           //清除RI位
}//1级最高级别,定时器中断函数
void Timer0_ISR() interrupt 1{          //最高级别中断服务程序static unsigned char Time_count=0;  // 定时器计数器 static全局生命周期TR0=0;                              //关定时器TL0 = 0x00;                         //重设定时器初值TH0 = 0xB8;                         //重设定时器初值Time_count++;             if(Time_count>=50)   {Time_count = 0;power=~power;         //SIM900A运行指示灯,1秒闪烁一次}if(Timer_start) Times++;  //如果收到允许定时,开始计时if(Times > (50*delay)){   //如果Times 到达设定时间Timer_start = 0;      // 完成定时,关闭定时功能Times = 0;            // 完成定时,清空定时计数器}TR0=1;                     //开定时器
}

Ver4.0版本,加入自动挂机,关闭睡眠

/******************************
工程名  :手机呼叫SIM900A,门禁解锁
1 先用USB转TTL模块测试模块好用,发送AT,波特率到9600同步
2 STC12C2052AD单片机,晶振 11.0592MHz,12M不可以用  软件功能:
1,2015.12.10 联网成功,一个短的嘀的一声提示
2,2015.12.17 手机呼叫SIM900A的号码,一个长嘀的一声提示,并完成门禁解锁动作
3,2015.12.22 响铃后,自动挂断回应对方
*******************************/
#include "string.h"
#include "STC12C2052AD.h"
#define cache_max 100                      //串口接收缓存长度
// xdata 把变量存在flash中,而不存在RAM中
//code 定义的数据要放在ROM里面,写入后就不能再更改
// Timer_start =Flag^0 定时器标志位  bdata 把变量定义为可拆成8位寻址
xdata unsigned char uart_cache[cache_max];
bdata unsigned char Flag;
sbit beep    = P1^3;         //蜂鸣器
sbit control = P1^4;         //解锁控制
sbit power   = P1^7;         //运行指示灯unsigned char code *ring="CLIP";           //SIM900A的来电标记
unsigned char code *phone1="1395719····";  //授权手机号1
unsigned char code *phone2="1395804····";  //授权手机号2
unsigned char code *phone3="1358812····";  //授权手机号3sbit Timer_start =Flag^0;     //计时器,功能开关
unsigned char Times=0;        // 定时计数器
unsigned char First_Int = 0;  // 串口数组字符“指针”
unsigned char delay=0;        //中断定时器,实际延时delay*50次void SendData(unsigned char dat){   // 发一个英文8位数据到串口SBUFES=0;                  SBUF=dat;          while(TI!=1);  TI=0;                  ES=1;
}void SendString(unsigned char *s){  // 发英文字符到串口SBUFwhile(*s)SendData(*s++);
}void SendLR(void) {             // 发回车换行SendString("\r\n");
}void DELAY_MS (unsigned int a){   // 延时unsigned int i;while ( --a != 0 )    for (i=0;i<=600;i++);
}void Uart1Init(void)   {   //定时器1,9600bps@11.0592MHzPCON &= 0x7F;          //波特率不倍速SCON  = 0x50;          //8位数据,可变波特率AUXR &= 0xBF;          //定时器1时钟为Fosc/12,即12TAUXR &= 0xFE;          //串口1选择定时器1为波特率发生器TMOD &= 0x0F;          //清除定时器1模式位TMOD |= 0x20;          //设定定时器1为8位自动重装方式TL1 = 0xFD;            //设定定时初值TH1 = 0xFD;            //设定定时器重装值ET1 = 0;               //禁止定时器1中断TR1 = 1;               //启动定时器1ES=1;                  //开串口中断
}void Timer0Init(void)  {   //20毫秒@11.0592MHzAUXR &= 0x7F;          //定时器0时钟12T模式TMOD &= 0xF0;          //设置定时器模式TMOD |= 0x01;          //设置定时器模式,16位定时器,非自动重载模式TL0 = 0x00;            //设置定时器初值TH0 = 0xB8;            //设置定时器初值TF0 = 0;               //清TF0标志TR0 = 1;               //定时器0开始计时ET0 = 1;               //使能定时器0中断EA=1;                  //开总中断
}void CLR_Buf1(void){unsigned int k;for(k=0;k<cache_max;k++)     //将缓存内容清零uart_cache[k] = 0x00;First_Int = 0;              //接收字符串的起始存储位置
}void Send_Command(unsigned char *command,unsigned char *ack,unsigned char wait_time){         unsigned char *pointer;pointer = command;                     //保存字符串command的首地址到cCLR_Buf1();                            //清除串口缓存while(1) { if(!strstr(uart_cache,ack))  {     //查找需要应答的字符if(Timer_start == 0){command = pointer;         //将字符串地址给bfor (command; *command!='\0';command++)SendData(*command);SendLR();  Times = 0;delay = wait_time;Timer_start = 1;           // 开启定时器}}else{Timer_start = 0;     //关闭定时器break; }}CLR_Buf1();                    //清除串口缓存
}void Wait_CREG(void) {          //等待模块注册成功unsigned char i,k;i = 0;CLR_Buf1();                  //想想本处串口缓存该不该注释while(i == 0) {  CLR_Buf1(); SendString("AT+CREG?");  //查询模块网络注册状态SendLR();DELAY_MS(1000);                  for(k=0;k<cache_max;k++) {if(uart_cache[k] == ':')  {if((uart_cache[k+4] == '1')||(uart_cache[k+4] == '5')){//表明网络注册成功i = 1;   CLR_Buf1();}}}}
}void Beep_Ring(unsigned int a)   {    //发出嘀的一声,或者解锁if(a==1){beep = control=0;  DELAY_MS(500);  beep = control=1;Send_Command("ATH","OK",2);}      if(a==2){beep=0;  DELAY_MS(100);  beep=1;}
}void Check_Ring(void)   {if(strstr(uart_cache,ring)){                //检测是否有来电标记DELAY_MS(100);                          //等待数据全部接收完成if((strstr(uart_cache,phone1))||(strstr(uart_cache,phone2))||(strstr(uart_cache,phone3)))  Beep_Ring(1);                        //符合权限,就解锁CLR_Buf1();                            // 清空SBUF缓存}
}void SIM900aInit(void){Send_Command("AT","OK",3);                  //波特率同步Send_Command("AT+CLIP=1","OK",3);           //开启来电显示Send_Command("AT+CSCLK=0","OK",3);          //关闭SIM900A睡眠Wait_CREG();                                //查询等待模块注册成功Beep_Ring(2);                               //联网成功提示音
} //主函数
void main(void){Timer0Init();                      //初始化定时器0Uart1Init();                       //初始化串口9600SIM900aInit();                     //初始化SIM900A模块while(1){Check_Ring();}
}//4级串口中断函数
void Uart1() interrupt 4{uart_cache[First_Int] = SBUF;     //将接收到的单个字符存到缓存中First_Int++;                      //缓存指针向后移动if(First_Int > cache_max)         //如果缓存满,将缓存指针指向缓存的首地址First_Int = 0;                  //数组索引,归位RI = 0;                           //清除RI位
}//1级最高级别,定时器中断函数
void Timer0_ISR() interrupt 1{          //最高级别中断服务程序static unsigned char Time_count=0;  // 定时器计数器 static全局生命周期TR0=0;                              //关定时器TL0 = 0x00;                         //重设定时器初值TH0 = 0xB8;                         //重设定时器初值Time_count++;                       //每隔20毫秒进入中断,Time_count无条件自加运算            if(Time_count>=50)   {Time_count = 0;power=~power;         //SIM900A运行指示灯,1秒闪烁一次}if(Timer_start) Times++;  //如果收到允许定时,开始计时if(Times > (50*delay)){   //如果Times 到达设定时间,50*delay就是秒数Timer_start = 0;      // 定时结束,定时功能标记Timer_start一定为0Times = 0;            // 完成定时,清空计数器}TR0=1;                     //开定时器
}编译结果:
Rebuild target 'Target 1'
compiling DS18B20.C...
linking...
Program Size: data=46.0 xdata=100 code=1116
creating hex file from "DS18B20"...
"DS18B20" - 0 Error(s), 0 Warning(s).

转载于:https://my.oschina.net/u/3776585/blog/1617331

C51单片机 SIM900A 手机给门禁解锁 智能家居 【C程序代码已开源,更新至Ver4.0】...相关推荐

  1. 基于单片机的多功能智能指纹_手机_门禁卡_按键密码锁系统设计

    百度网盘下载地址(947):点击下载 随着智能化的发展,智能门禁系统渐渐的出现在同学们的毕设中,尤其是可以支持多种解锁方式的,比如指纹.手机.门禁卡.按键密码.钥匙解锁功能等等,今天分享的这个毕设项目 ...

  2. html调用手机NFC,NFC门禁模拟-教你用NFC手机模拟门禁卡

    注意,本文针对未加密门禁模拟,加密门禁请看这里: 使用本程序可以让手机的NFC模拟各种门禁卡片,从而可以用手机代替门禁卡,文末提供演示.我默认用户朋友都是IT高手,所以小白请学习相关知识后再入坑. 使 ...

  3. flutterapp部分手机无法打开_例举几种手机手机模拟门禁卡的方法,大同小异

    出门带门禁卡.银行卡.身份证--这些东西真的是很麻烦,有没有一种方法可以把它们都装下?有!只要一部手机,出门不带包,各种证件,各种卡通通装进手机. 首先要你的手机支持NFC功能,我们以华为手机为例,其 ...

  4. 【毕业设计】基于单片机的指纹识别门禁系统设计 -物联网 stm32 嵌入式

    文章目录 1 简介 2 绪论 2.1 课题背景 2.2 项目内容 3 系统设计 3.1 系统架构 3.2 硬件设计 3.3 指纹识别模块的程序设计 3.3.1 指纹录入 3.3.2 指纹识别代码流程 ...

  5. id门禁卡复制到手机_怎么将手机当做门禁卡使用?给大家详解手机设置门禁卡功能...

    随着科技的发展,手机的功能是越来越强大了 . 门禁卡,相信大家都不陌生.进出小区都需要刷卡,自从手机可以使用微信跟支付宝支付功能以来,很少人携带钱包出门,一部手机便可以打车.吃饭付钱 等.银行卡跟身份 ...

  6. 都2021年了不会还有人用门禁卡吧!(手把手教你用手机代替门禁卡)

    目录 一.软硬件准备 NFC Tool 蓝牙版读卡器 安卓NFC手机 二.大致流程 三.详细步骤 0x01 NFC Tool 破解母卡获取Dump文件 0x02 NFC Tool 读取母卡卡号,写入非 ...

  7. 基于单片机指纹识别管理门禁密码锁系统设计(毕设课设资料)

    摘要: 基于51单片机指纹管理门禁系统设计 本系统由STC89C52单片机电路+指纹模块传感器电路+LCD1602液晶显示电路+继电器电路+按键电路+电源电路组成. 1.通过指纹传感器检测采集指纹. ...

  8. id门禁卡复制到手机_门禁卡复制到苹果手机

    NFC手机一枚 Root Explorer NFC Taginfo 方法/步骤 1,读取卡的ID.安装"NFC TagInfo",打开手机的NFC设置,门禁卡贴到手机后盖NFC部分 ...

  9. id门禁卡复制到手机_门禁卡复制到手机苹果

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 门禁卡复制到苹果手机的步骤如下: 1.首先读取卡的ID,并安装"NFC TagInfo",打开手机的NFC设置 ...

  10. ID卡拆解做成手机刷门禁(类似NFC功能)

    小区门禁是ID卡,频率是125K  手机NFC功能是只能刷IC卡13.56M的,所以要想手机刷iD卡就得自己动手补装了 准备材料: 手机防磁贴和线圈 (你可以直接购买线圈,但是要复制卡号到你线圈里面, ...

最新文章

  1. EV3 直接命令 - 第 5 课 从 EV3 的传感器读取数据
  2. C语言切割多层字符串(strtok_r strtok使用方法)
  3. ORACLE IMP-00017: following statement failed with ORACLE error 6550
  4. SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上试读版
  5. 改进初学者的PID-测量的比例介绍
  6. Python 数据科学手册 5.6 线性回归
  7. debian修改主机名
  8. IOS之导航控制器传值
  9. 武汉科技大学计算机课程设置,武汉科技大学计算机控制与接口技术课程实施方案.docx...
  10. Linux终端(一)
  11. Excel如何快速将一维表转为二维表
  12. 酒店管理系统数据库SQl设计思路
  13. 巴比特 | 元宇宙每日必读:时薪100万,「虚拟主播」的吸金能力被证实,其背后的公司IPO申请获批...
  14. web -- 背景图片及文字
  15. 计算机控制d a数模转换实验,实验一 D、A数模转换实验
  16. sqlplus报错ORA-12547: TNS:lost contact解决
  17. Python的Couter使用,计算字符串中每个单词出现的次数
  18. webstorm 激活破解方法
  19. Tomcat到底是个啥?
  20. 高项、高级项目管理师论文-进度管理

热门文章

  1. JAVA中关于if结构的相关的练习题
  2. x战娘2服务器维护,x战娘2变态版攻略
  3. 计算机指法基础知识,电脑打字基础知识及打字指法
  4. 在华为做测试员是一种什么体验?带你深入了解华为
  5. 华为android是什么文件夹,华为手机里的文件夹代表什么?哪些可以清除?看完秒懂!...
  6. office2003注册序列号CAB文件丢失…
  7. esxi 命令行格式化硬盘
  8. SpringBoot 配置文件加载优先级
  9. 怎么打开计算机开机启动菜单,计算机怎么添加多系统启动菜单?电脑添加双系统启动菜单的方法...
  10. c语言et1什么意思,et cetera是什么意思.如何正确使用 “etc.”