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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機藍(lán)牙開關(guān)帶APP狀態(tài)反饋

[復(fù)制鏈接]
回帖獎勵 10 黑幣 回復(fù)本帖可獲得 1 黑幣獎勵! 每人限 1 次(中獎概率 30%)
跳轉(zhuǎn)到指定樓層
樓主
ID:198608 發(fā)表于 2021-8-25 16:04 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
/*///////////////按鍵定義/////////////////////////////////
sbit LED1=P1^0;                                                //繼電器輸出接口1
sbit LED2=P1^6;                                                //繼電器輸出接口2
sbit LED3=P1^7;                                                //繼電器輸出接口3


sbit k1=P3^2;                                                //啟動停止按鍵1
sbit k2=P3^3;                                                //啟動停止按鍵2
sbit k3=P3^4;                                                //啟動停止按鍵3
作者:小梁學(xué)長
測試芯片STC89C52RC
藍(lán)牙模塊HC-05  默認(rèn)波特率9600
單片機晶振11.0592
APP為易安卓編寫
喜歡的朋友支持一下哦,可以關(guān)注一下相互討論學(xué)習(xí)哦
*//////////////////////////////////////////////////////////






  1. #include<reg52.h>
  2. #include <stdio.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. extern unsigned char  F16T,F16RH;                //溫濕度數(shù)據(jù)
  6. unsigned char Rx_buf[4],Rxnum=0,temp,rh;
  7. sbit LED1=P1^0;                                                //繼電器輸出接口1
  8. sbit LED2=P1^6;                                                //繼電器輸出接口2
  9. sbit LED3=P1^7;                                                //繼電器輸出接口3


  10. sbit k1=P3^2;                                                //啟動停止按鍵1
  11. sbit k2=P3^3;                                                //啟動停止按鍵2
  12. sbit k3=P3^4;                                                //啟動停止按鍵3




  13. uint c;         
  14. uchar temp;        
  15. unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  16. uchar  U8FLAG,U8comdata;
  17. uchar  U8count,U8temp;
  18. uchar  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  19. unsigned char F16T,F16RH,n;// read 8 bits onice
  20. #define IR_CH_MIN  0x45                                        //  CH-         
  21. #define IR_CH      0x46                                        //  CH         
  22. #define IR_CH_ADD  0x47                                        //  CH+         
  23. #define IR_LEFT    0x44                                        //  |<<         
  24. #define IR_RIGHT   0x40                                        //  >>|     
  25. #define IR_RUN     0x43                                        //  >||         
  26. #define IR_MIN     0x07                                        //  -         
  27. #define IR_ADD     0x15                                        //  +         
  28. #define IR_EQ      0x09                                        //  EQ         
  29. #define IR_0       0x16                                        //  0         
  30. #define IR_100     0x19                                        //  100+         
  31. #define IR_200     0x0D                                        //  200+         
  32. #define IR_1       0x0C                                        //  1         
  33. #define IR_2       0x18                                        //  2         
  34. #define IR_3       0x5E                                        //  3         
  35. #define IR_4       0x08                                        //  4         
  36. #define IR_5       0x1C                                        //  5         
  37. #define IR_6       0x5A                                        //  6         
  38. #define IR_7       0x42                                        //  7         
  39. #define IR_8       0x52                                        //  8        
  40. #define IR_9       0x4A                                        //  9      
  41. #define D_TIMER0                100                        //選擇定時器時間, us, 紅外接收要求在60us~250us之間//125微妙一次中斷
  42. //#define        User_code                0x611c                //定義紅外接收用戶碼
  43. #define FOSC                12000000L        //定義主時鐘
  44. #define freq_base                (FOSC / 1200)                //10000                        //系統(tǒng)工作單步時間為1us
  45. #define Timer0_Reload        (D_TIMER0 * freq_base / 10000)//100        //定時器重裝值




  46. //初始畫時顯示的內(nèi)容
  47. uchar code Init1[]="TA=   C              ";
  48. uchar code Init2[]="RH=   %              ";
  49. void LCDdelay(uint z)                  //該延時大約100us(不精確,液晶操作的延時不要求很精確)
  50. {
  51.   uint x,y;
  52.   for(x=z;x>0;x--)
  53.     for(y=10;y>0;y--);
  54. }
  55. sbit bit11=P2^0;
  56. void write_com(uchar com)
  57. {
  58.   LCDRS=0;
  59.   LCDRW=0;
  60.   LCDEN=0;        
  61.   P0=com;
  62.   LCDdelay(5);
  63.   LCDEN=1;
  64.   LCDdelay(5);
  65.   LCDEN=0;
  66.         LCDdelay(5);
  67. }
  68. //寫數(shù)據(jù)
  69. void write_data(uchar date)
  70. {
  71.   LCDRS=1;
  72.         LCDRW=0;
  73.   LCDEN=0;
  74.   P0=date;
  75.   LCDdelay(5);
  76.   LCDEN=1;  
  77.   LCDdelay(5);
  78.   LCDEN=0;
  79.         LCDdelay(5);
  80. }
  81. sbit LCDRS = P2^7;
  82. sbit LCDRW = P2^6;
  83. sbit LCDEN = P2^5;
  84. void Init1602()
  85. {
  86.   uchar i=0;
  87.   write_com(0x38);//屏幕初始化
  88.   write_com(0x0c);//打開顯示 無光標(biāo) 無光標(biāo)閃爍
  89.   write_com(0x06);//當(dāng)讀或?qū)懸粋字符是指針后一一位
  90.   write_com(0x01);//清屏
  91.         
  92.   write_com(0x80);//設(shè)置位置
  93.   for(i=0;i<16;i++)
  94.   {
  95.                 write_data(Init1[ i]);          //顯示數(shù)組1的數(shù)據(jù)[ i]
  96.   }
  97.         write_com(0x80+5);
  98.         write_data(0xdf);//°
  99.         
  100.   write_com(0x80+0x40);//設(shè)置位置
  101.   for(i=0;i<16;i++)
  102.   {
  103.                 write_data(Init2[ i]);          //顯示數(shù)組2的數(shù)據(jù)[ i]
  104.   }
  105.         
  106. }


  107. void Delay_ms(unsigned int n)//n 毫秒延時
  108. {
  109.         unsigned char j;
  110.         while(n--)
  111.         {
  112.                 for(j=0;j<125;j++);
  113.         }
  114.     if(k1==0)                          //
  115.         {
  116.             while(k1==0);          //
  117.                 if(LED1==1)                  //
  118.                 LED1=0;                          //
  119.                 else LED1=1;          //
  120.         }


  121.             if(k2==0)                  //
  122.                 {
  123.                     while(k2==0); //
  124.                         if(LED2==1)          //
  125.                         LED2=0;                  //
  126.                         else LED2=1;  //
  127.                 }
  128.                 if(k3==0)                  //
  129.                 {
  130.                     while(k3==0); //
  131.                         if(LED3==1)          //)
  132.                         LED3=0;                  //
  133.                         else LED3=1;  //
  134.                 }




  135.         
  136. }
  137. void Delay_us(unsigned char n)
  138. {
  139.         n=n/2;
  140.         while(--n);
  141. }//N us 延時函數(shù)


  142. //----------------------------------
  143. //-----溫濕度讀取子程序 ------------
  144. //----------------------------------
  145. //----以下變量均為全局變量----------
  146. //----溫度高 8 位== U8T_data_H------
  147. //----溫度低 8 位== U8T_data_L------
  148. //----濕度高 8 位== U8RH_data_H-----
  149. //----濕度低 8 位== U8RH_data_L-----
  150. //----校驗 8 位 == U8checkdata------
  151. //----調(diào)用相關(guān)子程序如下------------
  152. //---- Delay();, Delay_10us();,COM();
  153. //--------------------------------
  154. char  COM(void)
  155. {
  156.         char i,U8temp,U8comdata;           //用于最終讀取的溫濕度數(shù)據(jù)
  157.         for(i=0;i<8;i++)
  158.         {
  159.                 while(!bit11);               
  160.                 Delay_us(35);                        //表示讀取的高電位延時大于 20 多 us 則讀取的是 1 否則讀取的是0
  161.                 U8temp=0;               
  162.                 if(bit11)U8temp=1;                //通過 U8FLAG可判斷bit11 顯示數(shù)據(jù)的脈長
  163.                 while(bit11);
  164.                 U8comdata<<=1;
  165.                 U8comdata|=U8temp;
  166.                 }//rof
  167.                 return    U8comdata;
  168.         }


  169. void getDHT11(void)
  170. {
  171.         GO1:bit11=0;
  172.         Delay_ms(20);                                 //主機拉低 18ms
  173.         bit11=1;                                        //總線由上拉電阻拉高 主機延時 20us
  174.         Delay_us(60);                                 //主機設(shè)為輸入


  175.         
  176.         if(!bit11)                               //bit11=1;判斷從機響應(yīng)信號,判斷從機是否有低電平響應(yīng)信號
  177.         {
  178.                 while(!bit11);                        //如不響應(yīng)則跳出,響應(yīng)則向下運行
  179.                 while(bit11);
  180.                 U8RH_data_H=COM();                //數(shù)據(jù)接收狀態(tài)
  181.                 U8RH_data_L=COM();
  182.                 U8T_data_H=COM();
  183.                 U8T_data_L=COM();
  184.                 U8checkdata=COM();
  185.                 bit11=1;               
  186.                 if((U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L)!=U8checkdata)   //數(shù)據(jù)校驗
  187.                 goto  GO1;
  188.         }//fi
  189.         F16T=U8T_data_H+U8T_data_L/256;                                                                             //change integer to float
  190.         F16RH=U8RH_data_H+U8RH_data_L/256;
  191. }




  192. void InitUART(void)                                 //這是串口的基本配置,配置他的波特率是9600.這些參數(shù)都是標(biāo)準(zhǔn)的。
  193. {
  194.     TMOD = 0x20;
  195.     SCON = 0x50;
  196.     TH1 = 0xFD;
  197.     TL1 = TH1;
  198.     PCON = 0x00;
  199.     EA = 1;
  200.     ES = 1;
  201.     TR1 = 1;
  202. }


  203. /*
  204. * UART 發(fā)送一字節(jié)
  205. */
  206. void UART_send_byte(char dat)
  207. {
  208.         SBUF = dat;
  209.         while (TI == 0);
  210.         TI = 0;
  211. }


  212. /*
  213. * UART 發(fā)送字符串
  214. */
  215. void UART_send_string(unsigned char *buf)
  216. {
  217.         while (*buf != '\0')
  218.         {
  219.                 UART_send_byte(*buf++);
  220.         }
  221. }




  222. void main()
  223. {
  224.           unsigned char   Tx_Buf[12];
  225.           unsigned char LEDstatus;//燈的狀態(tài)
  226.         Delay_ms(50);//上電延時100ms,等待SHT11啟動
  227.         Init1602();                          //調(diào)用初始化顯示函數(shù)
  228.          InitUART();                        //初始化串口
  229.         temp=90;
  230.         rh=90;
  231.          while(1)        
  232.         {
  233.                   getDHT11();                                                 //
  234.                   Tx_Buf[0]='T';                                                //幀頭
  235.                   Tx_Buf[1]=F16T/10%10+0x30;                         //將數(shù)據(jù)送往發(fā)送數(shù)組,送給藍(lán)牙模塊讓手機APP顯示
  236.                   Tx_Buf[2]=F16T%10+0x30;               
  237.                   Tx_Buf[3]=F16RH/10%10+0x30;
  238.                   Tx_Buf[4]=F16RH%10+0x30;
  239.                   Tx_Buf[5]=temp/10%10+0x30;                         //將數(shù)據(jù)送往發(fā)送數(shù)組,送給藍(lán)牙模塊讓手機APP顯示
  240.                    Tx_Buf[6]=temp%10+0x30;               
  241.                   Tx_Buf[7]=rh/10%10+0x30;
  242.                    Tx_Buf[8]=rh%10+0x30;
  243.                   LEDstatus=LED1;
  244.                   Tx_Buf[9]=LEDstatus+0x30;                        //發(fā)送狀態(tài)到APP顯示
  245.                   LEDstatus=LED2;
  246.                   Tx_Buf[10]=LEDstatus+0x30;                    //發(fā)送狀態(tài)到APP顯示
  247.                   LEDstatus=LED3;
  248.                   Tx_Buf[11]=LEDstatus+0x30;                        //發(fā)送加濕狀態(tài)到APP顯示
  249.                   UART_send_string(Tx_Buf);                          //串口發(fā)送溫濕度數(shù)據(jù)出去


  250.                
  251.                
  252.                
  253.                  Delay_ms(1000);
  254.         }
  255. }


  256. /*****************串口接收中斷函數(shù),接收藍(lán)牙模塊的數(shù)據(jù)*********************/
  257. void UARTInterrupt(void) interrupt 4
  258. {        
  259.         ES=0;                                                                        //關(guān)閉中斷
  260.     if(RI)                                                                          //接收到數(shù)據(jù)
  261.     {
  262.                 Rx_buf[Rxnum]=SBUF;                                  //接收數(shù)據(jù)進(jìn)數(shù)組
  263.                 if(Rx_buf[Rxnum]==0x0A)
  264.                 Rxnum=0;
  265.                 else
  266.                 Rxnum++;
  267.                 if(Rx_buf[0]==0x31)                                        //
  268.                 {
  269.                         if(Rx_buf[1]==0x30)                                //
  270.                         LED1=0;                                                        //
  271.                         if(Rx_buf[1]==0x31)                                //接收到的APP傳送來的切換為手動指令
  272.                         LED1=1;                                                        //        
  273.                 }
  274.                 if(Rx_buf[0]==0x32)                                        //接收到的APP傳送來的指令頭部數(shù)據(jù)
  275.                 {
  276.                         if(Rx_buf[1]==0x30)                                //接收到的APP傳送來的開指令
  277.                         LED2=0;                                                        //
  278.                         if(Rx_buf[1]==0x31)                                //
  279.                         LED2=1;                                                        //        
  280.                 }
  281.                 if(Rx_buf[0]==0x33)                                        //接收到的APP傳送來的指令頭部數(shù)據(jù)
  282.                 {
  283.                         if(Rx_buf[1]==0x30)                                //接收到的APP傳送來的指令
  284.                         {
  285.                                 LED3=0;                                                //
  286.                         }
  287.                         else
  288.                         if(Rx_buf[1]==0x31)                            //接收到的APP傳送來的指令
  289.                         {
  290.                                 LED3=1;                                                //        
  291.                         }
  292.                 }
  293.                 if(Rx_buf[0]==0x34)                                   //接收到的APP傳送來的頭數(shù)據(jù)
  294.                 {
  295.                         if(Rx_buf[1]==0x31)                           //
  296.                         {
  297.                                 temp++;                                           //
  298.                                 if(temp>99)
  299.                                 temp=99;
  300.                         }
  301.                         if(Rx_buf[1]==0x30)                           //
  302.                         {
  303.                                 temp--;                                           //
  304.                                 if(temp<1)
  305.                                 temp=1;
  306.                     }
  307.                         Rx_buf[1]=0;                                   //
  308.                 }
  309.                 if(Rx_buf[0]==0x35)                                  //接收到的APP傳送來的指令頭數(shù)據(jù)
  310.                 {
  311.                         if(Rx_buf[1]==0x31)                          //接收到的APP傳送來的定值加1指令
  312.                         {
  313.                                 rh++;                                          //濕度定值加1
  314.                                 if(rh>99)
  315.                                 rh=99;
  316.                         }
  317.                         if(Rx_buf[1]==0x30)                          //接收到的APP傳送來的設(shè)置定值減1指令
  318.                         {
  319.                                 rh--;                                          //
  320.                                 if(rh<1)
  321.                                 rh=1;
  322.                         }
  323.                         Rx_buf[1]=0;                                  //清除指令
  324.                 }
  325.         }
  326.     RI=0;
  327.            ES=1;                                                                          //關(guān)閉中斷
  328. }
