无线遥控智能环境监测车Word文件下载.docx

上传人:b****6 文档编号:20830633 上传时间:2023-01-25 格式:DOCX 页数:25 大小:91.71KB
下载 相关 举报
无线遥控智能环境监测车Word文件下载.docx_第1页
第1页 / 共25页
无线遥控智能环境监测车Word文件下载.docx_第2页
第2页 / 共25页
无线遥控智能环境监测车Word文件下载.docx_第3页
第3页 / 共25页
无线遥控智能环境监测车Word文件下载.docx_第4页
第4页 / 共25页
无线遥控智能环境监测车Word文件下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

无线遥控智能环境监测车Word文件下载.docx

《无线遥控智能环境监测车Word文件下载.docx》由会员分享,可在线阅读,更多相关《无线遥控智能环境监测车Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。

无线遥控智能环境监测车Word文件下载.docx

无线接收系统采用LCD1602与单片机连接,控制LCD的字符显示,8位数据线分别连接到51单片机的P0口,并且利用I/O口的P2.0~P2.2作为LCD的控制线。

3.1.1LCD1602基本原理

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如第1脚:

VSS为地电源。

第2脚:

VDD接5V正电源。

第3脚:

VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:

R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线。

第15脚:

背光源正极。

第16脚:

背光源负极。

3.2电机驱动控制电路

3.2.1键盘电路原理

根据需求,本系统设计使用了标准的3×

3键盘,用P1.3~P1.5连接键盘的列信号,用P1.0~P1.2连接键盘的行信号。

采用低电平逐行扫描的方式,判断按键的状态。

3.2.2电机驱动电路的设计及使用方法

L298N是SGS公司的产品,内部包含4通道逻辑驱动电路,是一种二组和四相电机的专用驱动器,即内含两个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V,2A以下的电机。

3.3无线发送接收电路

3.3.1射频收发器nRF905

nRF905内部寄存器

射频寄存器的各位的长度是固定的。

然而,在ShockBurstTM收发过程中,TX_PAYLOAD、RX_PAYLOAD、TX_ADDRESS和RX_ADDRESS4个寄存器使用字节数由配置字决定。

nRF905进入关机模式或空闲模式时,寄存器中的内容保持不变。

RF905在使用中,根据不同需要,其电路图不尽相同。

3.3.2nRF90运行过程

收发端程序流程图:

单片机串口对无线收发模块收发状态转换的控制,可通过设置控件的属性来实

现。

图4-3为发送端程序流程图,图4-4为接收端程序流程图。

是否

图1发送端的程序流程图

程序:

无线控制发送

#include<

reg52.h>

ABSACC.h>

intrins.h>

stdio.h>

#defineuintunsignedint

#defineucharunsignedchar

voidDelay1(unsignedintnum);

#defineBYTE_BIT00x01

#defineBYTE_BIT10x02

#defineBYTE_BIT20x04

#defineBYTE_BIT30x08

#defineBYTE_BIT40x10

#defineBYTE_BIT50x20

#defineBYTE_BIT60x40

#defineBYTE_BIT70x80

////////////SPI指令

#defineWC0x00

#defineRC0x10

#defineWTP0x20

#defineRTP0x21

#defineWTA0x22

#defineRTA0x23

#defineRRP0x24

bdataunsignedcharDATA_BUF;

#defineDATA7((DATA_BUF&

BYTE_BIT7)!

=0)

#defineDATA0((DATA_BUF&

BYTE_BIT0)!

sbitflag=DATA_BUF^7;

sbitflag1=DATA_BUF^0;

ucharTxRxBuf[4]={0x00,0x00,0x00,0x00};

//配置口定义//

sbitTXEN=P2^3;

sbitTRX_CE=P3^3;

sbitPWR=P2^4;

//SPI口定义//

sbitMISO=P3^5;

sbitMOSI=P2^7;

sbitSCK=P3^4;

sbitCSN=P3^0;

sbitAM=P2^1;

//状态输出口//

sbitDR=P2^6;

sbitCD=P2^5;

//////////////////////////////////////////////////////

voiddelay1(uinti);

//RF寄存器配置//

//--------------------------------------------NRF905寄存器配置--------------------------------------------------

unsignedcharidataRFConf[11]=

{

0x00,//配置命令//

0x9f,

0x0c,

0x44,

0x01,0x01,

0xe7,0xe7,0xe7,0xe7,

0x58,//CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振

};

codeTxAddress[4]={0xe7,0xe7,0xe7,0xe7};

///////////延时/////////////////

staticvoiddelay(uchara)

{uintb,c;

for(b=a;

b>

0;

b--)

for(c=120;

c>

c--);

}

voidSpiWrite(unsignedcharsend)

