![]() |
發(fā)布時(shí)間: 2017-5-18 09:28
正文摘要:想實(shí)現(xiàn)無線串口數(shù)據(jù)收發(fā)問題,假設(shè)發(fā)射模塊按下按鍵1,會(huì)通過無線模塊發(fā)送數(shù)據(jù)1,可是接受模塊出現(xiàn)的是漢字亂碼,怎么回事啊。接受模塊是直接通過USB轉(zhuǎn)TTL接到電腦上的。 |
wxc19960311 發(fā)表于 2017-5-18 12:01 嗯嗯 謝謝了,已經(jīng)解決了 |
無線串口通信,波特率要一樣,tx和rx,要接對(duì)這是基礎(chǔ) |
可以先檢查下模塊間的配置是否正確,再跟蹤下接收的原始數(shù)據(jù),看譯碼是否正確 |
#include<reg51.h> #include"lcd.h" sbit k1=P1^0; sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3; unsigned char data1; unsigned char KeyValue; //用來存放讀取到的鍵值 unsigned char PuZh[]=" hello boys` "; unsigned char dat[]="aheadback left right"; void Delay10ms(); //延時(shí)50us void KeyDown(); //檢測(cè)按鍵函數(shù) void UsartInit() { SCON=0X50; //設(shè)置為工作方式1 TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF4; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的 TL1=0XF4; ES=1; //打開接收中斷 EA=1; //打開總中斷 TR1=1; //打開計(jì)數(shù)器 } /******************************************************************************* * 函 數(shù) 名 : main * 函數(shù)功能 : 主函數(shù) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void main(void) { unsigned char i; UsartInit(); LcdInit(); for(i=0;i<16;i++) { // LcdWriteCom(0x80); LcdWriteData(PuZh[i]); } while(1) { KeyDown(); } } /******************************************************************************* * 函 數(shù) 名 : KeyDown * 函數(shù)功能 : 檢測(cè)有按鍵按下并讀取鍵值 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void KeyDown() { if(k1==0) { Delay10ms(); if(k1==0) { KeyValue=0; LcdWriteCom(0x80+0x40); LcdWriteData(dat[KeyValue]); LcdWriteData(dat[KeyValue+1]); LcdWriteData(dat[KeyValue+2]); LcdWriteData(dat[KeyValue+3]); LcdWriteData(dat[KeyValue+4]); while(!k1); data1=49; SBUF=data1; while(!TI); TI=0; } } else if(k2==0) { Delay10ms(); if(k2==0) { KeyValue=5; while(!k2); LcdWriteCom(0x80+0x40); LcdWriteData(dat[KeyValue]); LcdWriteData(dat[KeyValue+1]); LcdWriteData(dat[KeyValue+2]); LcdWriteData(dat[KeyValue+3]); LcdWriteData(dat[KeyValue+4]); data1=50; SBUF=data1; while(!TI); TI=0; } } else if(k3==0) { Delay10ms(); if(k3==0) { KeyValue=10; while(!k3); LcdWriteCom(0x80+0x40); LcdWriteData(dat[KeyValue]); LcdWriteData(dat[KeyValue+1]); LcdWriteData(dat[KeyValue+2]); LcdWriteData(dat[KeyValue+3]); LcdWriteData(dat[KeyValue+4]); data1=51; SBUF=data1; while(!TI); TI=0; } } else if(k4==0) { Delay10ms(); if(k4==0) { KeyValue=15; while(!k4); LcdWriteCom(0x80+0x40); LcdWriteData(dat[KeyValue]); LcdWriteData(dat[KeyValue+1]); LcdWriteData(dat[KeyValue+2]); LcdWriteData(dat[KeyValue+3]); LcdWriteData(dat[KeyValue+4]); data1=52; SBUF=data1; while(!TI); TI=0; } } } /******************************************************************************* * 函 數(shù) 名 : Delay10ms * 函數(shù)功能 : 延時(shí)函數(shù),延時(shí)10ms * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void Delay10ms(void) //誤差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } 這是發(fā)射程序,用了LCD1602 |
Powered by 單片機(jī)教程網(wǎng)