基于C3-370C的GPS定位及轨迹记录仪!
在51hei买了C3-370C的GPS,准备做GPS轨迹记录,因为我一直想在旅游的照片上加上坐标信息……
开始用M48作控制MCU,结果写着写着,发现Flash空间不足,想换个M8或M88的,在常州还不好买,手上正好还有两块STC90C52,8K的,于是就换上C52了。
C52不带AD,那电池检测又成问题,于是从坏的万用表上拆下一个2904运放,做了个简单的电池电压检测。
现在整个设备的供电都由锂电池直接提供,配一块880mah的手机电池,可以用6小时左右;
我用24C64记录轨迹信息,包括日期时间、经纬度在内的一组信息,可存储512条,按1min/条,可存8小时。
数据通过串口传给上位机,上位机软件转换数据,也可直接输出KML文件,在Goole earth中打开。
按键0: 短按(可见卫星信息|坐标数据); 长按(运行|暂停);
按键1: 短按(记录当前坐标数据); 长按(暂停时长按删除所有数据);
按键2: 短按(背光灯); 长按(记录模式切换H/A90s/A60s/A30s/A10s);
视图1
背光灯开启
界面说明
液晶背后的主控板
30S自动记录模式
可见卫星信息
连接电脑上传数据
PC端接收数据
删除数据
背面
左侧
右侧
在GooleEarth打开
运放低电压指示电路
最近想着给它加个壳,费了一些时间,找到了一个东东,感觉做外壳不错,就是ADSL的分频器,不过体积小了不少, 尺寸只有60X44X21!
于是想做就做吧,为了减小体积,能用贴片的元件都换成贴片的,幸好最近出了Atmega8a这个价格还算合理的AVR片子, 上位机软件也做了调整,将照片匹配软件与上位机软件合成。 主程序文件:
#include "_STC90.h"
#include "_GPS.h"
sbit C_LED = P0^4; //数据通讯指示
sbit Key0 = P3^3;
sbit Key1 = P1^2;
sbit Key2 = P1^0;
bit flg_gsv=0;
bit flg_mode=0;
bit flg_upload=0;
bit flg_rx=0;
bit flg_rxf=0;
uchar flg_rmcgga=0; //1rmc 2gga
void get_gpsmode(void)
{
if(!flg_mode){
if(buf_gps[3]=='M' && buf_gps[4]=='C') flg_rmcgga = 1; //RMC
else{
if(buf_gps[3]=='G' && buf_gps[4]=='A') flg_rmcgga = 2; //GGA
else flg_rx = 0;
}
}
else{
if(buf_gps[3]=='S' && buf_gps[4]=='V') flg_rmcgga = 3; //GGA
else flg_rx = 0;
}
}
void UART_RX(void) interrupt 4
{
uchar tp_rx;
while(!RI);
tp_rx = SBUF;
if(!flg_rxf){
if(flg_rx){
buf_gps[count_gps] = tp_rx;
if(count_gps==4) get_gpsmode();
if(tp_rx=='*'){ flg_rx = 0; flg_rxf = 1;}
else count_gps++;
}
else{
if(tp_rx=='$'){ flg_rx = 1; count_gps = 0; flg_rmcgga = 0;}
}
}
if(tp_rx=='#') flg_upload = 1;
RI = 0;
}
void UART_TX(uchar tp_tx)
{
SBUF = tp_tx;
while(!TI);
TI = 0; _nus(100);
}
uchar var_js7=36;
uchar var_js5=0;
uchar var_js4=0;
uint var_jsrec=0;
//60ms
void TIMER2_SEV(void) interrupt 5
{
TF2 = 0;
if(var_js7>0) var_js7--;
if(var_js5>0) var_js5--;
if(var_js4>0) var_js4--;
if(var_jsrec>0) var_jsrec--;
}
void initial(void)
{
C_LED = 0;
GPS_EN = 0;
EA = 0;
AUXR = 0x01;
IPH = 0x0c; IP = 0x14;
SCON = 0x50;
PCON = 0x00;
RI = 0; TI = 0; ES = 1;
TCON = 0x00;
TMOD = 0x21;
TH1 = 256-6; TL1 = 256-6; ET1 = 0; TR1 = 1;
T2CON = 0x00; T2MOD = 0x00;
RCAP2H = (65536-55296)/256; RCAP2L = (65536-55296)%256;
ET2 = 1; TR2 = 1;
I2C_Init();
L5_init();
L5_wrstr_cn(24,2,0,4,4); //卫星定位
L5_wrstr_cn(24,4,4,4,4); //轨迹记录
EA = 1;
while(var_js7>0);
Lgps_disp_init();
C_LED = 1;
}
void Key_deal(void)
{
uchar jk=255;
C_LED = 0; EA = 0; flg_rx = 0; flg_rxf = 0;
if(!Key0){
do{ _nms(8); jk--;}while(!Key0 && jk>0);
if(jk>0){
flg_mode = !flg_mode;
L5_setxy(0,1); ofs = 0; line = 0x00; Lwr_icob(336);
if(!flg_mode) Lgps_disp_dt();
}
else{
flg_sata = !flg_sata; L5_SATA();
GPS_EN = flg_sata;
}
do{ while(!Key0); _nms(5);}while(!Key0);
}
if(!Key1){
do{ _nms(20); jk--;}while(!Key1 && jk>0);
if(jk>0){ at_onewr('H'); var_js4 = 10;}
else at_format();
do{ while(!Key1); _nms(5);}while(!Key1);
}
if(!Key2){
do{ _nms(8); jk--;}while(!Key2 && jk>0);
if(jk>0) L5_LED = !L5_LED;
else{
while(!Key2){
rec_add();
_nms(255); _nms(255); _nms(255); _nms(255);
}
var_jsrec = var_rec*50; var_jsrec/=3;
}
}
C_LED = 1; EA = 1;
}
void main(void)
{
initial();
while(1){
if(flg_rxf){
if(flg_sign) C_LED = 0;
L5_ComData(1); var_js5 = 6;
get_cama();
if(!flg_mode){
if(flg_rmcgga==1) L5_RMC();
else if(flg_rmcgga==2) L5_GGA();
}
else{
if(flg_rmcgga==3){
if(!flg_gsv){
L5_GSV();
if(buf_gps[8]=='3') flg_gsv = 1;
}
else{
if(buf_gps[8]=='2'){ L5_GSV(); flg_gsv = 0;}
}
}
}
for(count_gps=0;count_gps<96;count_gps++)
buf_gps[count_gps]=0;
C_LED = 1; flg_rxf = 0;
}
if(var_js5==1){ L5_ComData(0); var_js5 = 0;}
if(var_js7==0){ L5_BAT(); var_js7 = 16;}
if(!(Key0&Key1&Key2)){ _nms(5); Key_deal();}
if(var_js4==1){ L5_AtWr(0); var_js4 = 0;}
if(!flg_sata){
if(var_rec>0){
if(var_jsrec==0){
at_onewr('A'); var_js4 = 10;
var_jsrec = var_rec*50; var_jsrec/=3;
}
}
}
if(flg_upload){
if(flg_sata){
uint k; uchar r;
C_LED = 0; EA = 0; flg_rx = 0; flg_rxf = 0;
for(k=0;k UART_TX(k/256); UART_TX(k%256); for(r=0;r<16;r++) UART_TX(C64_buf[r]); L5_sch(1,1,k,at_id); } EA = 1; L5_sch(0,0,0,0); C_LED = 1; } flg_upload = 0; } } } _gps.h 文件: #include "_STC90.h" #include "_LCD5110.h" #include "_AT24C64.h" #define Bat_full 10 //电量满 #define Bat_empt 11 //电量空 #define Signal 12 //信号 #define NoSignal 13 //信号 #define file 14 //文件 #define Sata_run 15 //状态运行 #define Sata_pause 16 //状态暂停 #define Ico_gps 17 //GPS #define Ico_com 18 //数据通讯 #define Ico_del 19 //删除 #define Ico_upload 20 //上传 #define Ico_wait 21 //等待 #define chr_point 22 //大'.' #define chr_degree 23 //度 #define chr_min 24 //分 #define Ico_point 25 //小度 #define Ico_degree 26 //小度 sbit Bat_Low = P1^4; //电池0低 sbit GPS_EN = P3^5; //GPS使能 uchar buf_gps[96]={0}; uchar count_gps=0; bit flg_sign=0; uchar var_seg[20]={0}; uchar ofs=0; uchar line=0x00; void get_cama(void) { uchar tp_c=0,cj; for(cj=0;cj<20;cj++) var_seg[cj] = 0; for(cj=0;cj } void Lwr_icob(uint nb){ for(;nb>0;nb--) L5_wrbyte(1,line);} void Lwr_ico(uchar ic) { uchar i0,i1; switch(ic){ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': i0 = (ic-48)*4; i1 = i0+4; break; case 10: i0 = 65; i1 = 75; break; //电量满 case 11: i0 = 75; i1 = 85; break; //电量空 case 12: i0 = 40; i1 = 50; break; //信号有 case 13: i0 = 50; i1 = 60; break; //信号无 case 14: i0 = 60; i1 = 65; break; //文件 case 15: i0 = 137; i1 = 143; break; //运行图标 case 16: i0 = 143; i1 = 149; break; //暂停图标 case 17: i0 = 85; i1 = 105; break; //GPS case 18: i0 = 164; i1 = 173; break; //数据传输 case 19: i0 = 173; i1 = 180; break; //删除× case 20: i0 = 180; i1 = 187; break; //上传 case 21: i0 = 187; i1 = 194; break; //等待 case 'D': i0 = 131; i1 = 137; break; //'D' case ':': i0 = 115; i1 = 117; break; //':' case '/': i0 = 105; i1 = 109; break; //'/' case '.': i0 = 109; i1 = 111; break; //'.' case '-': i0 = 111; i1 = 115; break; //'-' case '%': i0 = 194; i1 = 202; break; //'%' case 'k': i0 = 117; i1 = 131; break; //'kmh' case 'm': i0 = 121; i1 = 127; break; //'m' case 's': i0 = 159; i1 = 164; break; //'s' case 'A': i0 = 202; i1 = 207; break; //'A' case 'H': i0 = 207; i1 = 212; break; //'H' case 'N': i0 = 212; i1 = 217; break; //'N' case 'S': i0 = 217; i1 = 222; break; //'S' case 'E': i0 = 222; i1 = 227; break; //'E' case 'W': i0 = 227; i1 = 232; break; //'N' case 22: i0 = 149; i1 = 152; break; //大'.' case 23: i0 = 152; i1 = 156; break; // ° case 24: i0 = 156; i1 = 159; break; //' case 25: i0 = 232; i1 = 235; break; //中点 case 26: i0 = 235; i1 = 238; break; //小度 default: i0 = ic*4; i1 = i0+4; break; //数字 } for(;i0 void Lwr_icos(uchar cs,uchar cl) { uchar k; for(k=0;k void Lwr_icoh(uchar *hs){ while(*hs){ Lwr_ico(*hs); hs++;}} void L5_wr_chr(uchar nc) { uchar l,n; switch(nc){ case 'N': n = 19; break; case 'S': n = 22; break; case 'E': n = 16; break; case 'W': n = 24; break; case 'H': n = 18; break; case 'A': n = 14; break; case 'G': n = 17; break; case 'P': n = 20; break; case 'R': n = 21; break; case 'M': n = 18; break; case 'C': n = 15; break; case ',': n = 11; break; case '.': n = 13; break; case '-': n = 12; break; case '*': n = 10; break; case 'V': n = 23; break; default: n = nc-48; break; } for(l=0;l<6;l++) L5_wrbyte(1,ASCII326[n][l]); } void L5_wr_chrs(uchar ch,uchar lc) { uchar k; for(k=0;k void L5_wr_chrh(uchar *hr){ while(*hr){ L5_wr_chr(*hr); hr++;}} uchar chrtodec(uchar cd){return buf_gps[cd]-48;} uchar chr_dec(uchar cf){ return chrtodec(cf)*10+chrtodec(cf+1);} /void Lwr_dec(uchar dec){ Lwr_ico(dec/10); Lwr_ico(dec%10);} void L5_RMC(void) { uchar tp_h,tp_y,tp_m,tp_d; bit flg_d=0; L5_setxy(56,5); ofs = 3; line = 0x02; tp_h = chr_dec(6)+8; if(tp_h>23){ tp_h%=24; flg_d = 1;} Lwr_dec(tp_h); Lwr_ico(':'); Lwr_icos(8,2); Lwr_ico(':'); Lwr_icos(10,2); L5_CE = 1; C64_buf[3] = tp_h; C64_buf[4] = chr_dec(8); C64_buf[5] = chr_dec(10); L5_setxy(32,5); tp_m = chr_dec(var_seg[8]+3); tp_d = chr_dec(var_seg[8]+1); if(flg_d){ switch(tp_m){ case 4: case 6: case 9: case 11:
上一篇:51单片机驱动CT1642数码管显示源程序
下一篇:L298N+AT89C52+BT-04A蓝牙控制遥控小车
推荐阅读
史海拾趣
2022年12月,中移物联网的OneNET城市物联网平台在2022中国移动全球合作伙伴大会上亮相。该平台以城市为核心,整合了各类物联网资源,为城市管理、公共服务等领域提供了全方位的物联网解决方案。OneNET城市物联网平台的推出,标志着中移物联网在物联网领域的技术实力和市场地位得到了进一步提升。
2000年,BB公司迎来了发展史上的一个重要时刻——被美国德州仪器公司收购。这一收购对于BB公司来说,既是挑战也是机遇。德州仪器作为全球领先的半导体公司,为BB公司提供了更广阔的平台和更丰富的资源。在德州仪器的支持下,BB公司得以继续深化技术创新和市场拓展,进一步提升了其在电子行业的地位。
随着公司的发展,Advanced Power Solutions开始寻求与行业内其他企业的合作。通过与一家知名电子设备制造商建立战略合作关系,公司成功将其电源管理解决方案集成到对方的产品中。这一合作不仅扩大了公司的市场份额,也提高了公司的品牌知名度。此后,公司陆续与多家企业建立了合作关系,进一步巩固了其在行业内的地位。
面对电源管理芯片市场需求的不断增长,东科半导体(DK)公司决定投资扩产。公司投资数亿元建设新的生产线和研发基地,提升产能和研发能力。同时,公司还加大了对新技术、新产品的研发投入,不断推出具有竞争力的新产品。通过投资扩产和加大研发投入,东科半导体(DK)公司进一步巩固了其在电源管理芯片市场的领先地位。
以上五个故事从不同角度展现了东科半导体(DK)公司在电子行业中的发展历程和成就。这些故事不仅记录了公司的成长轨迹,也反映了公司在技术创新、产学研合作、市场拓展和品牌建设等方面的努力和成果。
随着战争的结束,军事通信市场的需求逐渐减少,Bliley开始寻求新的发展机遇。公司开始将目光投向更广泛的商业应用领域,并逐步拓展其产品线。在20世纪80年代初,Bliley开始生产SC切割晶体,这一创新使其在晶体制造领域取得了新的突破。进入21世纪,Bliley继续加大研发力度,不断推出新的产品和服务。2001年,公司更名为Bliley Technologies Inc.,以更好地反映其日益多样化的产品和服务范围。如今,Bliley已经发展成为一家提供多种频率控制产品的全球领导者。
作为一家有社会责任感的企业,Crameda Intersys公司不仅关注自身的经济效益,还积极履行社会责任。公司积极参与公益事业,支持教育、环保等领域的发展。同时,公司还注重环保和可持续发展,通过采用环保材料和节能技术,降低生产过程中的能耗和排放。这些举措不仅提升了公司的社会形象,也为社会的可持续发展做出了积极贡献。
这五个故事只是Crameda Intersys公司发展历程中的一部分,但它们足以展现出公司在电子行业中的成长轨迹和不懈追求。在未来的发展中,Crameda Intersys公司将继续以技术创新为引领,积极拓展市场渠道,培养更多优秀人才,加强质量管理和社会责任履行,为电子行业的发展贡献更多的力量。
上海汇众汽车制造有限公司,是由上海汽车集团公司和上海实业集团公司共同投资组建的现代化的大型制造企业,目前已经成为全国最大的轿车零部件生产基地,拥有员工8000人、销售收入超30亿元、固定资产达15.8亿元。公司下属5个生产企业:上海轿车车桥 ...… 查看全部问答∨ |
|
什么是倒车雷达 驾驶员位于驾驶席内的视角是很有限的,通过车内和外侧的反光镜可以大幅度提高驾驶员的视野范围,但位于车正后方的障碍物,以及高度不足以通过反光镜看到的或者距离车身过近的障碍物都可能处于驾驶员的视野死角或者视野模糊区中。这 ...… 查看全部问答∨ |
引言 数字锁相环(DPLL)技术在数字通信、无线电电子学等众多领域得到了极为广泛的应用。与传统的模拟电路实现的PLL相比,DPLL具有精度高、不受温度和电压影响、环路带宽和中心频率编程可调、易于构建高阶锁相环等优点。随着集成电路技术的发展 ...… 查看全部问答∨ |
wdk编译出错LNK2019:unresolved external symbol _DriverEntry@8 referenced in function inline hook ObReferenceObjectByHandle保护进程,看雪上的例子,c语言写的,编译错误LNK2019:unresolved external symbol _DriverEntry@8 referenced in function _GsDriverEntry@8。 #include <ntddk.h> #include <WINDEF.H> BYTE&n ...… 查看全部问答∨ |
今天在看MSDN中,发现了一段话,不知道该如何去理解,有明白的能说一下吗? In Windows Embedded CE 6.0, it is no longer necessary to build a profiling OAL over a non-profiling OAL. If your OAL supports profiling, you should always inc ...… 查看全部问答∨ |
evc中rda编pull出现的问题(请大家多多帮忙啊!!!) 近日学习Pda上数据库编程,在evc4.0中使用RDA 编写了一个PDA的sqlce从sqlserver2000上数据库(dbtest)pull一个表(id)的小程序,iis设置好了,在pda上能ie到http://192.168.0.119/sqlce/sscesa20.dll,pull中的各个参数也都按书本及对照网上一些说 ...… 查看全部问答∨ |
s3c2410 开发板,从0x23000000后面就都是可用空间了, 按理说,应该可以利用,但是我裁减的wince 的存储管理器 下来列表找不到 nandflash 的相关信息, 可是,我下载了别人的nk.bin却可以看到这个存储管理器列表, 那么我需要如何去做才能 拥有 ...… 查看全部问答∨ |
谁能讲讲8962/9B96的Bootloader的下载,调试 我也不知道是怎么一回事,下载了官网上的例程(也试过ZLG的实验书程序),但是总也不见成功,调试的时候无一例外地进入一个死循环,从来也没有进入到main/updater函数中去。 我试过IAR v5.3,IAR v6.0,Keil v4.0,板子也试过ZLG的Easyarm8962(使 ...… 查看全部问答∨ |