找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2192|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)C語言的簡易藍(lán)牙鎖代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:441210 發(fā)表于 2018-12-6 20:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
C語言的簡易藍(lán)牙鎖

單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uint unsigned int  
  3. #define uchar unsigned char

  4. uchar r_buf; //藍(lán)牙接收到的字符存儲緩沖區(qū)

  5. sbit PWMA=P2^0;        //電機(jī)驅(qū)動模塊接口
  6. sbit IN1=P2^2;
  7. sbit IN2=P2^1;
  8. sbit STBY=P2^3;

  9. sbit LED1=P0^0;        //LED燈接口
  10. sbit LED2=P0^1;
  11. sbit LED3=P0^2;

  12. sbit key1=P1^0;         //按鍵接口
  13. sbit key2=P1^1;
  14. sbit key3=P1^2;
  15. sbit key4=P1^3;

  16. sbit beep=P2^4;          //蜂鳴器接口

  17. uchar state;          //聲明一個變量,取名state

  18. void delay(uint x)        //延時函數(shù)
  19. {
  20.         uint i,j;
  21.         for(i=x;i>0;i--)
  22.                 for(j=110;j>0;j--);
  23. }
  24. void turnon()          //開門函數(shù)
  25. {
  26.         IN1=0;
  27.         IN2=1;
  28.         delay(700);
  29. }
  30. void turnoff()          //關(guān)門函數(shù)
  31. {
  32.         IN1=1;
  33.         IN2=0;
  34.         delay(700);
  35. }
  36. void turnstop()         //停止函數(shù)
  37. {
  38.         IN1=1;
  39.         IN2=1;
  40. }
  41. void InitUART()    //串口初始化9600
  42. {
  43.                    //初始化串口定時器9600
  44.         TMOD = 0x20;   //0x20=0010 0000 TMOD中的M0和M1為控制方式的選擇 M1=1,M0=0 T1,方式2
  45.         PCON = 0x00;   //波特率不倍增
  46.         SCON = 0x50;   //串口模式1,允許接收   
  47.         TH1 = 0xFD;           //波特率9600
  48.         TL1 = 0xFD;           //波特率9600
  49.         EA = 1;                   //開總中斷
  50.         TR1 = 1;           //啟動定時器1       
  51.         ES = 1;               //打開串行口中斷
  52.         STBY = 1;           //電機(jī)驅(qū)動STBY=1有效,等于1,才能驅(qū)動電機(jī)
  53.         PWMA = 1;           //
  54. }
  55. void SendOneByte(uchar c) //發(fā)送字符函數(shù)
  56. {
  57.     SBUF = c-0x30;
  58.     while(!TI);
  59.     TI = 0;
  60. }
  61. void keyscan()                          //鍵盤掃描函數(shù)
  62. {
  63.         if(key1 == 0)                   //掃描按鍵key1
  64.         {                                          //延時10ms,消抖
  65.                 delay(10);
  66.                 if(key1 == 0)
  67.                 {
  68.                         beep=0;                  //蜂鳴器響
  69.                         LED2=1;                  //紅燈關(guān)掉
  70.                     LED3=0;                  //黃燈亮
  71.                         delay(400);          //延時400毫秒
  72.                         beep=1;                  //關(guān)閉蜂鳴器
  73.                         turnon();     //打開門
  74.                         turnstop();   //停止
  75.                         state=1;          //將1賦值給state
  76.                         while(!key1); //等待按鍵釋放
  77.                 }
  78.         }
  79.         if(key2==0)                           //掃描按鍵key2
  80.         {                                          //延時10ms,消抖
  81.                 delay(10);
  82.                 if(key2 == 0)
  83.                 {
  84.                
  85.                         beep = 0;          //蜂鳴器響
  86.                         LED1 = 1;          //綠燈關(guān)掉
  87.                         LED3 = 0;          //黃燈亮
  88.                         delay(400);          //延時400毫秒
  89.                         beep = 1;          //關(guān)閉蜂鳴器
  90.                         turnoff();          //關(guān)門
  91.                         turnstop();          //停止
  92.                         state = 2;          //將2賦值給state
  93.                         while(!key2); //等待按鍵釋放
  94.                 }
  95.         }
  96. }

  97. void main()
  98. {
  99.     InitUART();
  100.         //r_buf = '2';
  101.         while(1)
  102.         {

  103.                 keyscan();                 //
  104.                 if(state == 1)   //sate==1,也就是打開了門,亮LED1綠燈
  105.                 {
  106.                         LED1 = 0;
  107.                         LED2 = 1;
  108.                         LED3 = 1;   
  109.                 }
  110.                 else if(state == 2)         //sate==2,也就是關(guān)閉了門,亮LED2紅燈燈
  111.                 {
  112.                         LED1 = 1;
  113.                         LED3 = 1;
  114.                         LED2 = 0;   
  115.                 }
  116.                 else
  117.                 {
  118.                         LED1 = 1;
  119.                         LED2 = 1;
  120.                         LED3 = 0;       
  121.                 }
  122.         }
  123. }
  124. void UARTInterrupt(void) interrupt 4 //串口接收字符
  125. {
  126.     if(RI)
  127.     {
  128.         RI = 0;             //
  129.         
  130.         r_buf = SBUF;     //
  131.         if(state!=1)
  132.         {
  133.                 if(r_buf == '0')  //如果為字符‘0’
  134.                 {
  135.                         beep = 0;          //蜂鳴器響
  136.                         LED2 = 1;          //紅燈關(guān)掉
  137.                     LED3 = 0;          //黃燈亮
  138.                         delay(400);          //延時400毫秒
  139.                         beep = 1;          //關(guān)閉蜂鳴器
  140.                         turnon();     //打開門
  141.                         turnstop();   //停止
  142.                         state = 1;          //將1賦值給state
  143.                 }
  144.         }
  145.         if(state!=2)
  146.         {
  147.                 if(r_buf == '1')  //如果為字符‘1’
  148.                 {
  149.                         beep = 0;          //蜂鳴器響
  150.                         LED1 = 1;          //綠燈關(guān)掉
  151.                         LED3 = 0;          //黃燈亮
  152.                         delay(400);          //延時400毫秒
  153.                         beep = 1;          //關(guān)閉蜂鳴器
  154.                         turnoff();          //關(guān)門
  155.                         turnstop();          //停止
  156.                         state = 2;          //將2賦值給state
  157.                 }
  158.         }
  159.         else //如果為其它字符
  160.         {
  161.           LED3 = 1;
  162.         }

  163.    SendOneByte(r_buf);//向手機(jī)回發(fā)該字符
  164.     }
  165. }
復(fù)制代碼

所有資料51hei提供下載:
藍(lán)牙鎖.zip (30.74 KB, 下載次數(shù): 26)


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

使用道具 舉報

沙發(fā)
ID:568474 發(fā)表于 2019-6-21 20:48 | 只看該作者
有電路圖嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表