IC1为主控芯片
AT89S51,主要完成根据按键进行编码并控制发射模块进行发射的功能。4个10K的电阻R1-R4和按键开关S1、S3、S4、S5共同构成按键开关控制电路。J1为整个无线数据传输系统的核心之一,即无线数据传输发射模块QwikRadio?射频发射模块。JP1是将程序烧入单片机的下载线接口。J9是接5伏稳压电源的电源接口。而J2就是电路的另一个电源接口,USB电源接口,可直接利用电脑USB口的电源为系统电路供电。T1是晶体振荡器,它和两个30皮法的电容构成单片机的晶体振荡电路。轻触开关K19、10uF的电容和10K的电阻构成单片机的复位电路。 下图为无线数据传输系统发射部分电路的PCB图:
2.1.3接收部分 接收部分主要
由无线数据传输接收模块、解码电路、显示电路组成。接收控制电路主要完成的功能是对接收进来的信号解调后进行解码,解码后的数据控制相应的发光二极管进行动作。 脉冲波形进入无线数据传输接收模块以后, 因为无线数据传输接收模块里要进行解调、信号放大和整形。所以要注意: 在没有无线数据传输接收信号时, 其输出端为杂波信号, 有信号时为接收
到的脉冲信号。即如果接收到的信号是高电平,那么在无线数据传输接收模块数据输出端输出的信号就为高电平,反之,如果接收到的是低电平,那么在输出端输出的也是低电平。 数据由无线数据传输接收模块接收后, 经过单片机AT89S51进行解码。数据由P2口输出, 因为P2口通常是做通用的I/O口使用的, 所以在电路结构上有其自身特点。它不需要多路转接电路MUX;其次是电路的内部有上拉电阻。这些电阻与场效应管共同组成输出驱动电路。为此, P2口作为输出使用时, 已能向外提供推拉电流负载,而无需再接上拉电阻。P2口出来的数据经过电阻的分压后直接接到发光二极管上。图4所示是一个无线数据传输系统的接收电路。 图4中, P2口出去后连接15kΩ的电阻, 然后连接到发光二极管上。当数据码为“1”时灭, 为“0”时亮,这样又直观又方便。 电路的供电方式与发射部分的供电方式相同,既可以用USB接口供电,也可以用5伏的稳压电源供电。
图2-3 无线数据传输
系统接收部分电路示意图 IC2为主控芯片AT89S51,主要完成根据按键进行解码并控制接收模块进行接收的功能。4个15K的电阻R1-R4和发光二极管D3-D6共同构成显示电路。J2为整个无线数据传输系统的核心之一,即无线数据传输接收模块QwikRadio?射频接收模块。JP2是将程序烧入单片机的下载线接口。J9是接5伏稳压电源的电源接口。而J4就是电路的另一个电源接口,USB电源接口,可直接利用电脑USB口的电源为系统电路供电。T2是晶体振荡器,它和两个30皮法的电容构成单片机的晶体振荡电路。轻触开关K6、10uF的电容和10K的电阻构成单片机的复位电路。
下图为无线数据传输系统接收部分电路的PCB图
以上应用的这一种用单片机直
接对无线数据传输信号进行解码的方案,一方面,简化了单片机系统的输入接口电路,只使用了P0 口的一根位线,因而节省了硬件的开销;另一方面,由于采用软件解码,只要知道编码的格式,就可作相应的处理,很大程度上改善了编码器和解码器的互换性,在使用和设计上增加了更大的灵活性。此外,由于充分利用了单片机的内部资源,使整个应用系统结构更为紧凑,从而降低了系统的设计和实施的成本。 2.2 软件设计 2.2.1概述 硬件解码电路较复杂,外围器件过多,且当发射模块的类型不同时不易改动,不利于模块化,而软件解码就克服了这些缺点。在软件解码无线数据传输系统中,解码的核心是单片机,电路极为简单,无须外围器件。它接收解调出的串行二进制码,在内部根据本系统的无线数据传输信号编码格式将串行码对应成发射电路上的按键,便于利用,易于兼容,当发射模块的类型不同时只需对程序稍加改动即可。本软件的主要任务是在单片机AT89S51的控制之下完成数据的正确传输。 2.2.2发射电路的软件流程设计 编码的关键是正确地发送“0”和“1”。从上文中描述的基于字节传输的无线数据传输数据格式中可以看出“0”是由一个脉冲的高电平和两个脉冲的低电平组成的,而“1”是由一个脉冲的高电平和一个脉冲的低电平组成的。通过这个不同点我们便可以设计出发送“0”和发送“1”的程序。 在发射部分,首先要判断是否有按键被按下,如果有,就必须根据按键的键值,利用单片机对按键进行编码,得到相应的码型后,将其发送到发射模块的数据输入端。在发送之前,要将无线数据传输发射模块的使能控制端口置1。 编码的过程为:首先发送5个脉冲的高电平和5个脉冲的低电平作为发送信号的起始位。根据要发送的信号码一个一个地将其发到发射模块的数据输入端。即如果第一个要发送的信号码为“1”,那么就发一个脉冲的高电平和一个脉冲的低电平到发射模块的数据输入端。然后将信号码进行移位,发送下一位数据,直到发送完8位信号码。 当发送完信号码之后就去检测是否有键被按下,如果有键被按下,那么就重复以上的过程。如果没有,那么就不断发送这一个带起始位的信号码。 本系统的按键的相应编码为(不带起始位): 左键:0xb5(十六进制) 10110101(二进制)其发送的波形脉冲如下
无线数据
传输模块发射部分程序流程图: “0”的表示方法是由一个脉冲的高电平和两个脉冲的低电平,而“1”是由一个脉冲的高电平和一个脉冲的低电平组成的
发射部分程序 #include sbit date=P0^1;//数据传输端口 sbit
TXEN=P0^0;//使能端 void delay1(unsigned int nn)//延时子程{ while(nn--); } void delay(unsigned int tt)//延时子程序 { while(tt--);//delay1(50); } void SendDate(unsigned
char d)//发射数据子程序 { unsigned char i,temp; TXEN = 1; for(i=0;i<8;i++) { date = ~date ;//发送杂波 delay(50);//延时 }
date = 1 ;//发送起始位的一个高电平 delay(500);//延时 date = 0 ;//发送起始位的一个低电平 delay(500);//延时 date = 1 ; for(i=0;i<8;i++)//判断是否发送了8位 { temp = (d<
date = 1 ; } void main(void) { delay(0xffff); TXEN = 0; delay(0xffff); TXEN = 1; while(1) { date =1; if(P2_4 == 0)//如果下键被按下 { TXEN = 1; while( ( P2_7 & P2_5 & P2_6 )==1 )
SendDate(0xe5);//发送数据0xe5 while(P2_4 == 0); } if(P2_5 == 0)//如果右键被按下 { TXEN = 1; while( ( P2_4 & P2_7 & P2_6 )==1 ) SendDate(0xd5);//发送数据0xd5 while(P2_5 == 0); } if(P2_6 == 0)//如果左键被按下 { TXEN = 1;
while( ( P2_4 & P2_5 & P2_7 )==1 ) SendDate(0xb5);//发送数据0xb5 while(P2_6 == 0); } if(P2_7 == 0)//如果上键被按下
{ TXEN = 1; while( ( P2_4 & P2_5 & P2_6 )==1 )
SendDate(0x75);//发送数据0x75 while(P2_7 == 0); } } } 2.2.3接收电路的软件流程设计 解码的关键是如何识别“0” 和“1”。从位的定义我们可以发现“0”、“1”均以一个脉冲的高电平开始的。不同的是低电平的宽度不同, “0”为两个脉冲的低电平,“1”为一个脉冲的低电平, 所以必须根据低电平的宽度区别“0” 和“1”。如果从一个脉冲的高电平和一个脉冲的低电平过后, 若读到的电平为低, 说明该位为“0”, 反之则为“1”。当8位数据都接收完两次后,判断两次接收的结果是否一样,如果一样,就进行信号码控制的相应的动作,否则就认为数据接收出错,将该组数据丢弃,再重新接收。 本系统的接收部分的程序设计流程为:首先检测是否收到起始位的5个脉冲的高电平,即先检测是否为高电平,然后延时后再检测,如此多次,若检测到超过两个脉冲的但少于五个脉冲的高电平,也可算为检测到起始位的高电平。然后检测起始位的五个低电平,检测方法与检测起始位的高电平方法相类似。检测到起始位之后就开始检测信号码的每一位数据,即解码。判断完一位数据后将数据移位存放,检测下一位数据。当检测完8位数据后,将数据保存好,再检测一次,若两次检测的结果一样,那么对相应的发光二极管进行操作。如果结果不一样,则丢弃前一组数据,继续检测,直到检测到两组相同的结果。 解码的过程:当检测到一个脉冲的高电平和一个脉冲的低电平之后,延时,检测下一个脉冲是高电平还是低电平,如果是低电平,那么该位为“0”,反之,为“1”。 无线数据传输模块接收部分程序流程图: 数据码的识别关键是0、1 代码的识别, 根据上面的无线数据传输系统编码方法和波形图可知,我们只要能测出加到单片机I/O口引脚的无线数据传输接收模块接收的信号的低电平宽度即可得到其代码。如脉冲宽度编码方法中, 表示0 的低电平宽度为两个脉冲宽度, 表示1 的低电平宽度为一个脉冲宽度,我们需要做的是判断出低电平的宽度范围。这样我们就可以比较容易用程序读取代码。程序流程