久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4167|回復: 1
打印 上一主題 下一主題
收起左側

51單片機密碼鎖連接藍牙

[復制鏈接]
跳轉到指定樓層
樓主
ID:338299 發表于 2018-6-17 10:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
40黑幣
弄了個密碼鎖,通過矩陣鍵盤輸入密碼,然后想用手機輸入密碼,要在原來的程序中加什么代碼才可以實現藍牙控制啊,還有手機藍牙串口助手應該怎么設置那些按鍵,求大神幫幫忙
  1. #include <reg51.h>


  2. #define uchar unsigned char
  3. #define uint unsigned int


  4. uchar count;                                        // 密碼位計數
  5. uchar pw[4];                                        // 初始密碼存儲區
  6. uchar pwbuf[4];                                        // 輸入密碼存儲區
  7. uchar selfdefinebuf[4];                        //自定義密碼存儲區
  8. uchar error_cnt;                                //錯誤次數計數器
  9. bit enterflag;                                        // 確認鍵按下與否標志
  10. bit pwflag;                                                // 密碼正確與否標志

  11. bit last_pwflag;                                //前一次密碼輸入正確與否標志
  12. sbit open=P2^5;                                                        //鎖開指示燈,綠燈。低電平亮
  13. sbit beep=P2^0;                                //蜂鳴器,低電平叫
  14. sbit red=P2^1;                                //紅燈,低電平亮
  15. sbit close=P2^7;                                //鎖合指示燈,黃色。低電平亮
  16. sbit youxiao=P2^3;                                //藍燈,按鍵有效指示。低電平亮
  17. void flashred_L(void);                //閃紅燈,表示可輸入自定義密碼
  18. void flashred_S(void);                //快閃紅燈,重新輸入自定義密碼
  19. void flashall(void);                        //三盞燈全亮,不能繼續輸入







  20. /* 鍵消抖延時函數 */
  21. void delay(void)
  22. {
  23.         uint i;
  24.         for (i=8000;i>0;i--);
  25. }

  26. //藍燈亮一下,再滅,用來表示按鍵按下有效
  27. void youxiaoled()
  28. {
  29.         youxiao=0;
  30.         delay();
  31.         youxiao=1;
  32. }


  33. // 蜂鳴器短叫 報警
  34. void baojing()
  35. {
  36.    beep=0;
  37.    delay();
  38.    beep=1;
  39.    delay();
  40.    beep=0;
  41.    delay();
  42.    beep=1;
  43. }


  44. /* 鍵掃描函數 */
  45. uchar keyscan()                //鍵盤掃描函數
  46. {                  uchar temp;
  47.         P1=0xfe;
  48.         temp=P1;
  49.         temp=temp&0xf0;
  50.         if(temp!=0xf0)
  51.         {
  52.                 delay();        //鍵盤去抖,
  53.                 temp=P1;
  54.                 temp=temp&0xf0;
  55.                 if(temp!=0xf0)
  56.                 {      youxiaoled();  //按鍵有效指示燈亮,即藍燈亮
  57.                         
  58.                         temp=P1;
  59.                         switch(temp)
  60.                         {
  61.                                 case 0xee: return 1;break;
  62.                                 case 0xde: return 2;break;
  63.                                 
  64.                                 case 0xbe:return 3;break;
  65.                                 case 0x7e:return  11;break; //確定鍵 11                                
  66.                                 
  67.                         }
  68.                         while(temp!=0xf0)  //按鍵抬起檢測
  69.                         {
  70.                                 temp=P1;
  71.                                 temp=temp&0xf0;
  72.                         }        
  73.                 }
  74.                                       else return 0;//無鍵按下返回0
  75.         }
  76.         P1=0xfd;
  77.         temp=P1;
  78.         temp=temp&0xf0;
  79.         if(temp!=0xf0)
  80.         {
  81.                 delay();
  82.                 temp=P1;
  83.                 temp=temp&0xf0;
  84.                 if(temp!=0xf0)
  85.                 {      youxiaoled();
  86.                         
  87.                         temp=P1;
  88.                         switch(temp)
  89.                         {
  90.                                 case 0xed: return 4;break;
  91.                                 case 0xdd: return 5;break;
  92.                                 case 0xbd:return 6;break;
  93.                 case 0x7d:return 12;break;//取消鍵12
  94.                         }
  95.                         while(temp!=0xf0)
  96.                         {
  97.                                 temp=P1;
  98.                                 temp=temp&0xf0;
  99.                         }
  100.                 }
  101.                                       else return 0;
  102.         }
  103.         P1=0xfb;
  104.         temp=P1;
  105.         temp=temp&0xf0;
  106.         if(temp!=0xf0)
  107.         {
  108.                 delay();
  109.                 temp=P1;
  110.                 temp=temp&0xf0;
  111.                 if(temp!=0xf0)
  112.                 {        youxiaoled();
  113.                         
  114.                         temp=P1;
  115.                         switch(temp)
  116.                         {
  117.                                 case 0xeb:return 7;break;
  118.                                 case 0xdb: return 8;break;
  119.                                 case 0xbb:return 9;break;
  120.                case 0x7b:return 13;break;//重設密碼鍵13
  121.                         }
  122.                         while(temp!=0xf0)
  123.                         {
  124.                                 temp=P1;
  125.                                 temp=temp&0xf0;
  126.                         }
  127.                 }
  128.                                        else return 0;
  129.         }
  130.         P1=0xf7;
  131.         temp=P1;
  132.         temp=temp&0xf0;
  133.         if(temp!=0xf0)
  134.         {
  135.                 delay();
  136.                 temp=P1;
  137.                 temp=temp&0xf0;
  138.                 if(temp!=0xf0)
  139.                 {      youxiaoled();
  140.                
  141.                         temp=P1;
  142.                         switch(temp)
  143.                         {
  144.                                 case 0xe7:return 10;break;//數字0
  145.                default :break;
  146.                         }
  147.                         while(temp!=0xf0)
  148.                         {
  149.                                 temp=P1;
  150.                                 temp=temp&0xf0;
  151.                         }
  152.                 }
  153.                                    else return 0;
  154.         }
  155.         
  156. }




  157. /* 密碼比較函數 */
  158. bit pwcmp(void)
  159. {
  160.         bit flag;
  161.         uchar i;
  162.         for (i=0;i<4;i++)
  163.         {
  164.                 if (pw[i]==pwbuf[i])
  165.                         flag = 1;
  166.                 else
  167.                 {
  168.                         flag = 0;
  169.                         i = 4;
  170.                         error_cnt++;                //錯誤次數加1
  171.                 }
  172.         }
  173.         return(flag);
  174. }

  175. //初始化設置函數
  176. void init_main()
  177. {
  178.         

  179.         count = 0;                                                // 初始沒有輸入密碼,計數器設為0
  180.         error_cnt=0;                                        //錯誤次數歸0
  181.         enterflag = 0;                                        // 沒有按下確認鍵
  182.         pwflag = 0;                                                // 密碼標志先置為0
  183.         last_pwflag=0;
  184.                  close=0;                                                                            //鎖合燈亮,其它燈滅
  185.                  open = 1;                                                
  186.         beep = 1;                                                
  187.         red=1;
  188.         
  189.         /* 假設內定密碼為1234, 修改初始密碼可在這里改*/
  190.         pw[0] = 1;
  191.         pw[1] = 2;
  192.         pw[2] = 3;
  193.         pw[3] = 4;
  194.         
  195. }
  196. //長閃紅燈,表示可輸入自定義密碼
  197. void flashred_L(void)
  198. {
  199.         red=0;
  200.         delay();
  201.         delay();
  202.         delay();
  203.         delay();
  204.         red=1;
  205.         delay();
  206.         delay();
  207.         delay();
  208.         delay();
  209.         red=0;
  210.         delay();
  211.         delay();
  212.         delay();
  213.         delay();
  214.         red=1;
  215.         delay();
  216.         delay();
  217.         delay();
  218.         delay();
  219.         red=0;
  220.         delay();
  221.         delay();
  222.         delay();
  223.         delay();
  224.         red=1;
  225. }
  226. //快閃紅燈,重新輸入自定義密碼
  227. void flashred_S(void)
  228. {
  229.         red=0;
  230.         delay();
  231.         delay();
  232.         red=1;
  233.         delay();
  234.         delay();
  235.         red=0;
  236.         delay();
  237.         delay();
  238.         red=1;
  239.         delay();
  240.         delay();
  241.         red=0;
  242.         delay();
  243.         delay();
  244.         red=1;
  245. }
  246. void flashall(void)
  247. {
  248.         beep=0;
  249.         open=0;
  250.         red=0;
  251.         delay();
  252.         delay();
  253.         beep=1;
  254.         open=1;
  255.         red=1;
  256. }
  257. /* 主程序 */
  258. void main()
  259. {
  260.         uchar j, key;
  261.         uchar tempkey;

  262.         init_main();
  263.         

  264.           while(1)
  265.     {
  266.                 if(error_cnt<3)                                        //錯誤次數小于3
  267.                 {
  268.                 key = keyscan();                                        // 調用鍵盤掃描函數
  269.                
  270.                 if(key>0&&key<=10)                                //用戶輸入密碼
  271.                         {
  272.                         if(key==10)
  273.                                 key=0;
  274.                            if (count<4)
  275.                         {
  276.                                 pwbuf[count] = key;
  277.                                 count++;
  278.                         }
  279.                         }
  280.         
  281.                 else if(key==11)                                                // 確認鍵按下
  282.                         {
  283.                         enterflag = 1;                                // 確認鍵按下
  284.                         if (count==4)                                 // 只有輸入4個密碼后按確認鍵才作密碼比較
  285.             {
  286.                delay( );
  287.                                 pwflag = pwcmp();
  288.              }
  289.                         else
  290.                         {                                                
  291.                                 pwflag = 0;                                // 否則直接pmflag賦0
  292.                                 error_cnt++;                        //錯誤次數加一
  293.                         }
  294.                         last_pwflag=pwflag;                                //前一次密碼輸入正確與否標志
  295.                         enterflag = 0;                                         // 標志位置回0
  296.                         count = 0;                                                // 密碼位計數器清零
  297.                                 delay( );
  298.                         if (pwflag==1)                        
  299.                                 {open = 0; close=1;red=1;beep=1;}   //密碼正確時,綠燈亮,其它燈滅                                       
  300.                         else                                                        
  301.                                 {open=1;close=0;red=1;baojing(); }   //密碼錯誤時,黃燈亮并短報警                                       
  302.                         }

  303.                 else if(key==12)                                        // 取消鍵按下
  304.                         {        
  305.                         count = 0;                                                // 密碼計數清零
  306.                         
  307.                         }
  308.                 else if(key==13)                                           //重設密碼鍵按下
  309.                 {                  open=1;
  310.                         if(last_pwflag==1)                                //判斷上次用戶輸入密碼正確與否
  311.                         {
  312.                                 
  313.                                 flashred_L();                                //閃紅燈表示可輸入自定義密碼
  314.                                 while(last_pwflag)
  315.                                 {
  316.                                         tempkey=keyscan();
  317.                
  318.                                         if(tempkey>0&&tempkey<=10)                                //用戶輸入密碼
  319.                                         {
  320.                                                 if(tempkey==10)
  321.                                                         tempkey=0;
  322.                                            if (count<4)
  323.                                                 {
  324.                                                 selfdefinebuf[count] = tempkey;                        //保存用戶自定義密碼
  325.                                                 count++;
  326.                                                 }
  327.                                         }
  328.                                        
  329.                                         else if(tempkey==11)                                //確認鍵按下
  330.                                         {        
  331.                                                 enterflag=1;
  332.                                                 if(count==4)
  333.                                                 {close=0;open=1;beep=1;
  334.                                                 for(j=0;j<4;j++)
  335.                                                         pw[j]=selfdefinebuf[j];                        //修改密碼存儲數組
  336.                                                 
  337.                                                 last_pwflag=0;
  338.                                                 enterflag=0;
  339.                                        
  340.                                                 count=0;

  341.                                                 }

  342.                                                 else                        //如果輸入數據不足四位或大于四位,輸入作廢,重新輸入
  343.                                                 {
  344.                                                         flashred_S();                                 //快閃紅燈,重新輸入自定義密碼
  345.                                                         count = 0;                                                // 密碼計數清零
  346.                                                         
  347.                                                         
  348.                                                         
  349.                                                 }
  350.                                         }
  351.                                 }
  352.                         }
  353.                 }
  354.         }
  355.                 else
  356.                         {
  357.                                 
  358.                                 while(1)                                //錯誤次數超過三次,停止工作蜂鳴器一直叫
  359.                                    beep=0;
  360.                         }               
  361.         }
  362. }
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:303383 發表于 2018-6-17 12:12 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91.xxx.高清在线 | 免费久久99精品国产婷婷六月 | 91社区在线观看播放 | 日韩av一区二区在线观看 | 久久精品99 | 亚洲精品第一 | 中文字幕视频在线观看 | 亚洲欧美日韩在线 | 日韩精品一区二区三区中文字幕 | 特级a欧美做爰片毛片 | 女女爱爱视频 | 国产一区二区三区 | 久久精品亚洲精品国产欧美 | 亚洲免费毛片 | 人人性人人性碰国产 | 九九热精品视频在线观看 | 久久久精品综合 | 第一区在线观看免费国语入口 | 日韩三级在线 | 久久久久国产一区二区三区四区 | aⅴ色国产 欧美 | 国产在线精品一区二区三区 | 精品久久1| 欧美在线播放一区 | 国产美女h视频 | 国产成人久久精品一区二区三区 | 91视频在线看 | 国产精品一区在线观看 | 久久久久国产精品www | 中文字幕av网 | 精品欧美一区二区在线观看 | 亚洲情视频 | 欧美视频| 国产精品欧美一区二区三区不卡 | 国产精品区一区二区三 | 久久久2o19精品 | 国产分类视频 | 国产精品欧美一区喷水 | 日韩在线欧美 | 韩日在线视频 | 日韩不卡一二区 |