https://www.cnblogs.com/yangfengwu/p/11100552.html
這節做個上位機控制Wi-Fi引腳輸出的PWM占空比信號,燈的亮度就可以用上位機控制了
大家可以自己擴展程序控制舵機的旋轉角度
雙擊
textBox3.Text = trackBar1.Value.ToString();//顯示當前滑動條的值
然后規定下協議 注意為了大家以后做項目的通用性 數據傳輸用
講一個知識點
大家傳輸十進制數據怎么傳輸的,,傳輸浮點型數據怎么傳輸的 大家百度下IEEE754
看一下用它做數據轉換的妙用
我直接說了
假設你要發送220.5
這樣做
咱們新建一個data_dispose.h文件
為了預防別人用我的源碼在C++里面編譯
typedef union Resolve//解析數據 { char Data_Table[4];//16進制四字節表示形式 float DataF;//浮點型 long DataInt;//有符號整形 unsigned long DatauInt;//無符號整形 }ResolveData;
現在看使用
假設我采集了儀器儀表 儀器儀表就是IEEE754規范 發過來的220.5的 浮點型數據 0x43 0x5C 0x80 0x00
我現在需要轉化為220.5
注意一件事情 0x43 0x5C 0x80 0x00 是高位數據在前
舉個例子:259
化為16進制表示是 0x01 0x03 這樣排序就是高位在前
16進制怎么轉成259呢 就是 0x01==1 1乘於2的8次方 再 加上 0x03 就是 3
1*256 + 3 = 259
如果計算完以后內存里面是這樣存儲的
說個名詞:大端模式
如果數據的高位存儲在了存儲地址的低位 數據的低位存儲在了存儲地址的高位 -----名稱:大端模式
與之相反的是小端模式
數據的低位存儲在了存儲地址的低位 數據的高位存儲在了存儲地址的高位 -----名稱:小端模式
如果你做過儀器儀表,或者用過儀器儀表 應該知道,工業里面經常用到
然后提醒一下
51單片機存儲數據是大端模式
STM32 是小端模式
電腦:小端模式
手機:好像是大端模式...忘記了
咱用的這個8266 小端模式
有人可能會問,具體怎么看出來的....
接着看
首先要記着
注意一件事情 0x43 0x5C 0x80 0x00 是高位數據在前 低位數據在后
剛才我測試了下,官方給的printf不支持打印浮點數.......
所以我自己寫了個printf功能
void sendstring(unsigned char *string)//此處*string相當於數組 { while(*string!='\0')//判斷是否到字符串末尾 { USART_SendData(UART0, *string); string++; } } void uart_printf(const char *fmt,...)//和printf一樣使用 { va_list ap; char string[200];//緩存,如果發送的超過此數,請自行增大 va_start(ap,fmt); vsprintf(string,fmt,ap);//此處也可以使用sprintf函數,用法差不多,稍加修改即可,此處略去 sendstring(string); va_end(ap); }
先打印看看
現在咱 把浮點型的數據轉16進制數組存儲
出來是 0xcd 0x4c 0xbe 0x43
由於8266是 小端模式 所以反着排的 低位在前 高位在后
上面主要說明的是 如何按照IEEE754規約 進行 16進制和浮點數的轉化
其實測試大端 小端 很簡單
你反正知道 259是 0x01 0x03 0x01是高位
你可以
說明數據是低位存在低位 高位存在高位,所以是小端模式
其實只要知道就可以
真不行你解析的時候 一看解析不對顛倒一下
其余的還是放到下節吧,先消化消化
https://www.cnblogs.com/yangfengwu/p/11104167.html