电池,1602显示屏,arduino板,定位模块,测速模块
GPS模块1片; SD卡模块及SD卡 1套
第一,我们先了解一下它原理吧原理:将地图数据依据瓦片算法存储在SD卡中,通过串口获取GPS定位信息并从中解析出经纬度坐标,依据经纬度坐标读取相应地图数据显示在12864液晶模块上,同时显示定位坐标点。1. 地图存储算法——瓦片系统(Maps Tile System)本制作采用的地图数据和地图存储算法来源于微软的bing maps并做了相应修改,具体可参考:Bing Maps Tile System[1*]Virtual Earth Tile Image URI 参数解析Goolge and Microsoft Map Url Parameters在瓦片系统中地图采用金字塔式的分层存储结构,不同层具有不同级别的地图分辨率(地图精细程度),每一层地图被分割成等像素大小(256X256)的瓦片,算法要解决的问题就是给定经纬度坐标和缩放级别(层索引)得到具体相应的瓦片编号。在连接[1*]的最后有算法实现的代码可共参考。2. 针对12864液晶模块的设计12864液晶模块是128像素宽64像素高的单色液晶显示模块,本制作为了适应模块显示做出了两个设计。
第三,代码程序。static void write_command(unsigned char Command_value){ digitalWrite(CS, LOW); digitalWrite(DC, LOW); DATAPORT2 = (DATAPORT2 & DATA1_MASK) | (Command_value & DATA2_MASK); DATAPORT1 = (DATAPORT1 & DATA2_MASK) | (Command_value & DATA1_MASK); // top 6 bits digitalWrite(CS, HIGH);}/*********************************************** // Write Data**********************************************/static void write_Data(unsigned char Data_value){ digitalWrite(CS, LOW); digitalWrite(DC, HIGH); DATAPORT2 = (DATAPORT2 & DATA1_MASK) | (Data_value & DATA2_MASK); DATAPORT1 = (DATAPORT1 & DATA2_MASK) | (Data_value & DATA1_MASK); // top 6 bits digitalWrite(CS, HIGH);}/********************************************* // Draw Picture********************************************/static void drawPicFromFlash(uint8_t x0,uint8_t y0,uint8_t w,uint8_t h,const PROGMEM char *c) { digitalWrite(DC, LOW); //solve a bug of write_command defore write_data write_command(0x15); //set column address write_command(x0); //column address start 00 write_command(x0+w-1); //column address end 95 write_command(0x75); //set row address write_command(y0); //row address start 00 write_command(y0+h-1); //row address end 63 unsigned char k,i; for(k=0;k
在“LCD12864RSPI” 文件中加入画点函数,减少重绘区域;
使用占用内存小、具有只读能力的SD模块库“petit_fatfs”;
分配1K内存用于地图数据缓存,由于SD卡库只支持8.3文件名,地图数据文件名采用十六进制不定长压缩编码方式命名。 代码下载: