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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機連接藍牙后怎么用啊

[復制鏈接]
跳轉到指定樓層
樓主
ID:338299 發表于 2018-5-25 19:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
弄了個密碼鎖,通過矩陣鍵盤輸入密碼,然后想用手機輸入密碼,但連了藍牙后不知道該怎么辦,是要在原來的程序中添加什么代碼還是要怎樣啊,下了個藍牙串口助手也不知該怎么弄,那位知道的可否指點一下迷津。

代碼如下:
  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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:34643 發表于 2018-5-25 23:21 | 只看該作者
需要在你的單片機代碼中加入串口通信程序。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:317135 發表于 2018-5-28 15:24 | 只看該作者
/**************************************************************************************
*                              串口通信實驗                                                                                                  *
實現現象:下載程序后打開串口調試助手,將波特率設置為4800,選擇發送的數據就可以顯示
                        在串口助手上。具體操作參考操作視頻
注意事項:無。                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;

sbit IN1=P2^0;//控制左電機IN1=0、IN2=0制動,IN1=0、IN2=1正轉,IN1=1、IN2=0反轉,IN1=1、IN2=1制動.
sbit IN2=P2^1;//控制左電機
sbit IN3=P2^2;//控制右電機
sbit IN4=P2^3;//控制右電機

/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能                   :設置串口
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void UsartInit()
{
        SCON=0X50;                        //設置為工作方式1
        TMOD=0X20;                        //設置計數器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //計數器初始值設置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打開接收中斷
        EA=1;                                                //打開總中斷
        TR1=1;                                        //打開計數器
}

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{       
        while(1)
        {
        UsartInit();  //        串口初始化       
        }       
}

/*******************************************************************************
* 函數名         : Usart() interrupt 4
* 函數功能                  : 串口通信中斷函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void Usart() interrupt 4
{
        u8 receiveData;

        receiveData=SBUF;//出去接收到的數據
        if(SBUF==0x00)
         {IN1=1;IN2=1;IN3=1;IN4=1;}
         else if(SBUF==0x01)
         {IN1=0;IN2=1;IN3=0;IN4=0;}
         else if(SBUF==0x02)
         {IN1=0;IN2=1;IN3=0;IN4=0;}
     else if(SBUF==0x03)
         {IN1=0;IN2=1;IN3=0;IN4=0;}
         else if(SBUF==0x04)
         {IN1=0;IN2=0;IN3=0;IN4=1;}
         else if(SBUF==0x05)
         {IN1=0;IN2=0;IN3=0;IN4=1;}
         else if(SBUF==0x06)
         {IN1=0;IN2=0;IN3=0;IN4=1;}
         else if(SBUF==0x07)
         {IN1=0;IN2=1;IN3=0;IN4=1;}
         else
         {IN1=0;IN2=0;IN3=0;IN4=0;}
        RI = 0;//清除接收中斷標志位
        SBUF=receiveData;//將接收到的數據放入到發送寄存器
        while(!TI);                         //等待發送數據完成
        TI=0;                                                 //清除發送完成標志位
}
回復

使用道具 舉報

地板
ID:97941 發表于 2018-5-28 16:57 | 只看該作者
藍牙只是作為一個無線傳輸的媒介,取代USB串口線的一種方式。建議按照以下步驟:
1.先用有線串口模塊連接單片機和電腦,調試串口程序,先實現通過串口調試助手發送密碼可以解鎖
2.配置藍牙(包括波特率、配對密碼設置)
3.把藍牙模塊替換有線串口模塊,在安卓手機端安裝串口調試助手進行測試
回復

使用道具 舉報

5#
ID:338299 發表于 2018-5-28 22:01 | 只看該作者
斷水流93 發表于 2018-5-28 16:57
藍牙只是作為一個無線傳輸的媒介,取代USB串口線的一種方式。建議按照以下步驟:
1.先用有線串口模塊連接 ...

電腦是不是只要用USB連接單片機,然后下個串口調試助手就可以呀?我下了之后發送消息沒有反應,是還少弄了什么嗎?
回復

使用道具 舉報

6#
ID:341207 發表于 2018-5-30 10:48 | 只看該作者
loading88 發表于 2018-5-28 15:24
/**************************************************************************************
*                         ...

請問一下這個程序是下載到單片機嗎,然后用手機串口助手調試?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲色图第一页 | 国产日韩欧美电影 | 久久久精品国产 | 81精品国产乱码久久久久久 | 国产清纯白嫩初高生视频在线观看 | 91av亚洲| 成人综合伊人 | 欧美在线视频一区二区 | 激情av免费看 | 欧美精品乱码久久久久久按摩 | 日本免费黄色一级片 | 久久青视频| 午夜视频在线观看网站 | 亚洲综合小视频 | 亚洲精品视频在线 | 欧美日韩在线观看一区二区三区 | 亚洲国产高清在线观看 | 精品日韩欧美一区二区 | 成人免费一区二区 | 成人av一区二区三区 | 九九热精品视频 | 精品欧美一区二区久久久伦 | 精品国产一区二区三区性色av | 999热精品 | 草久久久 | 免费一级毛片 | www.久久久久久久久久久久 | 亚洲乱码国产乱码精品精98午夜 | 国产精品一区一区三区 | 欧美久久一区二区三区 | 色综合成人网 | 中文字幕一区二区视频 | 91在线看片| 午夜免费福利电影 | 亚洲精品久久久蜜桃网站 | 欧美精品一二三 | 亚洲欧美aⅴ | 国产精品成人久久久久 | 黄一级| 日日噜噜噜夜夜爽爽狠狠视频97 | 黄色香蕉视频在线观看 |