停车场智能车位引导系统结题答辩支撑材Word格式文档下载.docx
- 文档编号:18664940
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:18
- 大小:851.85KB
停车场智能车位引导系统结题答辩支撑材Word格式文档下载.docx
《停车场智能车位引导系统结题答辩支撑材Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《停车场智能车位引导系统结题答辩支撑材Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
公式:
uS/58=厘米或者uS/148=英寸;
或是:
距离=高电平时间*声速(340M/S)/2;
建议测量周期为60ms以上,以防止发射信号对回响信号的影响。
注:
(1)此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响
模块的正常工作。
(2)测距时,被测物体的面积不少于0.5平方米且平面尽量要求平整,否则影响测量的
结果
5、51单片机的测试程序:
//晶振=8M
//MCU=STC10F04XE
//P0.0-P0.6共阳数码管引脚
//Trig=P1^0
//Echo=P3^2
#include<
reg52.h>
//包括一个52标准内核的头文件
#defineucharunsignedchar//定义一下方便使用
#defineuintunsignedint
#defineulongunsignedlong
//***********************************************
sfrCLK_DIV=0x97;
//为STC单片机定义,系统时钟分频
//为STC单片机的IO口设置地址定义
sfrP0M1=0X93;
sfrP0M0=0X94;
sfrP1M1=0X91;
sfrP1M0=0X92;
sfrP2M1=0X95;
sfrP2M0=0X96;
sbitTrig=P1^0;
//产生脉冲引脚
sbitEcho=P3^2;
//回波引脚
sbittest=P1^1;
//测试用引脚
ucharcodeSEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//数码管0-9
uintdistance[4];
//测距接收缓冲区
ucharge,shi,bai,temp,flag,outcomeH,outcomeL,i;
//自定义寄存器
ucharSHZ[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharWZH[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
ucharFZ[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
sbitdula=P2^6;
sbitwela=P2^7;
bitsucceed_flag;
//测量成功标志
//********函数声明
voidconversion(uinttemp_data);
voiddelay_20us();
voiddelay(uintk);
voiddisplay(uchara,ucharb,ucharc);
//voidpai_xu();
voidmain(void)//主程序
{uintdistance_data,a,b;
ucharCONT_1;
CLK_DIV=0X03;
//系统时钟为1/8晶振(pdf-45页)
P0M1=0;
//将io口设置为推挽输出
P1M1=0;
P2M1=0;
P0M0=0XFF;
P1M0=0XFF;
P2M0=0XFF;
i=0;
flag=0;
test=0;
Trig=0;
//首先拉低脉冲输入引脚
TMOD=0x11;
//定时器0,定时器1,16位工作方式
TR0=1;
//启动定时器0
IT0=0;
//由高电平变低电平,触发外部中断
ET0=1;
//打开定时器0中断
//ET1=1;
//打开定时器1中断
EX0=0;
//关闭外部中断
EA=1;
//打开总中断0
while
(1)//程序循环
{
EA=0;
Trig=1;
delay_20us();
//产生一个20us的脉冲,在Trig引脚
while(Echo==0);
//等待Echo回波引脚变高电平
succeed_flag=0;
//清测量成功标志
EX0=1;
//打开外部中断
TH1=0;
//定时器1清零
TL1=0;
TF1=0;
//
TR1=1;
//启动定时器1
while(TH1<
30);
//等待测量的结果,周期65.535毫秒(可用中断实现)
TR1=0;
//关闭定时器1
if(succeed_flag==1)
{
distance_data=outcomeH;
//测量结果的高8位
distance_data<
<
=8;
//放入16位的高8位
distance_data=distance_data|outcomeL;
//与低8位合并成为16位结果数据
distance_data*=12;
//因为定时器默认为12分频
distance_data/=58;
//微秒的单位除以58等于厘米
}//为什么除以58等于厘米,Y米=(X秒*344)/2
//X秒=(2*Y米)/344==》X秒=0.0058*Y米==》厘米=微秒/58
if(succeed_flag==0)
{
distance_data=0;
//没有回波则清零
test=!
test;
//测试灯变化
}
a=distance_data;
if(b==a)CONT_1=0;
if(b!
=a)CONT_1++;
if(CONT_1>
=3)
{CONT_1=0;
b=a;
conversion(b);
}
display(ge,shi,bai);
///i=0;
///}
}
//***************************************************************
//外部中断0,用做判断回波电平
INTO_()interrupt0//外部中断是0号
{
outcomeH=TH1;
//取出定时器的值
outcomeL=TL1;
succeed_flag=1;
//至成功测量的标志
//****************************************************************
//定时器0中断,用做显示
timer0()interrupt1//定时器0中断是1号
TH0=0xfd;
//写入定时器0初始值
TL0=0x77;
switch(flag)
{case0x00:
flag++;
break;
case0x01:
case0x02:
flag=0;
//显示数据转换程序
voidconversion(uinttemp_data)
ucharge_data,shi_data,bai_data;
bai_data=temp_data/100;
temp_data=temp_data%100;
//取余运算
shi_data=temp_data/10;
temp_data=temp_data%10;
ge_data=temp_data;
bai=bai_data;
shi=shi_data;
ge=ge_data;
//******************************************************************
voiddelay_20us()
{ucharbt;
for(bt=0;
bt<
100;
bt++);
voiddelay(uintk)
{
uintx,y;
for(x=k;
x>
0;
x--)
for(y=110;
y>
y--);
voiddisplay(uchara,ucharb,ucharc/*uchard,uchare,ucharf*/)
wela=1;
P0=WZH[0];
wela=0;
P0=0x00;
dula=1;
P0=SHZ[a];
dula=0;
P0=0xff;
delay
(1);
P0=WZH[1];
P0=SHZ[b];
P0=WZH[2];
P0=FZ[c];
}
三、能够用CC2430实现两点的通信和简单的两点之间的测距:
CC2430两点的通信和简单的两点之间的测距原理通过比较发射端的信号强度和接收短信号强度的衰减来进行测距
1、数据发送程序为:
staticvoidappTransmitter()
uint32burstSize=0;
uint32pktsSent=0;
uint8appTxPower,Sendflag=0;
uint8n;
chardataTransmitter[]="
Sending:
"
;
//InitializeBasicRF
basicRfConfig.myAddr=TX_ADDR;
if(basicRfInit(&
basicRfConfig)==FAILED){
HAL_ASSERT(FALSE);
//SetTXoutputpower
appTxPower=appSelectOutputPower();
halRfSetTxPower(appTxPower);
//Setburstsize
burstSize=appSelectBurstSize();
//BasicRFputsonreceiverbeforetransmissionofpacket,andturnsoff
//afterpacketissent
basicRfReceiveOff();
//ConfigtimerandIO
appConfigTimer(PACKET_RATE);
halJoystickInit();
//Initalisepacketpayload
txPacket.seqNumber=0;
txPacket.padding[0]=0x01;
//我改的
/****************************我改的
for(n=0;
n<
sizeof(txPacket.padding);
n++){
txPacket.padding[n]=n;
}***************************************/
//halLcdClear();
//halLcdWriteLines("
PERTester"
"
JoystickPush"
start/stop"
);
halLedClearAll();
halLedSet
(1);
//appTransmitter模式LED1亮
SendStringData(0,dataTransmitter,sizeof(dataTransmitter),0);
//我改的
//Mainloop
while(TRUE){
//Waitforusertostartapplication
while(!
halJoystickPushed());
appStartStop();
Transmitter"
NULL);
while(appStarted){
halLedSet(4);
if(halJoystickPushed()){
if(pktsSent<
burstSize){
if(appState==TRANSMIT_PACKET){
//Makesuresequencenumberhasnetworkbyteorder
UINT32_HTON(txPacket.seqNumber);
Sendflag=basicRfSendPacket(RX_ADDR,(uint8*)&
txPacket,PACKET_SIZE);
//Changebyteorderbacktohostorderbeforeincrement
UINT32_NTOH(txPacket.seqNumber);
txPacket.seqNumber++;
pktsSent++;
#ifdefSRF04EB
halLcdDisplayValue(HAL_LCD_LINE_2,"
Sent:
(int32)pktsSent,NULL);
#else
halLcdDisplayValue(HAL_LCD_LINE_3,"
#endif
appState=IDLE;
else
appStarted=!
appStarted;
if(Sendflag==0)
halMcuWaitMs(100);
halLedClear(4);
//Resetstatisticsandsequencenumber
pktsSent=0;
halLcdClear();
//halLedClear(3);
PERTest"
2、接收程序:
staticvoidappReceiver()
uint32segNumber=0;
int16perRssiBuf[RSSI_AVG_WINDOW_SIZE]={0};
//RingbufferforRSSI
uint8perRssiBufCounter=0;
//Countertokeeptrackofthe
//oldestnewestbyteinRSSI
//ringbuffer
perRxStats_trxStats={0,0,0,0};
int16rssi;
chardataReceiver[]="
Receiving:
#ifdefINCLUDE_PA
uint8gain;
//Selectgain(formoduleswithCC2590/91only)
gain=appSelectGain();
halRfSetGain(gain);
#endif
basicRfConfig.myAddr=RX_ADDR;
basicRfReceiveOn();
Receiver"
Ready"
halLedSet(3);
//appReceiver模式LED3亮
SendStringData(0,dataReceiver,sizeof(dataReceiver),0);
basicRfPacketIsReady());
if(basicRfReceive((uint8*)&
rxPacket,MAX_PAYLOAD_LENGTH,&
rssi)>
0){
//Changebyteorderfromnetworktohostorder
UINT32_NTOH(rxPacket.seqNumber);
segNumber=rxPacket.seqNumber;
//SubtractoldRSSIvaluefromsum
rxStats.rssiSum-=perRssiBuf[perRssiBufCounter];
//StorenewRSSIvalueinringbuffer,willaddittosumlater
perRssiBuf[perRssiBufCounter]=rssi;
//AddthenewRSSIvaluetosum
rxStats.rssiSum+=perRssiBuf[perRssiBufCounter];
if(++perRssiBufCounter==RSSI_AVG_WINDOW_SIZE){
perRssiBufCounter=0;
//Wrapringbuffercounter
//Checkifreceivedpacketistheexpectedpacket
if(rxStats.expectedSeqNum==segNumber){
rxStats.expectedSeqNum++;
//Ifthereisajumpinthesequencenumberingthismeanssomepacketsin
//betweenhasbeenlost.
elseif(rxStats.expectedSeqNum<
segNumber){
rxStats.lostPkts+=segNumber-rxStats.expectedSeqNum;
rxStats.expectedSeqNum=segNumber+1;
//Ifthesequencenumberislowerthanthepreviousone,wewillassumea
//newdatabursthasstartedandwewillresetourstatisticsvariables.
else{
//Updateourexpectationsassumingthisisanewburst
rxStats.rcvdPkts=0;
rxStats.lostPkts=0;
rxStats.rcvdPkts++;
//resetstatisticsifbutton1ispressed
if(HAL_BUTTON_1_PUSHED()){
rxStats.los
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 智能 车位 引导 系统 答辩 支撑