无线单片机课程设计

上传人:ths****59 文档编号:43795260 上传时间:2018-06-07 格式:DOC 页数:12 大小:148.50KB
返回 下载 相关 举报
无线单片机课程设计_第1页
第1页 / 共12页
无线单片机课程设计_第2页
第2页 / 共12页
无线单片机课程设计_第3页
第3页 / 共12页
无线单片机课程设计_第4页
第4页 / 共12页
无线单片机课程设计_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《无线单片机课程设计》由会员分享,可在线阅读,更多相关《无线单片机课程设计(12页珍藏版)》请在金锄头文库上搜索。

1、11071016、11071034 课程设计1基于 GPS 定位模块的数据采集和无线传输 一、概述GPS( Global Positioning System)即全球定位系统目前被广泛应用在实时的定位以及导航。作为一名学习电子类的工科学生,我们应该了解以及应用GPS。本次单片机的课程设计,我们利用 89C52 型号的单片机对 GPS 数据进行采集,然后通过 LT8900 将采集到的数据进行无线传输。这样,通过两个 GPS 得到的数据(经纬度)进行分析计算便可以得出两个处于不同位置的 GPS 模块的距离。二、设计方案分析 1总电路原理图本实验总电路原理图如图 1 所示。图 1 . 总电路原理图2

2、.各模块的作用分析在图 1 的总电路原理图中可以看出,该电路可以分为如下七个模块:单片机模块:该模块由单片机的最小系统(即 89C52 芯片、晶振电路、1复位电路) 、10K 的上拉电阻以及排针组成,可以实现采集 GPS 数据、控制LT8900 芯片无线发送或者接收数据的功能。自锁开关模块:即 POWER_SW,其作用是控制+5V 电源与单片机的接通或2断开。5V 转 3.3V 模块:该模块由 1117 芯片以及电容组成,可以实现+5V 电压311071016、11071034 课程设计2转换成+3.3V 电压,为 GPS 以及 LT8900 提供正常的工作电压。GPS 模块:GPS 接收到的

3、卫星数据(例如:时间、经纬度等)传送给单4片机。LT8900 模块:单片机可以控制 LT8900 进行数据的无线发送或者接收。5LCD1602 显示模块:该模块由 LCD1602 以及电阻组成,可以实现采集数6据、发送以及接收数据的显示。四个按键模块:这四个按键可以实现对单片机的控制,从而对单片机进7行更好的控制。3PCB 图本实验的 PCB 图如图 2 所示。图 2 . PCB 图三、焊接调试记录这是一块比较复杂的电路板,由于芯片的管脚比较多且管脚之间靠得比较近,因此本次实验电路板的打孔也花了不少的时间与耐心,但是尽管在打孔的过程中总是小心翼翼的,最后打出来的孔效果也不是很好有两个焊盘被打掉

4、了。当然,本次焊接也是挺不容易的,因为芯片多了,一时搞不清楚应该先焊接哪一部分元器件,仔细想了一下,便将贴片元件 1117 首先焊起来,后来发11071016、11071034 课程设计3现这是正确的,因为如果刚开始不将细小的贴片元件焊接上去,那到后来再焊上去便会有难度了。同时,LT8900 要与细细的排针焊在一起,而焊枪比排针间距还大,第一次焊接的时候排针之间的锡都粘在一起了,后来弄了好几次才把锡分开。电路板焊接完毕,接下来便是认真检查电路板是否存在短路与断路的情况。首先,仔细观察一番电路板,然后将自己认为有可能存在问题的地方找出来,接着便用数字万用表对其进行检测,结果发现电路板虽然有些地方

5、看起来似乎是短路了,但实际检测的结果也是没有短路,于是便准备上电检查了。刚接上电源,电源的提示灯没亮,然后检测单片机的 VCC,结果测得为+4.89V,该值接近+5V 的电源电压可以认为是正常情况。检查发现发光二极管引脚弄反了,重新焊接好就亮了。还有就是自锁开关也弄反了,得重新焊接过。总的来说,这次出现的问题还是比较容易被发现。接着检测供给 GPS 以及LT8900 的电压,测得结果为+3.26V,该值也接近+3.3V 的标准工作电压,因此也可以认为这属于正常的结果。最后测试单片机的复位端口,在复位键没有按下的时候,该端口始终为一个低电平,当复位键按下时,该端口便跳变为一个高电平。综上所述,可

6、得出结论:硬件电路基本上正常。我们在老师的帮助下,成功地将在 GPS 中应用最为广泛的 GPGGA 帧格式的数据提取了出来。1LCD1602 模块的调试我们在查阅相关资料的基础上,按照参考的程序也将 GPS 模块采集的数据显示在 LCD1602 屏上。下面便是 GPS 模块采集的数据在 LCD1602 屏上显示的程序:#include/$GPGGA,032029.00,2328.2329,N,12056.9328,E,0,00,0 .0,M,M,*56 #define unchar unsigned char #define unint unsigned intunchar rece_come

