找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3950|回复: 1
打印 上一主题 下一主题
收起左侧

基于蓝牙无线通讯srtp的风扇控制单片机源码

[复制链接]
跳转到指定楼层
楼主
原来做过一个电风扇的控制。附件里面包括单片机源代码。可实现用手机对风扇的速度进行控制。
所需要的元件包括蓝牙模块2个,单片机一块,风扇一台,自己的手机一部。控制电路是自己用动动板焊接的,想自己动手做的朋友可以画PCB。
自己原创,还请多多指教。


单片机源程序如下:
  1. #include <REG52.H>  
  2. #include <intrins.h>
  3. #include "ds18b20.h"        //引入DS18B20头文件

  4. sbit k1 = P0^2; //         P2^0;
  5. sbit k2 = P0^3; //P2^1;
  6. sbit k3 = P0^5;//        P2^2;
  7. sbit k4 = P1^4;
  8. sbit k5 = P2^4;
  9. unsigned char UART_buff,n,s,miao,fen,shi,m,miao1,fen1,shi1,x,chart,i;
  10. unsigned char ly_dis[4];//定义显示缓冲区
  11. char ltemp;
  12. bit New_rec = 0, Send_ed = 1, Money = 0;  
  13. void wendu(void);
  14. //----------------------------------------------  

  15. void Delay10ms()                //@11.0592MHz
  16. {
  17.         unsigned char i, j;

  18.         i = 108;
  19.         j = 145;
  20.         do
  21.         {
  22.                 while (--j);
  23.         } while (--i);
  24. }

  25. void init()
  26. {
  27.         TMOD=0X01;                                //设置定时器0为模式一,即16位计算模式
  28.         TH0=(65536-36660)/256;        //给计数寄存器赋值,50毫秒时间
  29.         TL0=(65536-36660)%256;
  30. //        EA=1;                //开启总中断
  31.         ET0=1;                //开启定时器0中断
  32.         TR0=1;                //启动定时器0
  33. }
  34. void main (void)  
  35. {          k4 =0;
  36.     init();
  37.     SCON = 0x50;   //串口方式1, 8-n-1, 允许接收.  
  38.     TMOD = 0x20;   //T1方式2  
  39.     TH1 = 0xFD;   // [url=]//9600bps@11.0592MHz[/url]  
  40.     TL1 = 0xFD;  
  41.     TR1 = 1;                          
  42.     ES  = 1;       //开中断.  
  43.     EA  = 1;
  44.         k4=1;
  45.         n=0;m=0;miao1=0; x=0;
  46.     while(1)  {
  47.                         if((UART_buff == 1)&&(New_rec == 1)){  n++;New_rec = 0;k4=1;                    //不限时三个挡位的控制
  48.                                                       switch(n) {
  49.                                                                             case 1:k1=0; k2=1; k3=1; break;
  50.                                                                                     case 2:k1=1; k2=0; k3=1; break;
  51.                                                                             case 3:k1=1; k2=1; k3=0;n=0; break;                                                                                               
  52.                                                                            // case 4:k1=1; k2=1; k3=1;  break;                                                                                   
  53.                                                                         }        }                        
  54.                                  else if((UART_buff == 2)&&(New_rec == 1)){  New_rec = 1;miao1=0;k4=1;chart=1;   //定时30分钟的控制
  55.                                                                                                        while(miao1<30)
  56.                                                                                                      { if((UART_buff == 2)&&(New_rec == 1)){  x++;New_rec = 0;
  57.                                                                                                        switch(x) {
  58.                                                                                                              case 1:k1=0; k2=1; k3=1; break;
  59.                                                                                                                      case 2:k1=1; k2=0; k3=1; break;
  60.                                                                                                             case 3:k1=1; k2=1; k3=0;x=0; break;
  61.                                                                                                                                                                 //        case 4:k1=1; k2=1; k3=1; k4=0; break;                                                                                               
  62.                                                                                                                               }         }
  63.                                                                                                                                         else if((UART_buff == 6)&&(New_rec == 1)){k1=1; k2=1; k3=1; x=0;k4=0;miao1=40;}
  64.                                                                                                    }                                                               
  65.                                                                                          k1=1; k2=1; k3=1; x=0;                                                                                   
  66.                                                                                  }
  67.                            else if((UART_buff == 3)&&(New_rec == 1)){  New_rec = 1;fen1=0;k4=1;chart=1;   //定时1个小时的控制
  68.                                                                                                        while(fen1<2)
  69.                                                                                                      { if((UART_buff == 3)&&(New_rec == 1)){  x++;New_rec = 0;
  70.                                                                                                        switch(x) {
  71.                                                                                                              case 1:k1=0; k2=1; k3=1; break;
  72.                                                                                                                      case 2:k1=1; k2=0; k3=1; break;
  73.                                                                                                             case 3:k1=1; k2=1; k3=0;x=0; break;
  74.                                                                                                                                                                 //        case 4:k1=1; k2=1; k3=1; k4=0; break;                                                                                               
  75.                                                                                                                                   }
  76.                                                                                                                                                                           }
  77.                                                                                                                                                   else if((UART_buff == 6)&&(New_rec == 1)){k1=1; k2=1; k3=1; x=0;k4=0;fen1=40;}
  78.                                                                                                    }                                                               
  79.                                                                                          k1=1; k2=1; k3=1; x=0;                                                                                   
  80.                                                                                  }
  81.                            else if((UART_buff == 4)&&(New_rec == 1)){  New_rec = 1;fen1=0;k4=1;           //定时两个小时的控制
  82.                                                                                                        while(fen1<5)
  83.                                                                                                      { if((UART_buff == 4)&&(New_rec == 1)){  x++;New_rec = 0;
  84.                                                                                                        switch(x) {
  85.                                                                                                              case 1:k1=0; k2=1; k3=1; break;
  86.                                                                                                                      case 2:k1=1; k2=0; k3=1; break;
  87.                                                                                                             case 3:k1=1; k2=1; k3=0;x=0; break;
  88.                                                                                                                                                                         //case 4:k1=1; k2=1; k3=1; x=0;k4=0;Delay10ms();Delay10ms();Delay10ms(); break;                                                                                               
  89.                                                                                                                               }         }
  90.                                                                                                                                 else if((UART_buff == 6)&&(New_rec == 1)){k1=1; k2=1; k3=1; x=0;k4=0;fen1=40;}

  91.                                                                                                    }                                                               
  92.                                                                                          k1=1; k2=1; k3=1; x=0;                                                                                   
  93.                                                                                  }
  94.                                 else if((UART_buff == 5)&&(New_rec == 1)){  New_rec = 0;k4=1;i=1;                     //温度自动控制的三个挡位
  95.                                                                                                                 while(i){         if((UART_buff == 6)&&(New_rec == 1)){New_rec = 0;k1=1; k2=1; k3=1;k4=0;i=0;}
  96.                                                                                                                                              else if((ly_dis[1]==2)&&(ly_dis[2]<=5)){k1=0; k2=1; k3=1;}
  97.                                                                                                                                              else if((ly_dis[1]==2)&&(ly_dis[2]>5)){k1=1; k2=0; k3=1;}
  98.                                                                                                                                                  else if((ly_dis[1]==3)&&(ly_dis[2]>=0)){k1=1; k2=1; k3=0;}
  99.                                                                                                                                                  else {k1=1; k2=1; k3=1;k4=1;}
  100.                                                                                                  }                                                        
  101.                                                                                  }
  102.                                  else   if((UART_buff == 6)&&(New_rec == 1)){New_rec = 0;k1=1; k2=1; k3=1;k4=0;i=0;}
  103.                }  

  104. }  
  105. //----------------------------------------------  
  106. void ser_int (void) interrupt 4   
  107. {  
  108.     if(RI == 1) {  //如果收到.  
  109.       RI = 0;      //清除标志.  
  110.       New_rec = 1;  
  111.       UART_buff = SBUF;  //接收.
  112.     }  
  113.     /*else  {        //如果送毕.  
  114.       TI = 0;      //清除标志.  
  115.       Send_ed = 1;  
  116.     }                          */
  117. }  
  118. void wendu(void)
  119. {
  120.      
  121.                         ltemp=tmp()/16;                //得到十进制温度值,因为DS18B20可以精确到0.0625度,这里取整数显示
  122.                         if(ltemp<0){                //判断第一位显示整数还是负号
  123.                                 ly_dis[0]=0xbf;
  124.                                 ltemp=0-ltemp;       
  125.                         }
  126.                         else
  127.                         ly_dis[0]=ltemp/100;//显示百位值
  128.                         ltemp=ltemp%100;
  129.                         ly_dis[1]=ltemp/10;        //显示温度十位值
  130.                         ly_dis[2]=ltemp%10;        //显示温度个位值
  131.                         ly_dis[3]=10;                //最后一位显示一个C单位
  132. }  


  133. //中断函数,关键字"interrupt" , 这是C语言的中断函数表示法,1表时定地器0
  134. void timer() interrupt 1
  135. {
  136.         TH0=(65536-36660)/256;        //重新赋值50毫秒中断
  137.         TL0=(65536-36660)%256;
  138.         s++;                                //比较精确的脉冲输出,50MS翻转一次,即1秒中闪烁10次,
  139. ……………………

  140. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
蓝牙控制.zip (36.17 KB, 下载次数: 31)




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:318114 发表于 2018-4-29 19:41 | 只看该作者
请问你这个控制电路的电路图有吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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