wxc19960311 发表于 2017-5-18 12:01 嗯嗯 谢谢了,已经解决了 |
无线串口通信,波特率要一样,tx和rx,要接对这是基础 |
可以先检查下模块间的配置是否正确,再跟踪下接收的原始数据,看译码是否正确 |
#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(); //检测按键函数 void UsartInit() { SCON=0X50; //设置为工作方式1 TMOD=0X20; //设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF4; //计数器初始值设置,注意波特率是4800的 TL1=0XF4; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main(void) { unsigned char i; UsartInit(); LcdInit(); for(i=0;i<16;i++) { // LcdWriteCom(0x80); LcdWriteData(PuZh[i]); } while(1) { KeyDown(); } } /******************************************************************************* * 函 数 名 : KeyDown * 函数功能 : 检测有按键按下并读取键值 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ 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; } } } /******************************************************************************* * 函 数 名 : Delay10ms * 函数功能 : 延时函数,延时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--); } 这是发射程序,用了LCD1602 |