无线货架仓储控制系统实验项目报告.docx

上传人:b****1 文档编号:723989 上传时间:2023-04-29 格式:DOCX 页数:43 大小:209.26KB
下载 相关 举报
无线货架仓储控制系统实验项目报告.docx_第1页
第1页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第2页
第2页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第3页
第3页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第4页
第4页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第5页
第5页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第6页
第6页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第7页
第7页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第8页
第8页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第9页
第9页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第10页
第10页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第11页
第11页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第12页
第12页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第13页
第13页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第14页
第14页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第15页
第15页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第16页
第16页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第17页
第17页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第18页
第18页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第19页
第19页 / 共43页
无线货架仓储控制系统实验项目报告.docx_第20页
第20页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

无线货架仓储控制系统实验项目报告.docx

《无线货架仓储控制系统实验项目报告.docx》由会员分享,可在线阅读,更多相关《无线货架仓储控制系统实验项目报告.docx(43页珍藏版)》请在冰点文库上搜索。

无线货架仓储控制系统实验项目报告.docx

无线货架仓储控制系统实验项目报告

 

无线货架仓储控制系统实验

——项目报告

一:

实验名称

无线货架仓储控制系统实验

二:

实验目的

掌握嵌入式系统开发的方法,熟练掌握从总体方案设计、硬件电路的搭建调试、软件的编写测试到最终的软硬件联调、系统性能测试等各环节;掌握无线模块的控制方法.

三:

实验内容

利用51单片机开发板,无线模块,液晶显示屏等实现低成本,简单的无线仓储系统的设计。

四:

相关知识

五:

实验步骤

1.总体方案设计

总体方案设计图

2.软件设计

单片机部分

主程序流程首先是初始化,主要包括通用I/O端口,UART,SPI,以及LCD初始化,并在LCD上显示开机初始信息。

接着单片机开始接收从无线模块发的信息,然后进行485通信,实现仓储管理。

总机

#include

#include

#include

#include"LCD1602.h"

#defineucharunsignedchar

#defineuintunsignedint

#define_ERR_0xff

#define_SUCC_0xfe

sbitREDE=P3^4;

ucharrec;

ucharnum,temp;

voiddelay(uintt)

{

for(;t>0;t--);

}

voidldelay(uintt)

{

uinti=100;

for(;i>0;i--)

for(;t>0;t--);

}

voidSend_date(uchar*buf)

