日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

用STC89C52連接Phyphox(Phyphox)

 新用戶5228KeDY 2021-10-10

用STC89C52連接Phyphox(Phyphox)

STC89C52RC連接Phyphox的技術(shù)并不多困難,只是與ESP32/Arduino Nano 33等連接Phyphox比起來要麻煩得多。

前面進行了一些整理:

1.用STC89C52連接Phyphox(綜述)

2.用STC89C52連接Phyphox(串口)

3.用STC89C52連接Phyphox(燒錄)

4.用STC89C52連接Phyphox(藍牙)

基礎(chǔ)工作都已經(jīng)鋪墊好了,現(xiàn)在差不多到了最后一道工序,就是Phyphox端的實驗代碼是怎樣的呢?本來應(yīng)該一步到位就結(jié)束了這個研究的,但是我手上的DS18b20溫度傳感器總是不好用,于是這里只能試試Phyphox接收從STC89C52RC發(fā)送出來的確定的數(shù)據(jù)。有機會時,可能還會研究研究從傳感器讀取數(shù)據(jù)、從Phyphox反向控制STC89C52RC。看時間吧。

在“用STC89C52連接Phyphox(藍牙)”的筆記里,我們找到了藍牙特征碼,這個特征碼現(xiàn)在要使用了。到Phyphox Editor里建構(gòu)我們的實驗:

填寫好基本信息之后,到Input標簽頁創(chuàng)建Input的Bluetooth視圖,并填寫“Device Name”,設(shè)置成我們的藍牙BLE的名稱,當(dāng)然這里不填寫對連接實驗絲毫沒有影響。再到characteristic欄填寫特征碼0000FFE1-0000-1000-8000-00805F9B34FB,這個特征碼最好是自己實際用藍牙調(diào)試軟件自己測試提取出來,比如ESP32的特征碼與這里使用的HC-08的就不是相同的。

最后,到Conversion Function欄填寫string,意思是不管從STC89C52RC發(fā)過來什么數(shù)據(jù),我們一切都讓Phyphox當(dāng)成是字符串來接收。這樣做的好處是不再擔(dān)心數(shù)據(jù)類型轉(zhuǎn)換問題,壞處是速度可能會慢。當(dāng)然,為了和這里的string配套,在編寫51的程序時,發(fā)往串口的數(shù)據(jù),盡量也都是以字符數(shù)組的形式發(fā)送。實際向串口發(fā)字符數(shù)組,在51里比發(fā)數(shù)值型數(shù)據(jù)還要簡單得多,不用管進制。

現(xiàn)在可以正式開始了。

1.在C51里編寫測試程序。代碼附在后面了。編譯,燒錄。

2.藍牙接線。

3.編寫Phyphox端實驗代碼。細節(jié)就不啰嗦了,極簡單。

4.下載Phyphox代碼到手機Phyphox軟件里,打開實驗,會詢問藍牙MXXHC08安在?

MXXHC08答:在!

實驗圖:

附程序。估計此代碼應(yīng)存在問題,因為傳輸不正常。

#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <stdlib.h>

#define uchar unsigned char
#define uint unsigned int

uchar b[8];
float a;
/**
 * 串口初始化函數(shù)
 * 波特率為9600
 */
void UartConfigurationInit()
{
    TMOD = 0x20; //設(shè)置定時器1工作方式為方式2
    TH1 = 0xfd;    //波特率9600
    TL1 = 0xfd;
    TR1 = 1;    //啟動定時器1
    SM0 = 0;
    SM1 = 1;    //串口方式1
    REN = 1;    //允許接收
    PCON = 0x00; //關(guān)倍頻
    ES = 1;     //開串口中斷
    EA = 1;     //開總中斷
}

/**
 * 延時函數(shù)
 * 延時count毫秒
 */

void delay(unsigned int count)
{
    uint cycle;
    while(count)
    {
        cycle = 120;
        while(cycle > 0) cycle--;
        count--;
    }
}

/**
 * 字符發(fā)送函數(shù)
 */
void PostChar(uchar character)
{
    SBUF = character; //發(fā)送單個字符
    while(!TI);
    TI = 0; //發(fā)送完成標志
}

/**
 * 字符串發(fā)送函數(shù)
 * 通過調(diào)用字符發(fā)送函數(shù)來實現(xiàn)
 */
void  PostString(uchar *p)
{
    while(*p)      //若指針指向的地址為空,則跳出循環(huán)
    {
        PostChar(*p); //指針第一次默認指向首地址
        delay(20);  //延時,作用為提高發(fā)送準確度
        p++;
    }
}

/*uint length(float num)//設(shè)置浮點數(shù)的長度
{
    int len=0;
    while(num>0.01)//控制精確到小數(shù)點后第幾位
    {
        num=num/10;
        //printf("%d  : %f\n",len,num);
        len++;
    }
    return len;
} */

/**
 * 主函數(shù)
 */
void main()
{
 uint number=0;
    UartConfigurationInit(); //初始化串口
 
    while(1)
    {
   number+=2021;
   a= (float)number/100;
   sprintf(b,"%2.2f",a);
   PostString(b); //發(fā)送字符串
      delay(1000);
   if (number>999999) number=0;
 }
}

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多