赞
踩
智能门锁
在消费升级渗透在各个领域的今天,国民消费发生着巨大的变化,与每个人息息相关的家居行业也是如此。现今,越来越多的智能家居产品出现在普通老百姓的生活中,智能照明、智能窗帘、智能扫地机器人等各种智能产品都给人们的生活带来了极大的便利。智能门锁作为智能家居中重要的一环,也成为消费者家居智能化的重要选择。智能相比市面的机械门锁更加安全、更智能、更人性化而得到市场的认可,在智能门锁行业里,不少世界500强企业也在智能门锁上进行产品布局,像中国小米公司就生产智能门锁,致力打造智慧家庭,市场智能门锁能够支持五种解锁方式,支持指纹、手机、门禁卡、按键密码、钥匙解锁功能。可以说是智能家庭必不可少的成员。
开发工具:Keil5、取字软件
4*4矩阵按键
- int Key_Scan(void)
- {
- int keyValue ; //按键值初始化
-
- GPIO_Write(GPIOC,(GPIOC->ODR & 0xfc3f )| 0x0040);//让PC6-9输出0001,检测第1列
- if((GPIOC->IDR & 0x0800) != 0x0000)
- {
- delay_ms(5);//延时消抖
- if((GPIOC->IDR & 0x0800) != 0x0000)
- {
- only = 1; //标志位当有按键按下标志位置1
- while((GPIOC->IDR & 0x0800) != 0x0000);
- keyValue=1;
- }
- }
-
- if((GPIOB->IDR & 0x0040) != 0x0000)
- {
- delay_ms(5);//延时消抖
- if((GPIOB->IDR & 0x0040) != 0x0000)
- {
- only = 1;
- while((GPIOB->IDR & 0x0040) != 0x0000);
- keyValue=4;
- }
- }
-
- if((GPIOE->IDR & 0x0020) != 0x0000)
- {
- delay_ms(5);//延时消抖
- if((GPIOE->IDR & 0x0020) != 0x0000)
- {
- only = 1;
- while((GPIOE->IDR & 0x0020) != 0x0000);
- keyValue=7;
- }
- }
-
- if((GPIOE->IDR & 0x0040) != 0x0000)
- {
- delay_ms(5);//延时消抖
- if((GPIOE->IDR & 0x0040) != 0x0000)
- {
- only = 1;
- while((GPIOE->IDR & 0x0040) != 0x0000);
- keyValue='*';
- }
- }
-
-
-
- GPIO_Write(GPIOC,(GPIOC->ODR & 0xfc3f )| 0x0080);//让PC6-9输出0010,检测第二列
- if((GPIOC->IDR & 0x0800) != 0x0000)
- {
- delay_ms(5);//延时消抖
- if((GPIOC->IDR & 0x0800) != 0x0000)
- {
- only = 1;
- while((GPIOC->IDR & 0x0800) != 0x0000);
- keyValue=2;
- }
- }
- if((GPIOB->IDR & 0x0040) != 0x0000)
- {
- delay_ms(5);//延时消抖
- if((GPIOB->IDR & 0x0040) != 0x0000)
- {
- only = 1;
- while((GPIOB->IDR & 0x0040) != 0x0000);
- keyValue=5;
- }
- }
- if((GPIOE->IDR & 0x0020) != 0x0000)
- {
- delay_ms(5);//延时消抖
- if((GPIOE->IDR & 0x0020) != 0x0000)
- {
- only = 1;
- while((GPIOE->IDR & 0x0020) != 0x0000);
- keyValue=8;
- }
- }
- if((GPIOE->IDR & 0x0040) != 0x0000)
- {
- delay_ms(5);//延时消抖
- if((GPIOE->IDR & 0x0040) != 0x0000)
- {
- only = 1;
- while((GPIOE->IDR & 0x0040) != 0x0000);
- keyValue=0;
- }
- }
-
As608模块
- //录指纹
- void Add_FR(void)
- {
- u8 i,ensure ,processnum=0;
- u16 ID;
- while(1)
- {
- switch (processnum)
- {
- case 0:
- i++;
- OLED_CLS();//清屏
- for(int i=71;i<75;i++)
- {
- OLED_ShowCN(0+(i-71)*16,0,i);//测试显示中文
- }
-
- printf("请按指纹\n");
- delay_s(2);
- ensure=PS_GetImage();
- printf("%d\n",ensure);
- if(ensure==0x00)
- {
- printf("dasha\n");
- // BEEP=1;
- ensure=PS_GenChar(CharBuffer1);//生成特征
- //BEEP=0;
- if(ensure==0x00)
- {
- OLED_CLS();//清屏
- for(int i=75;i<79;i++)
- {
- OLED_ShowCN(0+(i-75)*16,0,i);//测试显示中文
- }
- printf("指纹正常\n");
- delay_s(2);
- i=0;
- processnum=1;//跳到第二步
- }
- else ShowErrMessage(ensure);
- }
- //else ShowErrMessage(ensure);
- break;
-
- case 1:
- i++;
- OLED_CLS();//清屏
- for(int i=83;i<88;i++)
- {
- OLED_ShowCN(0+(i-83)*16,0,i);//测试显示中文
- }
- printf("请按再按一次指纹\n");
- delay_s(2);
- ensure=PS_GetImage();
- if(ensure==0x00)
- {
- // BEEP=1;
- ensure=PS_GenChar(CharBuffer2);//生成特征
- // BEEP=0;
- if(ensure==0x00)
- {
- OLED_CLS();//清屏
- for(int i=75;i<79;i++)
- {
- OLED_ShowCN(0+(i-75)*16,0,i);//测试显示中文
- }
- printf("指纹正常\n");
- delay_s(2);
- i=0;
- processnum=2;//跳到第三步
- }else ShowErrMessage(ensure);
- }else ShowErrMessage(ensure);
- break;
-
- case 2:
- OLED_CLS();//清屏
- for(int i=112;i<118;i++)
- {
- OLED_ShowCN(0+(i-112)*16,0,i);//测试显示中文
- }
- printf("对比两次指纹\n");
- delay_s(2);
- ensure=PS_Match();
- if(ensure==0x00)
- {
- OLED_CLS();//清屏
- for(int i=88;i<94;i++)
- {
- OLED_ShowCN(0+(i-88)*16,0,i);//测试显示中文
- }
- printf("指纹对比成功\n");
- delay_s(2);
- processnum=3;//跳到第四步
- }
- else
- {
- OLED_CLS();//清屏
- for(int i=94;i<100;i++)
- {
- OLED_ShowCN(0+(i-94)*16,0,i);//测试显示中文
- }
- printf("指纹对比失败\n");
- delay_s(2);
- ShowErrMessage(ensure);
- i=0;
- processnum=0;//跳回第一步
- }
- delay_ms(1200);
- break;
-
- case 3:
- OLED_CLS();//清屏
- for(int i=100;i<106;i++)
- {
- OLED_ShowCN(0+(i-100)*16,0,i);//测试显示中文
- }
- printf("生成指纹模块\n");
- delay_s(2);
- ensure=PS_RegModel();
- if(ensure==0x00)
- {
- OLED_CLS();//清屏
- for(int i=106;i<112;i++)
- {
- OLED_ShowCN(0+(i-106)*16,0,i);//测试显示中文
- }
- printf("生成指纹成功\n");
- GPIO_ToggleBits(GPIOF, GPIO_Pin_9);
- delay_s(2);
- processnum=4;//跳到第五步
- }else {processnum=0;ShowErrMessage(ensure);}
- delay_ms(1200);
-
- break;
-
- case 4:
- PS_ValidTempleteNum(&ValidN);//读库指纹个数
- ID = ValidN +1;
- ensure=PS_StoreChar(CharBuffer2,ID);//储存模板
- if(ensure==0x00)
- {
- printf("请按enter\n");
- printf("录入成功");
-
- PS_ValidTempleteNum(&ValidN);//读库指纹个数
- OLED_CLS();//清屏
- for(int i=59;i<63;i++)
- {
- OLED_ShowCN(35+(i-59)*16,0,i);//测试显示中文
- }
- OLED_ShowStr(10,0,"1.",2);//测试6*8字符
- for(int i=63;i<67;i++)
- {
- OLED_ShowCN(35+(i-63)*16,3,i);//测试显示中文
- }
- OLED_ShowStr(10,3,"2.",2);//测试6*8字符
-
- for(int i=67;i<71;i++)
- {
- OLED_ShowCN(35+(i-67)*16,6,i);//测试显示中文
- }
- OLED_ShowStr(10,6,"3.",2);//测试6*8字符
-
- return;
- }
- else {processnum=0;ShowErrMessage(ensure);}
- break;
- }
- delay_ms(400);
- if(i==5)//超过5次没有按手指则退出
- {
- OLED_CLS();//清屏
- for(int i=59;i<63;i++)
- {
- OLED_ShowCN(35+(i-59)*16,0,i);//测试显示中文
- }
- OLED_ShowStr(10,0,"1.",2);//测试6*8字符
- for(int i=63;i<67;i++)
- {
- OLED_ShowCN(35+(i-63)*16,3,i);//测试显示中文
- }
- OLED_ShowStr(10,3,"2.",2);//测试6*8字符
-
- for(int i=67;i<71;i++)
- {
- OLED_ShowCN(35+(i-67)*16,6,i);//测试显示中文
- }
- OLED_ShowStr(10,6,"3.",2);//测试6*8字符
- printf("超过五次\n");
- break;
-
- }
- }
- }
- //刷指纹
- void press_FR(void)
- {
- int i =0;
- int j = 0;
- SearchResult seach;
- u8 ensure;
- u8 str[64] = {0};
- u8 str1[64] = {0};
- //GPIO_ToggleBits(GPIOF, GPIO_Pin_10);
- while(1)
- {
- OLED_CLS();//清屏
- for(int i=71;i<75;i++)
- {
- OLED_ShowCN(0+(i-71)*16,0,i);//测试显示中文
- }
- delay_s(1);
- ensure=PS_GetImage();
- if(ensure==0x00)//获取图像成功
- {
- printf("dasha");
- // GPIO_ToggleBits(GPIOE, GPIO_Pin_13);
- //BEEP=1;//打开蜂鸣器
- delay_s(1);
- ensure=PS_GenChar(CharBuffer1);
- if(ensure==0x00) //生成特征成功
- {
- //GPIO_ToggleBits(GPIOF, GPIO_Pin_10);
- printf("qqqq:%d\n",ensure);
- while(1)
- {
- ensure=PS_HighSpeedSearch(CharBuffer1,0,AS608Para.PS_max,&seach);
- if(ensure==0x00)//搜索成功
- {
- printf("ensure:%d\n",ensure);
- OLED_CLS();//清屏
- OLED_ShowStr(0,0,"enen",2);//测试6*8字符
- delay_s(2);
- break;
- }
- else
- {
- ShowErrMessage(ensure);
- delay_s(1);
- break;
- }
-
- }
-
- if(seach.mathscore>30)
- {
- printf("ID:%d",seach.pageID);
- printf("匹配得分:%d",seach.mathscore);
- sprintf(str,"ID:%d",seach.pageID);
- sprintf(str1,":%d",seach.mathscore);
- OLED_CLS();//清屏
- for(int i=144;i<148;i++)
- {
- OLED_ShowCN(0+(i-144)*16,0,i);//测试显示中文
- }
- OLED_ShowStr(0,3,str,2);//测试6*8字符
- OLED_ShowStr(60,0,str1,2);//测试6*8字符
- //Show_Str_Mid(0,140,(u8*)str,16,240);
- //myfree(SRAMIN,str);
- TIM_SetCompare1(TIM14, 500);
- TIM_SetCompare4(TIM2, 800);
- delay_s(2);
- TIM_SetCompare4(TIM2, 0);
- delay_s(3);
- TIM_SetCompare1(TIM14, 0);
- delay_s(2);
- figuer_login();
- }
-
- }
- else
- ShowErrMessage(ensure);
- delay_ms(1200);
- }
-
- //超过5次没有按手指则退出
- if(i++==8)
- {
- OLED_CLS();//清屏
- for(int i=59;i<63;i++)
- {
- OLED_ShowCN(35+(i-59)*16,0,i);//测试显示中文
- }
- OLED_ShowStr(10,0,"1.",2);//测试6*8字符
- for(int i=63;i<67;i++)
- {
- OLED_ShowCN(35+(i-63)*16,3,i);//测试显示中文
- }
- OLED_ShowStr(10,3,"2.",2);//测试6*8字符
-
- for(int i=67;i<71;i++)
- {
- OLED_ShowCN(35+(i-67)*16,6,i);//测试显示中文
- }
- OLED_ShowStr(10,6,"3.",2);//测试6*8字符
- printf("超过五次\n");
- break;
- }
- }
-
- }
- //指纹库清空
- void _PS_Empty(void)
- {
- u8 ensure;
- ensure=PS_Empty();//清空指纹库
- printf("hhhhh:%d\n",ensure);
- if(ensure == 0)
- {
- OLED_CLS();//清屏
- for(int i=131;i<137;i++)
- {
- OLED_ShowCN(0+(i-131)*16,0,i);//测试显示中文
- }
- }
-
- delay_s(2);
- Del_FR();
- }
-
- void _PS_DeletChar()
- {
- u8 figuer_buff[64] = {0};
- u8 ensure;
- int figuer_add_4;
- OLED_CLS();//清屏
- for(int i=137;i<144;i++)
- {
- OLED_ShowCN(0+(i-137)*16,0,i);//测试显示中文
- }
- OLED_ShowStr(0,3,"ID: ",2);//测试6*8字符
-
- only = 0;
- while(1)
- {
- figuer_add_4 = Key_Scan();
- if(only == 1) //按一次打印一次
- {
- only = 0;
- sprintf(figuer_buff,"%d",figuer_add_4);
- OLED_ShowStr(40,3,figuer_buff,2);//测试6*8字符
- ensure=PS_DeletChar(figuer_add_4,1);
- printf("ghjkkkkk:%d",ensure);
- if(ensure==0)
- {
- OLED_CLS();//清屏
- for(int i=131;i<137;i++)
- {
- OLED_ShowCN(0+(i-131)*16,0,i);//测试显示中文
- }
-
- }
- break;
- }
-
- only = 0;
- }
-
- delay_s(2);
- Del_FR();
-
- }
-
以上代码仅供参考
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。