51单片机之蓝牙控制风扇

畅学单片机 2020-12-15 00:00

首先买一个蓝牙模块,在手机上下载一个蓝牙串口调试助手,等同于单片机的UART串口通信,利用BUFF来获取接受到的数据,这里只需要重视一个问题,就是测试编码,如果APP发送0xFF,(APP蓝牙串口调试助手已经支持手动设置按钮名字和发送的字符了)但是蓝牙模块很有可能接受到的是0xF8,0xF2,0xFE。所以这里我们首先应该测试编码。HC-06一般有5个端口,RX,TX,VCC,GND,AT,AT这里我们没有用到,是指更改密码,默认密码一般是1234或者0000,把VCC和GND接好,然后RX和TX分别和单片机的TX和RX相连接(就是P3^0和P3^1,切记要相反连接),然后我们按照一般的UART串口通信就可以啦,检测接受到BUFF数据,然后switch就可以实现相应的功能。



#include


#define uchar unsigned char


#define uint unsigned int


sbit PWM=P1^0;


sbit DSPORT=P3^7;


void Ds18b20ReadTemp();


void UsartConfiguration();


unsigned int temp=0;


unsigned char zhuanshu=20;


unsigned int cnt=0;


unsigned char receiveData;


unsigned int dingshi=0;


unsigned char min=1;


void main(void)


{


unsigned int i=3000;


UsartConfiguration();


while(1)


{


if(cnt>=3000)


{


cnt=0;


Ds18b20ReadTemp(); //3s检测一次温度


}


switch(receiveData)


{


case 177:ET0=1;zhuanshu=20;receiveData=0;break; // 数字1 风扇启动


case 178:zhuanshu=0;while(i--);ET0=0;receiveData=0;break; //数字2 风扇停止 由于IO口默认高电平 所以要让zhuanshu=0


case 179:zhuanshu=30;break;//数字3 低挡


case 180:zhuanshu=50;break;//数字4 中挡


case 181:zhuanshu=70;break;// 数字5高挡


case 182: // 数字6自动根据温度调节转速


{


if(temp<3200)


{


zhuanshu=25;


}


if((temp>3200)&&(temp<3300))


{


zhuanshu=30;


}


if((temp>3400)&&(temp<3600))


{


zhuanshu=50;


}


if((temp>3200)&&(temp<3300))


{


zhuanshu=60;


}


} break;


case 183: //定时时间数字7


{


static dingshi=0;


if(dingshi>=60000) //1分钟一个基准


{


min--;


dingshi=0;


if(min==0)


{


ET0=0;


zhuanshu=0;


}


}


break;


case 184: receiveData=0;min++;break; //增加时间 数字8


case 185: receiveData=0;min--;break; //减少时间 数字9


}


}


}


}


void UsartConfiguration()


{


SCON=0X50; //设置为工作方式1


TMOD=0X21; //设置计数器工作方式2


PCON=0X80; //波特率加倍


TH0 = 0xFC;


TL0 = 0x66;


TH1=0XF9; //计数器初始值设置,注意波特率是9600的


TL1=0XF9;


ET0=1;


ES=1; //打开接收中断


EA=1; //打开总中断


TR1=1;


TR0=1; //打开计数器


}


void Usart() interrupt 4


{


receiveData=SBUF; //出去接收到的数据


RI = 0; //清除接收中断标志位


}


void Time1(void) interrupt 1 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断


