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

標題: 藍牙模塊與單片機收發數據 [打印本頁]

作者: 呵呵一笑很傾城    時間: 2017-8-23 11:39
標題: 藍牙模塊與單片機收發數據
我用BT04藍牙模塊  與  單片機進行成功配對   想通過藍牙模塊將51單片機上DS18B20測得的溫度發送到手機端  但是發送的都是亂碼   我不知道根據自己的程序在手機端發送什么內容  單品機才能給手機返回溫度值   我的程序如下:   希望大家給些解決方案,謝謝。

#include <reg52.h>
#define uchar unsigned char
sbit DQ=P3^6;         //數據傳輸線接單片機的相應的引腳
unsigned char tempL=0;                 //設全局變量   
unsigned char tempH=0;
unsigned int sdata;                        //測量到的溫度的整數部分
unsigned char xiaoshu1;                //小數第一位   
unsigned char xiaoshu2;                //小數第二位     
unsigned char xiaoshu;//兩位小數     
unsigned char shi,ge,count;
int num;
unsigned char code table[]="temperature:";
unsigned char code table_1[]="0123456789";
bit fg=1;                                //溫度正負標志

/***函數聲明***/   
void delay(unsigned char i);
void delay1(uchar i);
void Init_DS18B20(void);
ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void ReadTemperature(void);
void send();

void main()
{                                   //初始化定時器  1   和   2
        TMOD=0x20;          //設置定時器T1工作在模式2
        TH1=0xfd;          //為定時器1附初值  1111 1101
        TL1=0xfd;
       
        TR0=1;                   //啟動定時器0
        TR1=1;                   //啟動定時器1
        SM0=0;
        SM1=1;
        ET1=1;          //允許定時器1中斷
        ET0=1;           //允許定時器0中斷
        EA=1;                //開總中斷
        while(1)
        {       
                ReadTemperature();
                num++;
                if(num>=1000)
                {
                        num=0;
               
                        send();
               
                }
        }
}




void ser()interrupt 4                 //串行口中斷
{
       
}

void send()
{
        for(count=0;count<12;count++)
        {
                SBUF=table[count];
                while(!TI);                                                   //   TI為1時    CPU被告知產生了一個串行口中斷
                TI=0;         //   串行口中斷請求標志位   由軟件清零
        }
        SBUF=table_1[shi];
        while(!TI);
        TI=0;

        SBUF=table_1[ge];
        while(!TI);
        TI=0;

        SBUF='.';;
        while(!TI);
        TI=0;

        SBUF=table_1[xiaoshu1];
        while(!TI);
        TI=0;

        SBUF=table_1[xiaoshu2];
        while(!TI);
        TI=0;

        SBUF='\n';
        while(!TI);
        TI=0;
}
void delay(unsigned char i)
{
        for(i;i>0;i--);
}

void delay1(uchar i)
{
        uchar j,k;
        for(j=i;j>0;j--)
                for(k=125;k>0;k--);
}

void Init_DS18B20(void)                         //DS18B20的初始化
{
        unsigned char x=0;
        DQ=1;                                         //DQ先置高
        delay(8);                                 //稍延時
        DQ=0;                                         //發送復位脈沖
        delay(80);                                 //延時(>480us)
        DQ=1;                                         //拉高數據線
        delay(5);                                 //等待(15~60us)
        x=DQ;                                         //用X的值來判斷初始化有沒有成功,18B20存在的話X=0,否則X=1
        delay(20);
}

//讀一個字節
ReadOneChar(void)                          //主機數據線先從高拉至低電平1us以上,再使數據線升為高電平,從而產生讀信號
{
        unsigned char i=0;                 //每個讀周期最短的持續時間為60us,各個讀周期之間必須有1us以上的高電平恢復期
        unsigned char dat=0;
        for (i=8;i>0;i--)                 //一個字節有8位
        {
                DQ=1;
                delay(1);
                DQ=0;
                dat>>=1;
                DQ=1;
                if(DQ)
                dat|=0x80;
                delay(4);
        }
        return(dat);
}

//寫一個字節
void WriteOneChar(unsigned char dat)
{
        unsigned char i=0;                 //數據線從高電平拉至低電平,產生寫起始信號。15us之內將所需寫的位送到數據線上,
        for(i=8;i>0;i--)                 //在15~60us之間對數據線進行采樣,如果是高電平就寫1,低寫0發生。
        {
                DQ=0;                                 //在開始另一個寫周期前必須有1us以上的高電平恢復期。
                DQ=dat&0x01;
                delay(5);
                DQ=1;
                dat>>=1;
        }
        delay(4);
}

