小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

用STC89C52連接Phyphox(Phyphox)

 新用戶5228KeDY 2021-10-10

用STC89C52連接Phyphox(Phyphox)

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

前面進(jìn)行了一些整理:

1.用STC89C52連接Phyphox(綜述)

2.用STC89C52連接Phyphox(串口)

3.用STC89C52連接Phyphox(燒錄)

4.用STC89C52連接Phyphox(藍(lán)牙)

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

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

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

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

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

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

2.藍(lán)牙接線。

3.編寫Phyphox端實(shí)驗(yàn)代碼。細(xì)節(jié)就不啰嗦了,極簡單。

4.下載Phyphox代碼到手機(jī)Phyphox軟件里,打開實(shí)驗(yàn),會(huì)詢問藍(lán)牙MXXHC08安在?

MXXHC08答:在!

實(shí)驗(yàn)圖:

附程序。估計(jì)此代碼應(yīng)存在問題,因?yàn)閭鬏敳徽!?/p>#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è)置定時(shí)器1工作方式為方式2
    TH1 = 0xfd;    //波特率9600
    TL1 = 0xfd;
    TR1 = 1;    //啟動(dòng)定時(shí)器1
    SM0 = 0;
    SM1 = 1;    //串口方式1
    REN = 1;    //允許接收
    PCON = 0x00; //關(guān)倍頻
    ES = 1;     //開串口中斷
    EA = 1;     //開總中斷
}

/**
 * 延時(shí)函數(shù)
 * 延時(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ā)送單個(gè)字符
    while(!TI);
    TI = 0; //發(fā)送完成標(biāo)志
}

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

/*uint length(float num)//設(shè)置浮點(diǎn)數(shù)的長度
{
    int len=0;
    while(num>0.01)//控制精確到小數(shù)點(diǎn)后第幾位
    {
        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)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多