{

ucharlen;

ucharecc;

uchari;

len=strlen(buf);

ecc=len;

REDE=1;

TI=0;

TB8=0;

SBUF=len;

while(!

TI);

TI=0;

for(i=0;i

{

ecc=ecc^(*buf);

TB8=0;

SBUF=*buf;

buf++;

while(!

TI);

TI=0;

}

TB8=0;

SBUF=ecc;

while(!

TI);

TI=0;

REDE=0;

}

voidSend_addr(ucharaddr,uchar*buf)

{

uchartmp=addr-1;

while(tmp!

=addr)

{

REDE=1;

TI=0;

TB8=1;

SBUF=addr;

while(!

TI);

TI=0;

REDE=0;

RI=0;

ldelay

(1);

while(!

RI);

tmp=SBUF;

RI=0;

}

tmp=_ERR_;

while(tmp!

=_SUCC_)

{

Send_date(buf);

REDE=0;

RI=0;

while(!

RI);

tmp=SBUF;

RI=0;

}

wdec(addr);

//wstr("#OK");

}

voidinit()

{

delay(10);//延时等待复位

wcmd(0x38);//设置为8总线16*2,5*7点阵

wcmd(0x01);//清屏幕

wcmd(0x06);//光标移动,显示区不移动

wcmd(0x0f);//开显示,光标闪烁

}

voiddisplay(ucharaa)

{

//wcmd(0x80);

loc(2,1);

wdate(aa);

}

ucharkeyscan()

{

P2=0xef;

temp=P2;

temp=temp&0x0f;

while(temp!

=0x0f)

{

delay(5);

temp=P2;

temp=temp&0x0f;

while(temp!

=0x0f)

{

temp=P2;

switch(temp)

{

case0xee:

num=0x30;

break;

case0xed:

num=0x31;

init();

wstr("zongj");

loc(2,1);

SCON=0x90;

PCON=0x80;

ES=1;

EA=1;

REDE=0;

Send_addr(0x01,"a");

break;

case0xeb:

num=0x32;

init();

wstr("zongj");

loc(2,1);

SCON=0x90;

PCON=0x80;

ES=1;

EA=1;

REDE=0;

Send_addr(0x01,"b");

Send_addr(0x02,"b");

break;

case0xe7:

num=0x33;

break;

}

while(temp!

=0x0f)

{

temp=P2;

temp=temp&0x0f;

}

}

}

P2=0xdf;

temp=P2;

temp=temp&0x0f;

while(temp!

=0x0f)

{

delay(5);

temp=P2;

temp=temp&0x0f;

while(temp!

=0x0f)

{

temp=P2;

switch(temp)

{

case0xde:

num=0x34;

break;

case0xdd:

num='5';

init();

wstr("zongj");

loc(2,1);

SCON=0x90;

PCON=0x80;

ES=1;

EA=1;

REDE=0;

Send_addr(0x01,"s");

break;

case0xdb:

num='6';

break;

case0xd7:

num='7';

break;

}

while(temp!

=0x0f)

{

temp=P2;

temp=temp&0x0f;

}

}

}

P2=0xbf;

temp=P2;

temp=temp&0x0f;

while(temp!

=0x0f)

{

delay(5);

temp=P2;

temp=temp&0x0f;

while(temp!

=0x0f)

{

temp=P2;

switch(temp)

{

case0xbe:

num='8';

break;

case0xbd:

num='9';

break;

case0xbb:

num='A';

break;

case0xb7:

num='B';

break;

}

while(temp!

=0x0f)

{

temp=P2;

temp=temp&0x0f;

}

}

}

P2=0x7f;

temp=P2;

temp=temp&0x0f;

while(temp!

=0x0f)

{

delay(5);

temp=P2;

temp=temp&0x0f;

while(temp!

=0x0f)

{

temp=P2;

switch(temp)

{

case0x7e:

num='C';

break;

case0x7d:

num='D';

break;

case0x7b:

num='E';

break;

case0x77:

num='F';

break;

}

while(temp!

=0x0f)

{

temp=P2;

temp=temp&0x0f;

}

}

}

returnnum;

}

voidmain()

{

INIT();

num=0;

while

(1)

{

display(keyscan());

}

}

分机

#include

#include

#include"LCD1602.h"

#defineucharunsignedchar

#defineuintunsignedint

#defineMYADD0x01

#define_ERR_0xff

#define_SUCC_0xfe

sbitREDE=P3^4;

ucharbuf[10];

//JIADE

sbityou=P2^1;

sbityouchu=P2^3;

//JIADE

voiddelay(uintt)

{

for(;t>0;t--);

}

voidldelay(uintt)

{

uinti=100;

for(;i>0;i--)

for(;t>0;t--);

}

ucharRec_date(uchar*buf)

{

ucharlen;

ucharecc;

uchartmp;

uchari;

REDE=0;

RI=0;

while(!

RI);

if(RB8==1)

return0xfe;

len=SBUF;

RI=0;

ecc=len;

for(i=0;i

{

while(!

RI);

if(RB8==1)

return0xfe;

*buf=SBUF;

RI=0;

ecc=ecc^(*buf);

buf++;

}

*buf='\0';

while(!

RI);

if(RB8==1)

return0xfe;

tmp=SBUF;

RI=0;

ecc=tmp^ecc;

if(ecc!

=0)

{

*(buf-len)='\0';

REDE=1;

TI=0;

TB8=0;

SBUF=_ERR_;

while(!

TI);

TI=0;

REDE=0;

return0xff;

}

REDE=1;

TI=0;

TB8=0;

SBUF=_SUCC_;

while(!

TI);

TI=0;

REDE=0;

return0;

}

voidserial_RI()interrupt4

{

uchartmp;

tmp=0;

while(tmp!

=MYADD)

{

while(!

RI);

tmp=SBUF;

RI=0;

}

delay(1000);

REDE=1;

TI=0;

TB8=0;

SBUF=MYADD;

while(!

TI);

TI=0;

REDE=0;

SM2=0;

tmp=0xff;

while(tmp==0xff)

{

tmp=Rec_date(buf);

}

if(tmp==0xfe)

SM2=1;

wstr(buf);

}

voidinit()

{

delay(10);//延时等待复位

wcmd(0x38);//设置为8总线16*2,5*7点阵

wcmd(0x01);//清屏幕

wcmd(0x06);//光标移动,显示区不移动

wcmd(0x0f);//开显示,光标闪烁

}

voidmain()

{

init();

wstr("fenj1");

loc(2,1);

SCON=0xb0;

PCON=0x80;

ES=1;

EA=1;

REDE=0;

P2=0xf7;

while

(1)

{

if(you==0)

{

delay(5);

if(you==0)

{

youchu=1;

}

while(!

you);

delay(5);

while(!

you);

youchu=0;

}

if(P1=='a'){youchu=1;}

if(P1=='b'){youchu=1;}

if(P1=='s'){youchu=0;}

}

}

无线发射、接受部分

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineBYTE_BIT00x01

#defineBYTE_BIT10x02

#defineBYTE_BIT20x04

#defineBYTE_BIT30x08

#defineBYTE_BIT40x10

#defineBYTE_BIT50x20

#defineBYTE_BIT60x40

#defineBYTE_BIT70x80

//,具体细节请参考相关电路图FYTOOvNRFDemo2401.SchDoc(用PortelDXP打开)

sbitPWR_UP=P2^6;

sbitCE=P2^2;

//sbitDR2=P3^5;//暂时没有用到

//sbitCLK2=P3^4;

//sbitOUT2=P3^3;

sbitCS=P2^1;

sbitDR1=P2^0;

sbitCLK1=P3^7;

sbitDATA=P3^3;

/*

*************************************************************

*RF2401Configuration*

*保存2401的配置信息*

*************************************************************

*/

/*==========*/

//芯片测试用,无需修改

#defineTEST_20x8E//MSBD143~D136

#defineTEST_10x08//D135~D128

#defineTEST_00x1C//D127~D120

/*注意:

DATAx_W+ADDRx_W+CRC的值必须小于256!

单个数据包的大小必须小于32字节(256位)*/

#defineDATA2_W0x10//2字节//频道2数据长度(单位:

Bit)

#defineDATA1_W0x10//28字节//频道1数据长度(单位:

Bit)