{


static unsigned char timer1=0;


TH0 = 0xF6; //重新赋初值


TL0 = 0x66;


timer1++;


cnt++;


dingshi++;


if(dingshi>=60050)


{


dingshi=0;


}


if(timer1>100) //PWM周期为100*0.5ms


{


timer1=0;


}


if(timer1


{


PWM=1;


}


else


{


PWM=0;


}


}


void Delay1ms(uint y) //延时程序


{


uint x;


for( ; y>0; y--)


{


for(x=110; x>0; x--);


}


}


uchar Ds18b20Init() //温度的子函数


{


uchar i;


DSPORT = 0; //将总线拉低480us~960us


i = 70;


while(i--);//延时642us


DSPORT = 1; //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低


i = 0;


while(DSPORT) //等待DS18B20拉低总线


{


i++;


if(i>5)//等待>5MS


{


return 0;//初始化失败


}


Delay1ms(1);


}


return 1;//初始化成功


}


void Ds18b20WriteByte(uchar dat)


{


uint i, j;


for(j=0; j<8; j++)


{


DSPORT = 0; //每写入一位数据之前先把总线拉低1us


i++;


DSPORT = dat & 0x01; //然后写入一个数据,从最低位开始


i=6;


while(i--); //延时68us,持续时间最少60us


DSPORT = 1; //然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值


dat >>= 1;


}


}


uchar Ds18b20ReadByte()


{


uchar byte, bi;


uint i, j;


for(j=8; j>0; j--)


{


DSPORT = 0;//先将总线拉低1us


i++;


DSPORT = 1;//然后释放总线


i++;


i++;//延时6us等待数据稳定


bi = DSPORT; //读取数据,从最低位开始读取


/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/


byte = (byte >> 1) | (bi << 7);


i = 4; //读取完之后等待48us再接着读取下一个数


while(i--);


}


return byte;


}


void Ds18b20ChangTemp()


{


Ds18b20Init();


Delay1ms(1);


Ds18b20WriteByte(0xcc);//跳过ROM操作命令


Ds18b20WriteByte(0x44); //温度转换命令


// Delay1ms(100);//等待转换成功,而如果你是一直刷着的话,就不用这个延时了


}


void Ds18b20ReadTempCom()


{


Ds18b20Init();


Delay1ms(1);


Ds18b20WriteByte(0xcc);//跳过ROM操作命令


Ds18b20WriteByte(0xbe);//发送读取温度命令


}


void Ds18b20ReadTemp()


{


float tp;


int temp1 = 0;


uchar tmh, tml;


Ds18b20ChangTemp();//先写入转换命令


Ds18b20ReadTempCom();//然后等待转换完后发送读取温度命令


tml = Ds18b20ReadByte();//读取温度值共16位,先读低字节


tmh = Ds18b20ReadByte();//再读高字节


temp1 = tmh;


temp1 <<= 8;


temp1 |= tml;


if(temp1< 0)


{


temp1=temp1-1;


temp1=~temp1;


tp=temp1;


temp1=tp*0.0625*100+0.5;


}


else


{


tp=temp1;


temp1=tp*0.0625*100+0.5;


}


temp=temp1%10000;


}

为了方便大家更好的学习,您还可以关注畅学电子和EDA的公众号,每天推送相关知识,希望能对你的学习有所帮助!

畅学单片机 以单片机为核心,带你全面了解和单片机相关的知识技巧,经验心得。关注我们,一起来学习吧!
评论
  • 引言工程师作为推动科技进步和社会发展的核心力量,在各个领域发挥着关键作用。为深入了解工程师的职场现状,本次调研涵盖了不同行业、不同经验水平的工程师群体,通过问卷调查、访谈等方式,收集了大量一手数据,旨在全面呈现工程师的职场生态。1. 工程师群体基本信息行业分布:调研结果显示,工程师群体广泛分布于多个行业,其中制造业占比最高,达到 90%,其次是信息技术、电子通信、能源等行业。不同行业的工程师在工作内容、技术要求和职业发展路径上存在一定差异。年龄与经验:工程师群体以中青年为主,30 - 45 岁年
    Jeffreyzhang123 2024-12-27 17:39 72浏览
  • 一、前言 回首2024,对于我而言,是充满挑战与收获的一年。在这一年里,我积极参与了论坛的众多活动,不仅拓宽了我的认知边界(有些东西不是你做不到,而是你想不到),还让我在实践中收获了宝贵的经验和。同时,多种多样的论坛活动让我们全方面的接受新东西,连接新知识,多种类型的的活动交织了你我的2024。在这里说一说对过去一年的活动经历,进行一次年终总结,并谈谈我的收获和感受,以及对2025年的展望。二、活动足迹(一)快速体验:机智云Gokit2.0开发板初体验 机智云Gokit2.0开发板的体验活动让大
    无言的朝圣 2024-12-27 14:50 49浏览
  • 在当今这个科技飞速发展的时代,物联网(IoT)已经不再是一个陌生的概念,它正以一种前所未有的速度改变着我们的生活和工作方式,像一股无形的力量,将世界紧密地连接在一起,引领我们步入一个全新的智能时代。物联网是什么简单来说,物联网就是通过感知设备、网络传输、数据处理等技术手段,实现物与物、人与物之间的互联互通和智能化管理。想象一下,你的家里所有的电器都能 “听懂” 你的指令,根据你的习惯自动调节;工厂里的设备能够实时监测自身状态,提前预警故障;城市的交通系统可以根据实时路况自动优化信号灯,减少拥堵…
    Jeffreyzhang123 2024-12-27 17:18 53浏览
  • 一、引言无人机,作为近年来迅速崛起的新兴技术产物,正以前所未有的速度改变着众多行业的运作模式,从民用领域的航拍、物流,到工业领域的测绘、巡检,再到军事领域的侦察、打击等,无人机的身影无处不在。为了深入了解无人机的现状,本次调研综合了市场数据、行业报告、用户反馈等多方面信息,全面剖析无人机的发展态势。二、市场规模与增长趋势随着技术的不断进步和成本的逐渐降低,无人机市场呈现出爆发式增长。近年来,全球无人机市场规模持续扩大,预计在未来几年内仍将保持较高的增长率。从应用领域来看,消费级无人机市场依然占据
    Jeffreyzhang123 2024-12-27 17:29 82浏览
  • 在科技飞速发展的今天,汽车不再仅仅是一种交通工具,更是一个融合了先进技术的移动智能空间。汽车电子作为汽车产业与电子技术深度融合的产物,正以前所未有的速度推动着汽车行业的变革,为我们带来更加智能、安全、舒适的出行体验。汽车电子的发展历程汽车电子的发展可以追溯到上世纪中叶。早期,汽车电子主要应用于发动机点火系统和简单的电子仪表,功能相对单一。随着半导体技术的不断进步,集成电路被广泛应用于汽车领域,使得汽车电子系统的性能得到了显著提升。从电子燃油喷射系统到防抱死制动系统(ABS),从安全气囊到车载导航
    Jeffreyzhang123 2024-12-27 11:53 80浏览
  • 在当今科技飞速发展的时代,工业电子作为现代制造业的中流砥柱,正以前所未有的速度推动着各个行业的变革与进步。从汽车制造到航空航天,从智能家居到工业自动化,工业电子的身影无处不在,为我们的生活和生产带来了巨大的改变。工业电子的崛起与发展工业电子的发展历程可谓是一部波澜壮阔的科技进化史。追溯到上世纪中叶,电子技术开始逐渐应用于工业领域,最初主要是简单的电子控制装置,用于提高生产过程的自动化程度。随着半导体技术、计算机技术和通信技术的不断突破,工业电子迎来了爆发式的增长。集成电路的发明使得电子设备的体积
    Jeffreyzhang123 2024-12-27 15:40 67浏览
  • 采购与分销是企业运营中至关重要的环节,直接影响到企业的成本控制、客户满意度和市场竞争力。以下从多个方面介绍如何优化采购与分销:采购环节优化供应商管理供应商评估与选择:建立一套全面、科学的供应商评估体系,除了考虑价格因素,还要综合评估供应商的产品质量、交货期、信誉、研发能力、售后服务等。通过多维度评估,选择那些能够提供优质产品和服务,且与企业战略目标相契合的供应商。建立长期合作关系:与优质供应商建立长期稳定的合作关系,这种合作模式可以带来诸多好处。双方可以在信任的基础上进行深度沟通与协作,共同开展
    Jeffreyzhang123 2024-12-27 17:43 63浏览
  • 起源与基础20 世纪 60 年代:可编程逻辑设备(PLD)的概念出现,一种被称为 “重构能力” 的芯片的可编程性吸引了许多工程师和学者。20 世纪 70 年代:最早的可编程逻辑器件 PLD 诞生,其输出结构是可编程的逻辑宏单元,它的硬件结构设计可由软件完成,设计比纯硬件的数字电路更灵活,但结构简单,只能实现小规模电路。诞生与发展20 世纪 80 年代中期:为弥补 PLD 只能设计小规模电路的缺陷,复杂可编程逻辑器件 CPLD 被推出,它具有更复杂的结构,能够实现较大规模的电路设计。1988 年:
    Jeffreyzhang123 2024-12-27 10:41 66浏览
  • 在当今这个数字化的时代,电子设备无处不在,从我们手中的智能手机、随身携带的笔记本电脑,到复杂的工业控制系统、先进的医疗设备,它们的正常运行都离不开一个关键的 “幕后英雄”—— 印刷电路板(Printed Circuit Board,简称 PCB)。PCB 作为电子设备中不可或缺的重要部件,默默地承载着电子元件之间的连接与信号传输,是整个电子世界的基石。揭开 PCB 的神秘面纱PCB,简单来说,就是一块由绝缘材料制成的板子,上面通过印刷、蚀刻等工艺形成了导电线路和焊盘,用于固定和连接各种电子元件。
    Jeffreyzhang123 2024-12-27 17:21 53浏览
  • 在当今竞争激烈的商业世界中,供应链管理已成为企业生存与发展的核心竞争力之一。它就像一条无形的纽带,将供应商、制造商、分销商、零售商直至最终消费者紧密相连,确保产品和服务能够高效、顺畅地流转。今天,就让我们一同深入探索供应链管理的奥秘。供应链管理是什么简单来说,供应链管理是对从原材料采购、生产制造、产品配送直至销售给最终用户这一整个过程中,涉及的物流、信息流和资金流进行计划、协调、控制和优化的管理活动。它不仅仅是对各个环节的简单串联,更是一种通过整合资源、优化流程,实现整体效益最大化的管理理念和方
    Jeffreyzhang123 2024-12-27 17:27 57浏览
  • 在科技飞速发展的今天,医疗电子作为一个融合了医学与电子技术的交叉领域,正以前所未有的速度改变着我们的医疗模式和健康生活。它宛如一颗璀璨的明珠,在医疗领域绽放出耀眼的光芒,为人类的健康福祉带来了诸多惊喜与变革。医疗电子的神奇应用医疗电子的应用范围极为广泛,深入到医疗的各个环节。在诊断方面,各种先进的医学成像设备堪称医生的 “火眼金睛”。X 光、CT、MRI 等成像技术,能够清晰地呈现人体内部的结构和病变情况,帮助医生准确地发现疾病。以 CT 为例,它通过对人体进行断层扫描,能够提供比传统 X 光更
    Jeffreyzhang123 2024-12-27 15:46 56浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