7、=0;/定义字节接收标志位,当串口接收到一个字节时就 把 rece_come 置 1 unchar gps_header_count=0; unchar GPGGA_rece=0;/接收头标志位,=1 时代表收到$GPGGA idata gps_data54;/定义一个数组,存放 GPS 发送过来的$GPGGA格 式的数据 unchar i=0; unchar num; unchar h,h_shi,h_ge;/*位定义*/ sbit lcden=P25; sbit lcdrs=P27; sbit lcdrw=P26;/*函数调用声明*/11071016、11071034 课程设计4void

8、delay(unint z); void init_LCD1602(); void write_dat(unchar dat); void write_com(unchar com);void main(void) TMOD=0x20;/定时器 1 工作方式 2 PCON=0x00;/波特率不倍增 TH1=TL1=0xfd;/给定时器赋初值,设置波特率为 9600 SCON=0x50;/串口工作方式 1,并且允许接收 EA=1;/开总中断 ES=1;/开串口中断 TR1=1;/启动定时器 1 init_LCD1602();/液晶初始化while(1)while(rece_come)/对串口接收

9、到的字节进行判断处理rece_come=0;/字节接收标志位清零if(GPGGA_rece=1)/判断是否接收到$GPGGAgps_datai=SBUF;/将接收到的数据存放入数组中, 等待处理 i+; if(i=54)REN=0;/禁止接收/* *液晶显示程序* */*时间转换(GPS 时间-北京时间)*/ h_shi=gps_data1 h_ge=gps_data2 h=h_shi*10 + h_ge + 8; h=h=24?h-24:h; h_shi=h/10; h_ge=h%10; h_shi=h_shi | 0x30; h_ge=h_ge | 0x30;/*显示时间*/ write_

10、com(0x80+0x00); delay(5); if(gps_data36=0x31) write_dat(Y); else write_dat(N);/1 的 ASCII 码为 0x31write_com(0x80+0x02);/设置数据地址指针(在第一 行显示) delay(5);write_dat(T); write_dat(:);write_dat(h_shi);/*显示小时*/11071016、11071034 课程设计5write_dat(h_ge);write_dat(:);write_dat(gps_data3);/*显示分钟*/ write_dat(gps_data4);

11、write_dat(:);write_dat(gps_data5);/*显示秒*/ write_dat(gps_data6);/*显示纬度*/write_com(0x80+0x40);/设置数据地址指针(在 第二行显示) /delay(5); write_dat(W); for(num=11;num0;x-) for(y=110;y0;y-); LT8900LT8900 发送程序如下发送程序如下:#include #include #include “my.h“void main() unsigned char p_load10=1,2,3,4,5,6,7,8,9,10; SS=1; regi

12、ster_ini();SS=0; SPI_WriteFIFO(p_load,10);/ 装载数据 SS=1; SS=0; SPI_WriteReg(7,0,0x80);/ 发射,频道 0 SS=1;while(1); /* LDT8900IIC-BUSFunctions */ void SPI_WriteReg(unsigned char addr,unsigned char parHigh,unsigned char parLow) SpiReadWrite(addr); /写寄存器地址SpiReadWrite(parHigh); /写第一个字节11071016、11071034 课程设计8

13、SpiReadWrite(parLow); /写第二个字节void SPI_WriteFIFO(unsigned char *p_payload,unsigned char num) /writeFIFO,num #include #include “my.h“sbit PKT=P20;void main() unsigned char p_load10;SS=1;register_ini();SS=0; SPI_WriteReg(7,0,0x40);/ 接收,频道 0 SS=1; he: PKT=1; if(PKT=0) goto he;/当 PKT 由 0 变 1,数据收到SPI_Read

14、FIFO(p_load,10); /读出数据while(1); 11071016、11071034 课程设计10/* LDT8900IIC-BUSFunctions */ void SPI_WriteReg(unsigned char addr,unsigned char parHigh,unsigned char parLow) SpiReadWrite(addr); /写寄存器地址SpiReadWrite(parHigh); /写第一个字节SpiReadWrite(parLow); /写第二个字节void SPI_ReadFIFO(unsigned char *p_getfifo,unsi

15、gned char num) /连续 的读 FIFO unsigned char i=0;for(i=0;inum;+i) *p_getfifo=SpiReadWrite(0xff);+p_getfifo; /* 功 能: SPI 发送接收一个数据设 CKPHA 接高,SPI 下降沿采样(文档中没有 CKPHA 管脚,可询问厂 家) * */ unsigned char SpiReadWrite(unsigned char dat) unsigned char i,temp;11071016、11071034 课程设计11temp=0; SCK=0; _nop_(); for(i=0;i8;i+) if(dat else MOSI=0; dat=1; SCK=1; _nop_(); _nop

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号