//频道2接收地址(当前模块地址)

#defineADDR2_40x00

#defineADDR2_30x1c

#defineADDR2_20xcc

#defineADDR2_10xcc

#defineADDR2_00xcc

//频道1接收地址

#defineADDR1_40xcc

#defineADDR1_30xcc

#defineADDR1_20xcc

#defineADDR1_10xcc

#defineADDR1_00xcc

#defineADDR_W0x10//2字节//接收地址宽度(单位:

Bit)

#defineCRC_L0x1//CRC模式0:

8位1:

16

#defineCRC_EN0x1//CRC校验启用

#defineRX2_EN0x0//双频道功能启用

#defineCM0x1//0:

Directmode1:

ShockBurstmode

#defineRFDR_SB0x0//0:

250kbps1:

1Mbps

#defineXO_F0x3//nRF2401晶振频率000:

4M001:

8M010:

12M011:

16M100:

20M

#defineRF_PWR0x3//0dBm信号发射功率00:

-20dBm01:

-10dBm10:

-5dBm11:

0dBm

#defineRF_CH0x2//ChannelRF频率channel=2400Mhz+RF-CH*1.0Mhz

#defineRXEN0x0//0:

Tx1:

Rx程序会通过SetTxMode和SetRxMode重新设置此参数

#defineRFConfig_Byte0TEST_2

#defineRFConfig_Byte1TEST_1

#defineRFConfig_Byte2TEST_0

#defineRFConfig_Byte3DATA2_W

#defineRFConfig_Byte4DATA1_W

#defineRFConfig_Byte5ADDR2_4

#defineRFConfig_Byte6ADDR2_3

#defineRFConfig_Byte7ADDR2_2

#defineRFConfig_Byte8ADDR2_1

#defineRFConfig_Byte9ADDR2_0

#defineRFConfig_Byte10ADDR1_4

#defineRFConfig_Byte11ADDR1_3

#defineRFConfig_Byte12ADDR1_2

#defineRFConfig_Byte13ADDR1_1

#defineRFConfig_Byte14ADDR1_0

#defineRFConfig_Byte15(ADDR_W<<2|CRC_L<<1|CRC_EN)

#defineRFConfig_Byte16(RX2_EN<<7|CM<<6|RFDR_SB<<5|XO_F<<2|RF_PWR)

#defineRFConfig_Byte17(RF_CH<<1|RXEN)

unsignedcharcodenRF2401_Conf[18]={

RFConfig_Byte0,

RFConfig_Byte1,

RFConfig_Byte2,

RFConfig_Byte3,

RFConfig_Byte4,

RFConfig_Byte5,

RFConfig_Byte6,

RFConfig_Byte7,

RFConfig_Byte8,

RFConfig_Byte9,

RFConfig_Byte10,

RFConfig_Byte11,

RFConfig_Byte12,

RFConfig_Byte13,

RFConfig_Byte14,

RFConfig_Byte15,

RFConfig_Byte16,

RFConfig_Byte17

};

voidDelay100(void)

{

unsignedinti;

for(i=0;i<100;i++);

}

voidDelay(ucharn)

{

uinti;

while(n--)

for(i=0;i<80;i++);

}

bdataunsignedcharDATA_BUF;

#defineDATA7((DATA_BUF&BYTE_BIT7)!

=0)//最高位为1

#defineDATA0((DATA_BUF&BYTE_BIT0)!

=0)//最低位为1

unsignedcharSpi_ByteRead(void)

{

unsignedchari=0;

for(i=0;i<8;i++)

{

DATA_BUF=DATA_BUF<<1;

CLK1=1;

DATA=1;//设置为输入状态

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

{

DATA_BUF|=BYTE_BIT0;

}

else

{

DATA_BUF&=~BYTE_BIT0;

}

CLK1=0;

}

returnDATA_BUF;

}

voidSpi_ByteWrite(unsignedcharsend)

{

unsignedchari;

DATA_BUF=send;

CLK1=0;

for(i=0;i<8;i++)

{

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

{

DATA=1;

}

else

{

DATA=0;

}

CLK1=1;

DATA_BUF=DATA_BUF<<1;

CLK1=0;

}

}

voidConfig2401(void)

{

unsignedinti=0;

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

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2