基于51的温度传感通过蓝牙HC06传送数据,搭载语音播报

经过差不多半个月的时间去准备和制作,火急火燎的就去参加了中国大学生计算机比赛。遗憾的是没有拿到好的名次,欣慰的是在此过程中的付出和对知识盲区的清扫,以及当天作品展示遇到的很多的不同的学校的同学。废话有点多,直接切入正题。
作品是基于STC52的单片机,温度传感器为DS18B20,外接HC06的蓝牙模块和SYN6288的语音合成模块,以及一个用于扩展52/51串口通信不足的模拟数字开关芯片CD4502
在焊接电路硬件方面,请各位一定要将画好的PCB电路图外包给厂家做!!! 不然,自己纯手工做的过程中,后期查找问题,都无法下手查找,这次就吃了这样一次亏,以至于浪费的时间太多了。
基于51的温度传感通过蓝牙HC06传送数据,搭载语音播报_第1张图片
作品最终是要通过投影到窗户上,所以对于数码管的编写,采用了反写
基于51的温度传感通过蓝牙HC06传送数据,搭载语音播报_第2张图片
数码管的显示数字是通过温度传感器实时传送的数值显示
代码如下

#include "reg52.h"
#include "temp.h"
#include "Syn6288TEXT.h"
#include "JDY06.h"
#include "CD5402.h"
#include "SYN6288_main.h"

typedef unsigned int u16;
typedef unsigned char u8;

//置换位置后
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 DisplayData[6];
u8 code smgduan[10]={0x3f,0x30,0x6d,0x79,0x72,0x5b,0x5f,0x31,0x7f,0x7b};  //显示反向0~9

void delay(u16 i)
{
while(i--);
}

void datapros(int temp){
   float tp;
   DisplayData[0]=0x0f;
   if(temp<0)
   {
   DisplayData[5]=0x40;
   temp=temp-1;
   temp=~temp;
   tp=temp;
   temp=tp*0.0625*100+0.5;
   }
   else
   {
   DisplayData[5]=0x00;
   tp=temp;
   temp=tp*0.0625*100+0.5;
   }
   DisplayData[4]=smgduan[temp%10000/1000];    //反向十分位
   DisplayData[3]=smgduan[temp%10000%1000/100];    //反向个位
   DisplayData[2]=smgduan[temp%100/10]|0x80;       //反向小数点后一位,并显示dp位  (小数点)
   DisplayData[1]=smgduan[temp%100%10];	           //反向小数点后两位
}

void DigDisplay(){
  u8 i;
  for(i=0;i<6;i++){
  	 switch(i)
	 {
	 case(0):
	 LSA=0;LSB=0;LSC=0;
	 break;
	 case(1):
	LSA=1;LSB=0;LSC=0;
	break;
	case(2):
	LSA=0;LSB=1;LSC=0;
	break;
	case(3):
	LSA=1;LSB=1;LSC=0;
	break;
	case(4):
	LSA=0;LSB=0;LSC=1;
	break;
	case(5):
	LSA=1;LSB=0;LSC=1;
	break;
	 }
   P0=DisplayData[5-i];
   delay(50);
   P0=0x00;
  }
}

void main()
{
    u16 i;
  //  for(i=0;i<50;i++)
  
  while(1){
     for(i=0;i<700;i++){
	datapros(Ds18b20ReadTemp());
	DigDisplay();
	delay(10);	  //这儿更改数码管延时
	}
	delay(20000);
	Phone();        //此处是跳转CD4502开关	                                                        
   delay(100);
	}	
}

蓝牙端采用的HC06的型号,根据店家提供的数据手册进行代码的编写

基于51的温度传感通过蓝牙HC06传送数据,搭载语音播报_第3张图片
手机端的蓝牙软件则是通过网上搜索找的,自己没能实现安卓的编写,奈何时间不允许。。。。
HC06代码如下

 
#include "JDY06.h"
#include "temp.h"

typedef unsigned char u8;
typedef unsigned int u16;

u8  tempbuf;    //用于接收到信息
sbit LED1=P1^0;   //LED1表示  接收到手机端发送的数据
sbit LED2=P1^1;    //LED2表示   接收失败
u8 str[14];


void Delay1(u16 j)
{
  u16 i;
  for(;j>0;j--){
   for(i=0;i<27;i++)
   ;
  }
}
 
 
void BluetoothInit(){
    TMOD=0x20;  //设置定时器1工作方式为方式2   
    TH1=0xfd;  	  //波特率9600
    TL1=0xfd;  
    TR1=1;      //启动定时器1     
    SM0=0;SM1=1;      //串口方式1         
    REN=1;      //允许接收   
    PCON=0x00;  //关倍频   
    ES=1;       //开串口中断   
    EA=1;       //开总中断
}

 //向串口发送一个字符
 
void send_char_com(u8 ch){
  SBUF=ch;
  while(!TI);
  TI=0;
}
 
//向串口发送一个字符串,strlen为该字符串长度
void send_string_com(u8 *str,u16 strlen){
  u16 k=0;
  do
  {
  send_char_com(*(str+k));
  k++;
  }
  while(k

对于蓝牙代码的问题,一定要弄清楚 单片机中最为基础重要的串口通信问题!!!

SYN6288语音播报的模块的代码就太多了
这里就不再一一详细介绍了,
https://download.csdn.net/download/youcandoit_/11200431

你可能感兴趣的:(单片机,51,HC06)