找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1732|回复: 2
收起左侧

基于stm32f4单片机的智能门锁程序设计

[复制链接]
ID:474195 发表于 2022-6-17 14:49 | 显示全部楼层 |阅读模式
本设备采用stm32f4  独立按键+as608指纹模块+jdy30蓝牙模块 +7针spi oled显示+24c02
具有 指纹解锁 密码解锁 app解锁
指纹解锁:可对指纹信息进行 增 删 改 查
密码解锁:输入正确密码可解锁 可更改密码
app解锁:可通过app输入密码解锁,可通过app上管理员权限更改密码(管理员密码168168或者111111 忘记了)
如需复刻或制作,可按照io分配进行模块接线 烧录程序即可。
注意:无24c02的情况下,请将24c02初始化函数屏蔽,否则无法开机。

制作出来的实物图如下:
IMG_20200129_230629.jpg

目录
基于stm32f407vet6智能锁设计    1
简介:    1
主要功能:    1
应用场所:    1
硬件组成及设计:    1
软件组成及设计 :        2

基于stm32f407vet6智能锁设计
简介:
  应学生客户要求开发一款可以应通过app,指纹,键盘三种方式解锁的一款智能门锁。
主要功能:
  此产品主要功能如下:1.可以应用专用的app进行解锁和修改密码
2.    可以应用锁身自带的键盘进行密码解锁和修改密码
3.    可以应用锁身自带的指纹录入器进行解锁

应用场所:
此产品最大的特点其有三种解锁方式,其硬件设计为模块设计,,所以对应的解锁的方式可以根据客户需求进行更改,可根据不同场所进行切换,故此产品在满足一般生活场所的同事更适合于,人员流动大的场所。
硬件组成及设计:
  此产品硬件主要分为以下几个方面 :1.显示电路:显示电路采用7针oled显示屏(spi通讯方式)
2.    指纹采集电路:指纹采集电路采用正点原子as608指纹模块进行指纹的录入删除对比
3.    键盘电路:键盘电路为3*4的矩阵键盘,由微动按键和洞洞板焊接制成(逐点扫描)
4.    通讯电路:此产品通讯为蓝牙通讯,采用hc-05蓝牙模块进行与手机app的通讯
5.    主控电路;主控电路采用stm32f407vet6最小系统板进行主要控制。

软件组成及设计 :   
   此产品软件部分主要分为以下两部分:1. stm32f407vet6程序设计:开发工具(keil5)
                                       程序见程序文件夹
2.    app程序设计:开发工具(mit app)
  程序见app.gzjkw.net/#14
IMG_20200129_230637.jpg
IMG_20200129_230853.jpg
IMG_20200129_230855.jpg
IMG_20200129_230904.jpg

Keil代码.7z

341.18 KB, 下载次数: 37, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:474195 发表于 2022-6-17 14:50 | 显示全部楼层
如有制作问题可联系本人
回复

使用道具 举报

