无线货架仓储控制系统实验项目报告.docx
- 文档编号:30175894
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:43
- 大小:210.22KB
无线货架仓储控制系统实验项目报告.docx
《无线货架仓储控制系统实验项目报告.docx》由会员分享,可在线阅读,更多相关《无线货架仓储控制系统实验项目报告.docx(43页珍藏版)》请在冰豆网上搜索。
无线货架仓储控制系统实验项目报告
无线货架仓储控制系统实验
——项目报告
一:
实验名称
无线货架仓储控制系统实验
二:
实验目的
掌握嵌入式系统开发的方法,熟练掌握从总体方案设计、硬件电路的搭建调试、软件的编写测试到最终的软硬件联调、系统性能测试等各环节;掌握无线模块的控制方法.
三:
实验内容
利用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 // 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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无线 货架 仓储 控制系统 实验 项目 报告