OLED_Init();//OLED初始化
OLED_ColorTurn(0);//0正常显示,1 反色显示 OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示 yemian();复制代码 人机交互显示 //初始页面函数
void yemian(void){OLED_Clear();//根据取模软件取模而成OLED_ShowChinese(0,0,7,16);//智OLED_ShowChinese(18,0,8,16);//能OLED_ShowChinese(36,0,9,16);//房OLED_ShowChinese(54,0,10,16);//盗OLED_ShowChinese(72,0,11,16);//门OLED_Refresh();delay_ms(500);}//开门成功void opean_OLED(void){OLED_Clear();OLED_ShowChinese(0,0,12,16);//开OLED_ShowChinese(18,0,13,16);//锁OLED_ShowChinese(36,0,15,16);//成OLED_ShowChinese(54,0,16,16);//功OLED_Refresh();delay_ms(500);}//关门成功void close_OLED(void){OLED_Clear();OLED_ShowChinese(0,0,12,16);//开OLED_ShowChinese(18,0,13,16);//锁OLED_ShowChinese(36,0,17,16);//失OLED_ShowChinese(54,0,18,16);//败OLED_Refresh();delay_ms(500);}复制代码 RC522无线射频卡解锁思路首先在RFID标签卡片上的块中存放数据,通过检测卡片中的数据,来判断是否有可以打开防盗门的权限。
写卡
首先,我们需要在IC卡中写入数据。
- 读卡
根据读取卡片中的数据是否是具备权限的,来检测是否开门
主要程序status= PcdRequest(REQ_ALL,TagType);//寻卡
if(!status){status = PcdAnticoll(SelectedSnr);//防冲撞if(!status){status=PcdSelect(SelectedSnr);//选定卡片if(!status){snr = 1; //扇区号1status = PcdAuthState(KEYA, (snr*4+3), DefaultKey, SelectedSnr);// 校验1扇区密码,密码位于每一扇区第3块{if(!status){status = PcdRead((snr*4+0), bufRC522); // 读卡,读取1扇区0块数据到buf[0]-buf[15]if(!status){for(i=0;i<16;i++){sprintf((char *)dtbuf,"%02X ",bufRC522[i]);printf((char *)dtbuf);}printf("\r\n");bufRC522[14]=0x00;bufRC522[15]=shuju;//数据status = PcdWrite((snr*4+0), bufRC522); // 写卡,将buf[0]-buf[15]写入1扇区0块if(!status){}for(i=0;i<16;i++){sprintf((char *)dtbuf,"%02X ",bufRC522[i]);printf((char *)dtbuf);}printf("\r\n");WaitCardOff();}}}}}}复制代码APP解锁
蓝牙解锁原理
蓝牙解锁的原理就是串口传输数据,通过串口传输和手机的APP进行传输数据,蓝牙接收到的数据进行检测。
我在前面的一篇文章,系统的讲过串口传输,想了解的读者可以自行观看。
思路
首先,通过手机APP连接手机搜索到的蓝牙,连接成功后,在APP中点击开锁。智能防盗门接收到指令后,进行开锁。
![APP界面](https://img-blog.csdnimg.cn/20200929165536542.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NjI5MTA5,size_16,color_FFFFFF,t_70#pic_center)
重要程序
///重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f){/* 发送一个字节数据到串口 */USART_SendData(DEBUG_USARTx, (uint8_t) ch);/* 等待发送完毕 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);return (ch);}///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数int fgetc(FILE *f){/* 等待串口输入数据 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);return (int)USART_ReceiveData(DEBUG_USARTx);}复制代码简单的使用
scanf("%c", &GetData);
printf("GetData = %c\n", GetData);if(GetData=='A')suo=0;//开else if(GetData=='B')suo=1;//关复制代码夜间感应开灯
思路
通过光照传感器检测智能防盗门周围的光照强度来判断是白天还是夜间。根据人体红外传感器判断是否有人到达智能防盗门前准备进入,之后选择是否进行开关灯。
scanf("%c", &GetData);</span>
printf("GetData = %c\n", GetData);if(GetData=='A')suo=0;//开else if(GetData=='B')suo=1;//关复制代码
开发工匠 2024-1-17 11:12
luckyzy2000 2024-1-15 16:06