ID:474195 发表于 2022-6-17 14:52 | 显示全部楼层
程序为早年所写,逻辑不是很好,勿喷
STM32单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "oled.h"
  5. #include "usart2.h"
  6. #include "gpio.h"
  7. #include "timer.h"
  8. #include "as608.h"
  9. #include "24cxx.h"
  10. #include "myiic.h"
  11. #define moto_down 1400
  12. #define moto_up 2100                   //最大2500
  13. #define time 1000                      //ms
  14. void ifmima(void);                     //密码判断函数
  15. void recivemima(void);                 //串口接收密码函数
  16. void turncode(void);                   //串口密码更改函数
  17. void press_FR(void);                   //刷指纹
  18. void Add_FR(void);                     //验证指纹
  19. void gui(u8 i);                        //界面函数
  20. void gpioinit(void);                   //gpio初始化函数
  21. void Del_FR(void);                     //指纹删除函数
  22. void incode(void);                     //按键输入函数
  23. void tcode(void);                      //按键更改密码函数
  24. u8 key(u8 mode);                       //按键扫描函数
  25. u8 turnstr(u8 d);                      //字符转换还函数
  26. u16 ValidN;                             //模块内有效指纹个数
  27. u8 mima[6]= {'1','1','1','1','1','1'};                //默认密码
  28. u16 shurumima[6]= {'0','0','0','0','0','0'};          //输入密码
  29. u16 turnmima[7]= {'0','0','0','0','0','0','0'};       //更改密码
  30. u16 i,j;
  31. u8 len;           //接收数据的长度;
  32. u8 change=0;      //密码更改标志位 更改1,不更改为0
  33. u8 over=0;        //输入密码结束标志位 完成1
  34. u8 ture=2;        //密码判断标志位 正确1,错误0,等待2
  35. u8 t=0;
  36. u8 reok=0;        //回到主界面标志位 为一回到主界面
  37. int main(void)
  38. {
  39.     PS_StaGPIO_Init();
  40.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //设置系统中断优先级分组2
  41.     delay_init(168);                                 //初始化延时函数
  42.     pwminit1(84-1,20000-1);
  43.     usart2_init(9600);                               //初始化串口2,用于与指纹模块通讯
  44.     uart_init(9600);                                       //初始化串口波特率为115200
  45.     OLED_Init();                                                             //初始化OLED
  46.     gpioinit();                                      //gpio初始化(按键)
  47.     AT24CXX_Init();                                               //24c02初始化
  48.     while(AT24CXX_Check())                           //等待24c02初始化完毕
  49.     OLED_Clear();
  50.     OLED_ShowCH(0,16,"准备中");
  51.     OLED_Refresh_Gram();
  52.          // AT24CXX_Write(0,(u8*)mima,6);           //       此条用于初始密码 如果密码忘记恢复此条密码初始为111111
  53.     AT24CXX_Read(0,mima,6);
  54.     delay_ms(2000);
  55.     OLED_Clear();                                    //清屏
  56.     gui(0);                                          //主界面
  57.     OLED_Refresh_Gram();                             //更新显示到OLED
  58.     TIM_SetCompare1(TIM3,moto_down);                 //舵机1500-2400  中值1850
  59.     while(1)
  60.     {
  61.         recivemima();                          //调用串口密码接收
  62.         if(reok==1) {
  63.             reok=0;    //如果标志位置一回到主屏
  64.             goto OVER;
  65.         }
  66.         switch(key(0))                           //选择哪个按键被按下
  67.         {
  68.         case 0:                                 //按键0被按下
  69.             gui(1);                               //进入界面1指纹解锁
  70.             while(1)                              //进入循环等待(等待操作结束)
  71.             {
  72.                 delay_ms(100);
  73.                 t++;                                 //延时100ms t加一(5秒无操作退出)
  74.                 switch(key(0))                        //选择次界面 指纹功能选择
  75.                 {
  76.                 case 0:  {
  77.                     Add_FR();     //指纹添加
  78.                     goto OVER;
  79.                 }
  80.                 case 10: {
  81.                     Del_FR();     //指纹删除
  82.                     goto OVER;
  83.                 }
  84.                 case 11: {
  85.                     press_FR();    //指纹验证
  86.                     goto OVER;
  87.                 }
  88.                 }
  89.                 if(t==50) {
  90.                     t=0;    //5秒无操作退出
  91.                     goto OVER;
  92.                 }
  93.             }

  94.         case 10: {
  95.             gui(2);
  96.             while(1)
  97.             {
  98.                 delay_ms(100);
  99.                 t++;
  100.                 switch (key(0))
  101.                 {
  102.                 case 0:
  103.                     while(1) {
  104.                         incode();
  105.                         goto OVER;
  106.                     }
  107.                 case 10:
  108.                     while(1) {
  109.                         tcode();
  110.                         goto OVER;
  111.                     }
  112.                 case 11:
  113.                     goto OVER;
  114.                 }
  115.                 if(t==50) {
  116.                     t=0;
  117.                     goto OVER;
  118.                 }
  119.             }
  120.             /*        case 11:
  121.                     {
  122.                     gui(4);
  123.                     while(1)
  124.                     {
  125.                     if(key(0)==11)goto OVER;

  126.                     if(reok==1)
  127.                     {goto OVER;}
  128.                     }
  129.                     }        */
  130.         }
  131. OVER: {
  132.             OLED_Clear();
  133.             gui(0);
  134.             break;
  135.         }
  136.         }
  137.     }
  138. }

  139. void recivemima(void)                                               //串口接收密码函数
  140. {
  141.     reok=0;                                                             //标志位清零
  142.     if(USART_RX_STA&0x8000)                                             //如果串口有数据发来
  143.     {
  144.         len=USART_RX_STA&0x3fff;                                           //得到此次接收到的数据长度
  145.         for(i=0; i<len; i++)                                               //数据转存
  146.         {
  147.             if(USART_RX_BUF[0]!='t') {
  148.                 shurumima[i]=USART_RX_BUF[i];    //如果没有接收到密码更改标志位数据存储在shurumima中
  149.                 change=0;
  150.             }
  151.             if(USART_RX_BUF[0]=='t') {
  152.                 turnmima[i]=USART_RX_BUF[i];           //如果接收到密码更改标志位数据存储在turnmima中 密码更改标志位置一
  153.                 change=1;
  154.             }
  155.         }
  156.         if(change==0)                                                      //密码更改
  157.         {
  158.             ifmima();                                                         //调用判断函数
  159.             if(ture==1) {
  160.                 OLED_Clear();
  161.                 OLED_ShowCH(0,16,"密码正确");
  162.                 OLED_Refresh_Gram();
  163.                 reok=1;
  164.                 TIM_SetCompare1(TIM3,moto_up);
  165.                 delay_ms(time);
  166.                 TIM_SetCompare1(TIM3,moto_down);
  167.             }
  168.             else {
  169.                 OLED_Clear();
  170.                 OLED_ShowCH(0,16,"密码错误");
  171.                 OLED_Refresh_Gram();
  172.                 reok=1;
  173.                 delay_ms(800);
  174.             }
  175.         }
  176.         if(change==1) {
  177.             turncode();
  178.         }
  179.         USART_RX_STA=0;                                                    //清除中断 标志位
  180.     }
  181. }



  182. void tcode(void)//按键更改密码函数
  183. {
  184.     u8 key1,count=0;
  185.     ture=2;
  186.     incode();                                                   //密码输入函数调用
  187.     if(ture==1)                                                   //输入原密码正确
  188.     {
  189.         OLED_Clear();
  190.         OLED_ShowCH(0,0,"请输新密码");
  191.         OLED_Refresh_Gram();
  192.         key1=key(0);                                                  //获取当前按键值(无按键按下是为15)
  193.         while(1)
  194.         {
  195.             key1=key(0);
  196.             while(key1==15)                                             //等待按键按下
  197.             {
  198.                 key1=key(0);
  199.             }
  200.             count++;                                                  //计算密码个数
  201.             OLED_ShowNum(12,23,count,2,12);
  202.             OLED_Refresh_Gram();
  203.             switch(count)                                              //密码转存
  204.             {
  205.             case 1:
  206.                 mima[0]=turnstr(key1);
  207.                 break;
  208.             case 2:
  209.                 mima[1]=turnstr(key1);
  210.                 break;
  211.             case 3:
  212.                 mima[2]=turnstr(key1);
  213.                 break;
  214.             case 4:
  215.                 mima[3]=turnstr(key1);
  216.                 break;
  217.             case 5:
  218.                 mima[4]=turnstr(key1);
  219.                 break;
  220.             case 6:
  221.                 mima[5]=turnstr(key1);
  222.                 break;
  223.             }
  224.             if(count==6)                                             //密码个数为6位
  225.             {
  226.                 count=0;
  227.                 delay_ms(100);
  228.                 break;
  229.             }
  230.             delay_ms(200);
  231.         }
  232.         AT24CXX_Write(0,(u8*)mima,6);
  233.         OLED_Clear();
  234.         OLED_ShowCH(0,16,"密码修改成功");
  235.         OLED_Refresh_Gram();
  236.         delay_ms(800);
  237.     }
  238.     else
  239.     {
  240.         OLED_Clear();
  241.         OLED_ShowCH(0,16,"密码修改错误");
  242.         OLED_Refresh_Gram();
  243.         delay_ms(800);
  244.         reok=1;
  245.     }
  246. }

  247. void incode(void)                            //按键输入函数
  248. {
  249.     u8 key1,count=0;
  250.     OLED_Clear();
  251.     OLED_ShowCH(0,0,"请输入密码");
  252.     OLED_Refresh_Gram();
  253.     key1=key(0);                               //返回15
  254.     while(1)
  255.     {
  256.         key1=key(0);
  257.         while(key1==15)
  258.         {
  259.             key1=key(0);
  260.         }
  261.         count++;
  262.         switch(count)
  263.         {
  264.         case 1:
  265.             shurumima[0]=turnstr(key1);
  266.             break;
  267.         case 2:
  268.             shurumima[1]=turnstr(key1);
  269.             break;
  270.         case 3:
  271.             shurumima[2]=turnstr(key1);
  272.             break;
  273.         case 4:
  274.             shurumima[3]=turnstr(key1);
  275.             break;
  276.         case 5:
  277.             shurumima[4]=turnstr(key1);
  278.             break;
  279.         case 6:
  280.             shurumima[5]=turnstr(key1);
  281.             break;
  282.         }
  283.         if(count==6)
  284.         {
  285.             count=0;
  286.             ifmima();
  287.             delay_ms(100);
  288.             break;
  289.         }
  290.         delay_ms(200);
  291.     }
  292.     if(ture==1) {
  293.         OLED_Clear();
  294.         OLED_ShowCH(0,16,"密码正确");
  295.         OLED_Refresh_Gram();
  296.         TIM_SetCompare1(TIM3,moto_up);
  297.         delay_ms(time);
  298.         TIM_SetCompare1(TIM3,moto_down);
  299.     }     //舵机开锁等待1秒后关闭

  300.     if(ture==0) {
  301.         OLED_Clear();
  302.         OLED_ShowCH(0,16,"密码错误");
  303.         OLED_Refresh_Gram();
  304.         delay_ms(800);
  305.     }
  306. }



  307. void turncode(void)//串口更改密码函数
  308. {
  309.     for(i=0; i<6; i++)
  310.     {
  311.         mima[i]=turnmima[i+1];              //数据转存(第一位为标志位省去)
  312.     }
  313.     AT24CXX_Write(0,(u8*)mima,6);
  314.     OLED_Clear();
  315.     OLED_ShowCH(0,16,"密码修改成功");
  316.     OLED_Refresh_Gram();
  317.     reok=1;                              //标志位置一 返回主界面
  318.     delay_ms(800);
  319. }



  320. void ifmima(void)//密码判断函数
  321. {
  322.     for(i=0; i<6; i++)
  323.     {
  324.         if(shurumima[i]==mima[i])ture=1;     //数组比较正确标志位置一
  325.         else {
  326.             ture=0;    //不正确标志位置0
  327.             break;
  328.         }
  329.     }
  330.     for(j=0; j<6; j++)
  331.     {
  332.         shurumima[j]='0';                     //清空输入密码的数组
  333.     }
  334. }




  335. //刷指纹
  336. void press_FR(void)
  337. {
  338.     SearchResult seach;
  339.     u8 ensure;
  340.     u8 t=0;
  341.     while(1)
  342.     {
  343.         t++;
  344.         ensure = PS_GetImage();
  345.         OLED_Clear();
  346.         OLED_ShowCH(0,0,"请按手指");
  347.         OLED_Refresh_Gram();
  348.         if(ensure == 0x00)    //获取图像成功
  349.         {
  350.             ensure = PS_GenChar(CharBuffer1);
  351.             if(ensure == 0x00)  //生成特征成功
  352.             {
  353.                 ensure = PS_HighSpeedSearch(CharBuffer1, 0, 99, &seach);
  354.                 if(ensure == 0x00) //搜索成功
  355.                 {
  356.                     OLED_Clear();
  357.                     OLED_ShowCH(0, 16, "指纹验证成功");
  358.                     OLED_Refresh_Gram();
  359.                     TIM_SetCompare1(TIM3,moto_up);
  360.                     delay_ms(1000);
  361.                     TIM_SetCompare1(TIM3,moto_down);
  362.                     // delay_ms(1500);
  363.                     delay_ms(1500);
  364.                     break;
  365.                 }
  366.                 else
  367.                 {   OLED_Clear();
  368.                     OLED_ShowCH(0, 16, "验证失败");
  369.                     OLED_Refresh_Gram();
  370.                     delay_ms(1500);
  371.                     break;
  372.                 }
  373.             }
  374.             else
  375.             {};
  376.         }
  377.         if(t==10)
  378.         {
  379.             t=0;
  380.             break;
  381.         }
  382.         delay_ms(500);
  383.     }
  384. }


  385. //添加指纹
  386. void Add_FR(void)
  387. {
  388.     u8 i, ensure, processnum = 0;
  389.     u8 ID_NUM = 0;
  390.     while(1)
  391.     {
  392.         switch (processnum)
  393.         {
  394.         case 0:
  395.             i++;
  396.             OLED_Clear();
  397.             OLED_ShowCH(0, 16, "请按手指");
  398.             OLED_Refresh_Gram();
  399.             ensure = PS_GetImage();
  400.             if(ensure == 0x00)
  401.             {
  402.                 ensure = PS_GenChar(CharBuffer1); //生成特征
  403.                 if(ensure == 0x00)
  404.                 {
  405.                     OLED_Clear();
  406.                     OLED_ShowCH(0, 16, "指纹正常");
  407.                     OLED_Refresh_Gram();
  408.                     i = 0;
  409.                     processnum = 1; //跳到第二步
  410.                 }
  411.             }
  412.             break;
  413.         case 1:
  414.             i++;
  415.             OLED_Clear();
  416.             ensure = PS_GetImage();
  417.             if(ensure == 0x00)
  418.             {
  419.                 ensure = PS_GenChar(CharBuffer2); //生成特征
  420.                 if(ensure == 0x00)
  421.                 {
  422.                     OLED_Clear();
  423.                     OLED_ShowCH(0, 16, "指纹正常");
  424.                     OLED_Refresh_Gram();
  425.                     i = 0;
  426.                     processnum = 2; //跳到第三步
  427.                 }
  428.                 else {
  429.                     OLED_ShowCH(0, 16,"失败");
  430.                     OLED_Refresh_Gram();
  431.                 }
  432.             }
  433.             else {
  434.                 OLED_ShowCH(0, 16, "失败");
  435.                 OLED_Refresh_Gram();
  436.             }
  437.             break;
  438.         case 2:
  439.             OLED_Clear();
  440.             OLED_ShowCH(0, 16, "对比两次指纹");
  441.             OLED_Refresh_Gram();
  442.             ensure = PS_Match();
  443.             if(ensure == 0x00)
  444.             {   OLED_Clear();
  445.                 OLED_ShowCH(0, 16, "对比成功");
  446.                 OLED_Refresh_Gram();
  447.                 processnum = 3; //跳到第四步
  448.             }
  449.             else
  450.             {
  451.                 OLED_ShowCH(0, 16, "对比失败");
  452.                 OLED_Refresh_Gram();
  453.                 i = 0;
  454.                 processnum = 0; //跳回第一步
  455.             }
  456.             delay_ms(500);
  457.             break;
  458.         case 3:
  459.             OLED_Clear();
  460.             OLED_ShowCH(0, 16, "可松开手指");
  461.             OLED_Refresh_Gram();
  462.             delay_ms(800);
  463.             OLED_Clear();
  464.             OLED_ShowCH(0, 16, "生成指纹模板");
  465.             OLED_Refresh_Gram();
  466.             delay_ms(500);
  467.             ensure = PS_RegModel();
  468.             if(ensure == 0x00)
  469.             {   OLED_Clear();
  470.                 OLED_ShowCH(0, 16, "生成指纹模板成功");
  471.                 OLED_Refresh_Gram();
  472.                 processnum = 4; //跳到第五步
  473.             }
  474.             else
  475.             {
  476.                 processnum = 0;
  477.                 OLED_ShowCH(0, 16, "失败");
  478.                 OLED_Refresh_Gram();
  479.             }
  480.             delay_ms(1000);
  481.             break;
  482.         case 4:
  483.             OLED_Clear();
  484.             OLED_ShowCH(0, 16, "输入用户编号");
  485.             OLED_Refresh_Gram();
  486.             while(ID_NUM==0|ID_NUM==15)
  487.             {
  488.                 ID_NUM=key(0);
  489.             }
  490.             OLED_Clear();
  491.             OLED_ShowCH(0, 0, "用户编号为");
  492.             OLED_ShowNum(0, 32, ID_NUM, 2, 24);
  493.             OLED_Refresh_Gram();
  494.             ensure = PS_StoreChar(CharBuffer2, ID_NUM); //储存模板
  495.             delay_ms(800);
  496.             if(ensure == 0x00)
  497.             {
  498.                 OLED_Clear();
  499.                 OLED_ShowCH(0, 16, "录入指纹成功");
  500.                 OLED_Refresh_Gram();
  501.                 delay_ms(1500);
  502.                 OLED_Clear();
  503.                 return ;
  504.             }
  505.             else
  506.             {
  507.                 OLED_Clear();
  508.                 processnum = 0;
  509.                 OLED_ShowCH(0, 16, "失败");
  510.                 OLED_Refresh_Gram();
  511.             }
  512.             break;
  513.         }
  514.         delay_ms(400);
  515.         if(i == 10) //超过5次没有按手指则退出
  516.         {
  517.             break;
  518.         }
  519.     }
  520. }


  521. //删除指纹
  522. void Del_FR(void)
  523. {
  524.     u8  ensure;
  525.     u16 ID_NUM = 0;
  526.     OLED_Clear();
  527.     OLED_ShowCH(0, 2, "输入清除用户编号");
  528.     OLED_Refresh_Gram();
  529.     while(ID_NUM==0|ID_NUM==15)
  530.     {
  531.         ID_NUM=key(0);
  532.     }
  533.     ensure = PS_DeletChar(ID_NUM, 1); //删除单个指纹
  534.     if(ensure == 0)
  535.     {
  536.         OLED_Clear();
  537.         OLED_ShowNum(0, 12, ID_NUM, 2, 12);
  538.         OLED_ShowCH(12, 12, "号删除指纹成功");
  539.         OLED_Refresh_Gram();
  540.     }
  541.     else
  542.         OLED_ShowCH(0, 16, "删除失败");
  543.     delay_ms(1500);
  544. }

  545. void gui(u8 i)
  546. {
  547.     switch(i)
  548.     {
  549.         /*******************************************/
  550.         /*
  551.         主界面
  552.         */
  553.         /*******************************************/
  554.     case 0:
  555.         OLED_Clear();
  556.         OLED_ShowCH(8,  0, "控智控能控锁控");
  557.         OLED_ShowCH(32, 16, "指纹解锁");
  558.         OLED_ShowCH(32, 32, "密码解锁");
  559. //  OLED_ShowCH(32, 48, "软件解锁");
  560.         OLED_Refresh_Gram();
  561.         break;

  562.         /*******************************************/
  563.         /*
  564.         指纹解锁界面
  565.         */
  566.         /*******************************************/
  567.     case 1:
  568.         OLED_Clear();
  569.         OLED_ShowCH(8,  0, "指控纹控解控锁");
  570.         OLED_ShowCH(32, 16, "添加指纹");
  571.         OLED_ShowCH(32, 32, "删除指纹");
  572.         OLED_ShowCH(32, 48, "验证指纹");
  573.         OLED_Refresh_Gram();
  574.         break;

  575.         /*******************************************/


  576.         /*******************************************/
  577.         /*
  578.         按键解锁主界面
  579.         */
  580.         /*******************************************/
  581.     case 2:
  582.         OLED_Clear();
  583.         OLED_ShowCH(8,  0, "密控码控解控锁");
  584.         OLED_ShowCH(32, 16,  "输入密码");
  585.         OLED_ShowCH(32, 32,  "修改密码");
  586.         OLED_ShowCH(40, 48,   "返控回");
  587.         OLED_Refresh_Gram();
  588.         break;



  589.         /*******************************************/
  590.         /*
  591.         按键解锁次界面
  592.         */
  593.         /*******************************************/
  594.     case 3:
  595.         OLED_Clear();
  596.         OLED_ShowCH(8,  0, "密控码控解控锁");
  597.         OLED_ShowCH(0, 16,  "请输入密码");
  598.         //OLED_ShowCH(32, 32,  "修改密码");
  599.         OLED_ShowCH(88, 48,   "返回");
  600.         OLED_Refresh_Gram();
  601.         break;


  602.         /*******************************************/
  603.         /*
  604.         软件解锁次界面
  605.         */
  606.         /*******************************************/
  607.     case 4:
  608.         OLED_Clear();
  609.         OLED_ShowCH(8,  0, "软控件控解控锁");
  610.         OLED_ShowCH(0, 16,  "请连接软件");
  611.         OLED_ShowCH(88, 48,   "返回");
  612.         OLED_Refresh_Gram();
  613.         break;
  614.     }
  615. }

  616. u8 turnstr(u8 d)
  617. {
  618.     switch(d)
  619.     {
  620.     case 0: {
  621.         return '0';
  622.         break;
  623.     }
  624.     case 1: {
  625.         return '1';
  626.         break;
  627.     }
  628.     case 2: {
  629.         return '2';
  630.         break;
  631.     }
  632.     case 3: {
  633.         return '3';
  634.         break;
  635.     }
  636.     case 4: {
  637.         return '4';
  638.         break;
  639.     }
  640.     case 5: {
  641.         return '5';
  642.         break;
  643.     }
  644.     case 6: {
  645.         return '6';
  646.         break;
  647.     }
  648.     case 7: {
  649.         return '7';
  650.         break;
  651.     }
  652.     case 8: {
  653.         return '8';
  654.         break;
  655.     }
  656.     case 9: {
  657.         return '9';
  658.         break;
  659.     }
  660.     }
  661. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表