復(fù)制代碼


程序.zip

57.51 KB, 下載次數(shù): 40, 下載積分: 黑幣 -5

藍(lán)牙智能開關(guān)APP.zip

631.47 KB, 下載次數(shù): 48, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發(fā)
ID:477532 發(fā)表于 2021-8-30 00:07 | 只看該作者
希望能加入幀頭幀尾
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线观看av中文字幕 | 久久精品国产一区二区电影 | 国产农村妇女毛片精品久久麻豆 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 国产成人精品免费视频大全最热 | 国产成在线观看免费视频 | 天天干天天草 | 精品自拍视频在线观看 | 国产精品欧美精品日韩精品 | 国产99久久久国产精品 | 自拍偷拍中文字幕 | 久久久久九九九女人毛片 | 亚洲第一在线 | 中文字幕视频在线观看 | 久久亚洲国产精品日日av夜夜 | 久久精品高清视频 | 91国在线视频 | 日韩资源| a视频在线观看 | 视频第一区 | 欧美午夜激情在线 | 日韩国产一区二区三区 | 中文字幕精品一区 | 免费观看av | 性视频网| 四虎影院在线播放 | 一级做a爰片性色毛片 | 免费在线观看一区二区三区 | 一呦二呦三呦国产精品 | 日韩精品在线看 | 在线一区视频 | 日韩精品一区二区在线 | 夜夜操天天操 | 国产一级片在线播放 | 91传媒在线观看 | 精品一区二区三区四区在线 | 欧美精品一区二区三区在线四季 | 日韩视频免费看 | 9191av| 日韩三级电影一区二区 | 国产福利在线播放麻豆 |