//讀溫度值(低位放tempL;高位放tempH;)
void ReadTemperature(void)
{
        Init_DS18B20();                                         //初始化   
        WriteOneChar(0xcc);                                 //跳過讀序列號的操作               0xcc  1100 1100
        WriteOneChar(0x44);                                 //啟動溫度轉換                         0x44  0100 0100
        delay(125);                                                 //轉換需 要一點時間,延時      
        Init_DS18B20();                                         //初始化     
        WriteOneChar(0xcc);                                 //跳過讀序列號的操作   
        WriteOneChar(0xbe);                                 //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)
        tempL=ReadOneChar();                                 //讀出溫度的低位LSB      
        tempH=ReadOneChar();                                 //讀出溫度的高位MSB             
        if(tempH>0x7f)                                      //最高位為1時溫度是負     
        {
                tempL=~tempL;                                        //補碼轉換,取反加一   
                tempH=~tempH+1;      
                fg=0;                                                      //讀取溫度為負時fg=0     
        }
        sdata = tempL/16+tempH*16; //整數部分     
        shi=sdata/10;
        ge=sdata%10;
        xiaoshu1 = (tempL&0x0f)*10/16;                 //小數第一位     
        xiaoshu2 = (tempL&0x0f)*100/16%10;        //小數第二位   
        xiaoshu=xiaoshu1*10+xiaoshu2;                 //小數兩位     
}



作者: wxc19960311    時間: 2017-8-24 11:37
我這個可以,你可以試一試

Screenshot_2017-08-24-11-35-12-499_my.test.png (122.26 KB, 下載次數: 321)

Screenshot_2017-08-24-11-35-12-499_my.test.png

IMG_20170824_113452.jpg (2.19 MB, 下載次數: 95)

IMG_20170824_113452.jpg

LCD1602顯示 串口接收溫度.rar

61.1 KB, 下載次數: 289


作者: 172229507    時間: 2017-8-24 15:14
好難呀!
作者: world_all    時間: 2017-8-24 15:33
是不是波特率不對?
作者: mmbo321000    時間: 2017-11-18 17:09
wxc19960311 發表于 2017-8-24 11:37
我這個可以,你可以試一試

謝謝分享!很有用
作者: dandelions    時間: 2017-12-21 17:01
wxc19960311 發表于 2017-8-24 11:37
我這個可以,你可以試一試

層數有Android方面的源碼嗎,900024273@qq.com,最近畢設遇到點問題,謝謝了
作者: 孔小寶    時間: 2018-5-11 10:49
wxc19960311 發表于 2017-8-24 11:37
我這個可以,你可以試一試

哥們    我的怎么不通  發出來的還是亂碼
作者: 潘志豪    時間: 2018-5-11 12:34
手機上波特率也是9600嗎?
作者: 滴滴答答穿秋褲    時間: 2018-5-11 13:54
你波特率問題應該
作者: ---    時間: 2018-5-20 15:49
為什么我藍牙傳輸兩位16進制的數,低位的可以,高位的不行?也是波特率的問題嗎?
作者: 天地無涯    時間: 2018-5-21 09:59
可能是字符格式不對
作者: wgb    時間: 2018-9-16 11:26
你的程序不能給手機發送啊
作者: hhd6231    時間: 2018-11-19 09:23
wxc19960311 發表于 2017-8-24 11:37
我這個可以,你可以試一試

這個好,學習了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品视频免费观看 | 日本三级电影在线看 | 欧美性极品xxxx做受 | 国产探花在线精品一区二区 | 欧美老少妇一级特黄一片 | 国产精品一区二区久久 | 欧美日韩亚洲一区 | 香蕉大人久久国产成人av | 欧美日本韩国一区二区 | 亚洲国产精品久久 | 国产成人精品免费视频大全最热 | 亚洲精品电影网在线观看 | 久久99网| 久久精品中文 | 国产精品91网站 | 亚洲精品一区二区 | av免费观看在线 | 久久人| www.一区二区三区.com | 国产一级在线视频 | 国产日韩欧美激情 | 色视频网站 | 自拍亚洲| 亚洲精品九九 | 国产精品久久一区 | 亚洲激情视频在线 | 久久机热 | 91免费观看国产 | 天堂一区 | 亚洲国产成人精品女人久久久 | 国产第二页 | 91亚洲精选 | 精品免费 | 欧美精品一区二区三区蜜桃视频 | 亚洲精品在线视频 | 欧美激情精品久久久久久 | 在线观看不卡av | 国产精品毛片一区二区三区 | 视频一区在线 | 精品一级 | 国产成人99久久亚洲综合精品 |