{

unsignedchari;

DATA_BUF=send;

for(i=0;

i<

8;

i++)

{

if(DATA7)//总是发送最高位

{

MOSI=1;

}

else

MOSI=0;

SCK=1;

DATA_BUF=DATA_BUF<

<

1;

SCK=0;

}

////////////////初始化nRF905///////////////////

voidnRF905Init(void)

CSN=1;

//Spidisable

SCK=0;

//Spiclocklineinitlow

DR=0;

//InitDRforinput

AM=0;

//InitAMforinput

CD=0;

//InitCDforinput

PWR=1;

//nRF905poweron

TRX_CE=0;

//SetnRF905instandbymode

TXEN=0;

//setradioinRxmode

////////初始化寄存器

voidConfig905(void)

uchari;

CSN=0;

//Spienableforwriteaspicommand

//SpiWrite(WC);

//Writeconfigcommand写放配置命令

11;

i++)//Writeconfigrationwords写放配置字

SpiWrite(RFConf[i]);

//DisableSpi

/////////////发送数据

voidTxPacket(uchar*TxRxBuf)

{

//Config905();

SpiWrite(WTP);

//Writepayloadcommand

SpiWrite(TxRxBuf[i]);

//Write32bytesTxdata

}//Spienableforwriteaspicommand

delay

(1);

//Spidisable

SpiWrite(WTA);

//Writeaddresscommand

4;

i++)//Write4bytesaddress

SpiWrite(TxAddress[i]);

TRX_CE=1;

//SetTRX_CEhigh,startTxdatatransmission

//while(DR!

=1);

//SetTRX_CElow

////////////////////////////////////////////////////

voidSetTxMode(void)

TXEN=1;

//delay1formodechange(>

=650us)

voidTX(void)

SetTxMode();

//SetnRF905inTxmode

//SetRF_PA_PWR(unsignedchari);

//设置发射功率

voidDelay1(unsignedintnum)

while(--num);

}

ucharkeyscan()

{uchartemp,a;

while

(1)

{P1=0xdf;

temp=P1;

temp=temp&

&

0x0f;

if(temp!

=0x0f)

delay(10);

=0x07)

switch(temp)

{case0xde:

a=1;

break;

case0xdd:

a=2;

case0xdb:

a=3;

P1=0xef;

0x07;

{case0xee:

a=4;

case0xed:

a=5;

case0xeb:

a=6;

}

P1=0x37;

{case0x3e:

a=7;

case0x3d:

a=8;

case0x3b:

a=9;

returna;

voidmain(void)

{ucharb;

nRF905Init();

Config905();

Delay1(500);

while

(1)

b=keyscan();

TxRxBuf[0]=b;

TX();

TxPacket(TxRxBuf);

图2接收端程序流程图

ucharcodetable0[]="

TheTEMPis:

"

;

ucharcodetable1[]="

.c"

ucharnum;

sbitlcden=P1^0;

sbitlcdrs=P1^1;

#defineBYTE_BIT00x01

#defineBYTE_BIT10x02

#defineBYTE_BIT20x04

#defineBYTE_BIT30x08

#defineBYTE_BIT40x10

#defineBYTE_BIT50x20

#defineBYTE_BIT60x40

#defineBYTE_BIT70x80

bdataucharDATA_BUF;

=0)

//--------------------------------------------------------------------------------------------------------------

#defineTxRxBuf_Len4

ucharTxRxBuffer[TxRxBuf_Len];

#defineWC0x00

#defineRC0x10

#defineWTP0x20

#defineRTP0x21

#defineWTA0x22

#defineRTA0x23

#defineRRP0x24

0x44,0x01,0x01,

sbitTXEN=P1^7;

sbitTRX_CE=P3^5;

sbitPWR=P1^6;

sbitMISO=P3^2;

sbitMOSI=P1^3;

sbitSCK=P3^1;

sbitCSN=P1^2;

sbitAM=P3^3;

sbitDR=P1^4;

sbitCD=P1^5;

voidDelay(uinta)

for(c=1;

voiddelay1(uinta)

for(c=110;

//---------------------------------------------------SPI读函数-----------------------------------------------------

unsignedcharSpiRead(void)

unsignedcharj;

for(j=0;

j<

j++)

{

DATA_BUF=DATA_BUF<

SCK=1;

if(MISO)//读取最高位,保存至最末尾,通过左移位完成整个字节

DATA_BUF|=BYTE_BIT0;

else

DATA_BUF&

=~BYTE_BIT0;

returnDATA_BUF;

//---------------------------------------------------SPI写函数----------------------------------------------------

voidSpiWrite(ucharsend)

i++)

if(DATA7)//总是发送最高位

MOSI=1;

MOSI=0;

//-----------------------------------------------初始化nRF905-----------------------------------------------------

voidnRF905Init(void)

//Spidisable

//Spiclocklineinitlow

//InitDRforinput

//InitAMforinput

//InitCDforinput

//nRF905poweron

//SetnRF905instandbymode

//setradioinRxmode

//-----------------------------------------------NRF905初始化寄存器-----------------------------------------------------

voidConfig905(void)

//Spienableforwriteaspicommand

i++)//Writeconfigrationwords写放配置字

//DisableSpi

//-----------------------------------------------设置发送状态---------------------------------------------------

voidSetRxMode(void)

Delay

(1);

//delayformodechange(>

=650us)

//-------------------------------------------------判断数据接收状态-----------------------------------------------------

unsignedcharCheckDR(void)//检查是否有新数据传入DataReady

if(DR=1&

TRX_CE==1&

TXE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1