标题:
基于蓝牙无线通讯srtp的风扇控制单片机源码
[打印本页]
作者:
1573781971
时间:
2017-7-28 17:46
标题:
基于蓝牙无线通讯srtp的风扇控制单片机源码
原来做过一个电风扇的控制。附件里面包括单片机源代码。可实现用手机对风扇的速度进行控制。
所需要的元件包括蓝牙模块2个,单片机一块,风扇一台,自己的手机一部。控制电路是自己用动动板焊接的,想自己动手做的朋友可以画PCB。
自己原创,还请多多指教。
0.png
(47.74 KB, 下载次数: 68)
下载附件
2017-7-28 17:51 上传
单片机源程序如下:
#include <REG52.H>
#include <intrins.h>
#include "ds18b20.h" //引入DS18B20头文件
sbit k1 = P0^2; // P2^0;
sbit k2 = P0^3; //P2^1;
sbit k3 = P0^5;// P2^2;
sbit k4 = P1^4;
sbit k5 = P2^4;
unsigned char UART_buff,n,s,miao,fen,shi,m,miao1,fen1,shi1,x,chart,i;
unsigned char ly_dis[4];//定义显示缓冲区
char ltemp;
bit New_rec = 0, Send_ed = 1, Money = 0;
void wendu(void);
//----------------------------------------------
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
void init()
{
TMOD=0X01; //设置定时器0为模式一,即16位计算模式
TH0=(65536-36660)/256; //给计数寄存器赋值,50毫秒时间
TL0=(65536-36660)%256;
// EA=1; //开启总中断
ET0=1; //开启定时器0中断
TR0=1; //启动定时器0
}
void main (void)
{ k4 =0;
init();
SCON = 0x50; //串口方式1, 8-n-1, 允许接收.
TMOD = 0x20; //T1方式2
TH1 = 0xFD; // [url=]//9600bps@11.0592MHz[/url]
TL1 = 0xFD;
TR1 = 1;
ES = 1; //开中断.
EA = 1;
k4=1;
n=0;m=0;miao1=0; x=0;
while(1) {
if((UART_buff == 1)&&(New_rec == 1)){ n++;New_rec = 0;k4=1; //不限时三个挡位的控制
switch(n) {
case 1:k1=0; k2=1; k3=1; break;
case 2:k1=1; k2=0; k3=1; break;
case 3:k1=1; k2=1; k3=0;n=0; break;
// case 4:k1=1; k2=1; k3=1; break;
} }
else if((UART_buff == 2)&&(New_rec == 1)){ New_rec = 1;miao1=0;k4=1;chart=1; //定时30分钟的控制
while(miao1<30)
{ if((UART_buff == 2)&&(New_rec == 1)){ x++;New_rec = 0;
switch(x) {
case 1:k1=0; k2=1; k3=1; break;
case 2:k1=1; k2=0; k3=1; break;
case 3:k1=1; k2=1; k3=0;x=0; break;
// case 4:k1=1; k2=1; k3=1; k4=0; break;
} }
else if((UART_buff == 6)&&(New_rec == 1)){k1=1; k2=1; k3=1; x=0;k4=0;miao1=40;}
}
k1=1; k2=1; k3=1; x=0;
}
else if((UART_buff == 3)&&(New_rec == 1)){ New_rec = 1;fen1=0;k4=1;chart=1; //定时1个小时的控制
while(fen1<2)
{ if((UART_buff == 3)&&(New_rec == 1)){ x++;New_rec = 0;
switch(x) {
case 1:k1=0; k2=1; k3=1; break;
case 2:k1=1; k2=0; k3=1; break;
case 3:k1=1; k2=1; k3=0;x=0; break;
// case 4:k1=1; k2=1; k3=1; k4=0; break;
}
}
else if((UART_buff == 6)&&(New_rec == 1)){k1=1; k2=1; k3=1; x=0;k4=0;fen1=40;}
}
k1=1; k2=1; k3=1; x=0;
}
else if((UART_buff == 4)&&(New_rec == 1)){ New_rec = 1;fen1=0;k4=1; //定时两个小时的控制
while(fen1<5)
{ if((UART_buff == 4)&&(New_rec == 1)){ x++;New_rec = 0;
switch(x) {
case 1:k1=0; k2=1; k3=1; break;
case 2:k1=1; k2=0; k3=1; break;
case 3:k1=1; k2=1; k3=0;x=0; break;
//case 4:k1=1; k2=1; k3=1; x=0;k4=0;Delay10ms();Delay10ms();Delay10ms(); break;
} }
else if((UART_buff == 6)&&(New_rec == 1)){k1=1; k2=1; k3=1; x=0;k4=0;fen1=40;}
}
k1=1; k2=1; k3=1; x=0;
}
else if((UART_buff == 5)&&(New_rec == 1)){ New_rec = 0;k4=1;i=1; //温度自动控制的三个挡位
while(i){ if((UART_buff == 6)&&(New_rec == 1)){New_rec = 0;k1=1; k2=1; k3=1;k4=0;i=0;}
else if((ly_dis[1]==2)&&(ly_dis[2]<=5)){k1=0; k2=1; k3=1;}
else if((ly_dis[1]==2)&&(ly_dis[2]>5)){k1=1; k2=0; k3=1;}
else if((ly_dis[1]==3)&&(ly_dis[2]>=0)){k1=1; k2=1; k3=0;}
else {k1=1; k2=1; k3=1;k4=1;}
}
}
else if((UART_buff == 6)&&(New_rec == 1)){New_rec = 0;k1=1; k2=1; k3=1;k4=0;i=0;}
}
}
//----------------------------------------------
void ser_int (void) interrupt 4
{
if(RI == 1) { //如果收到.
RI = 0; //清除标志.
New_rec = 1;
UART_buff = SBUF; //接收.
}
/*else { //如果送毕.
TI = 0; //清除标志.
Send_ed = 1;
} */
}
void wendu(void)
{
ltemp=tmp()/16; //得到十进制温度值,因为DS18B20可以精确到0.0625度,这里取整数显示
if(ltemp<0){ //判断第一位显示整数还是负号
ly_dis[0]=0xbf;
ltemp=0-ltemp;
}
else
ly_dis[0]=ltemp/100;//显示百位值
ltemp=ltemp%100;
ly_dis[1]=ltemp/10; //显示温度十位值
ly_dis[2]=ltemp%10; //显示温度个位值
ly_dis[3]=10; //最后一位显示一个C单位
}
//中断函数,关键字"interrupt" , 这是C语言的中断函数表示法,1表时定地器0
void timer() interrupt 1
{
TH0=(65536-36660)/256; //重新赋值50毫秒中断
TL0=(65536-36660)%256;
s++; //比较精确的脉冲输出,50MS翻转一次,即1秒中闪烁10次,
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
蓝牙控制.zip
(36.17 KB, 下载次数: 31)
2017-7-28 17:45 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
yuxiaohuo
时间:
2018-4-29 19:41
请问你这个控制电路的电路图有吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1