![]() |
發(fā)布時間: 2017-5-18 09:28
正文摘要:想實現(xiàn)無線串口數(shù)據(jù)收發(fā)問題,假設發(fā)射模塊按下按鍵1,會通過無線模塊發(fā)送數(shù)據(jù)1,可是接受模塊出現(xiàn)的是漢字亂碼,怎么回事啊。接受模塊是直接通過USB轉TTL接到電腦上的。 |
wxc19960311 發(fā)表于 2017-5-18 12:01 嗯嗯 謝謝了,已經(jīng)解決了 |
無線串口通信,波特率要一樣,tx和rx,要接對這是基礎 |
可以先檢查下模塊間的配置是否正確,再跟蹤下接收的原始數(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(); //延時50us void KeyDown(); //檢測按鍵函數(shù) void UsartInit() { SCON=0X50; //設置為工作方式1 TMOD=0X20; //設置計數(shù)器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF4; //計數(shù)器初始值設置,注意波特率是4800的 TL1=0XF4; ES=1; //打開接收中斷 EA=1; //打開總中斷 TR1=1; //打開計數(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ù)功能 : 檢測有按鍵按下并讀取鍵值 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ 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ù),延時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 單片機教程網(wǎng)