娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年08月31日(星期六)

2020年08月31日 | stc51單片機做的GPS定位及軌跡記錄器

發布者:自在逍遙 來源: 51hei關鍵字:stc51  單片機  GPS定位  軌跡記錄器 手機看文章 掃描二維碼
隨時隨地手機看文章

基于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 AT24C64_RdPage(k*16);

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 if(buf_gps[cj]==','){ var_seg[tp_c] = cj; tp_c++;}

}


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:

[1] [2]
關鍵字:stc51  單片機  GPS定位  軌跡記錄器 引用地址:stc51單片機做的GPS定位及軌跡記錄器

上一篇:51單片機驅動CT1642數碼管顯示源程序
下一篇:L298N+AT89C52+BT-04A藍牙控制遙控小車

推薦閱讀

特斯拉的私有化就像是一場鬧劇。在這背后的沙特主權基金究竟扮演了怎樣的角色??自2017年初以來,沙特阿拉伯主權財富基金的管理人員多次與“鋼鐵俠”埃隆·馬斯克及特斯拉公司的人員進行接洽,雙方討論的內容足以讓整個市場瘋狂:收購這家在納斯達克上市的創新型全電動汽車制造商的股份。?不過,市場需要再考慮這個事情隨之而來的后果了。北京時間8月25...
類似Amazon Go這樣的無人商店可能會是未來零售業發展的其中一個方向,但對于沃爾瑪來說,將當前碩大的商超做如此前衛的改造還不現實,不過,自動化程度的提升還有其它手段,比如機器人。 早在2017年,沃爾瑪就在50家老式門店啟用庫存掃描機器人。今年,試點擴大到350家門店,且機器人開始越來越接近過道售貨員的角色,甚至可以為部分低價促銷商品提供...
pic18f66k80配置寄存器配置示例如下: 開發環境:MPLAB X IDE 芯片:pic18f66k80 // CONFIG1L#pragma config RETEN = OFF // Vreg休眠(禁用)#pragma config INTOSCSEL = HIGH //LF-INTOSC 低功耗使能位(休眠期間 LF-INTOSC 處于高功耗模式)#pragma config SOSCSEL = DIG // SOSC 功耗選擇和模式配置位(數字 (SCLKI...
當廣汽埃安喊出“讓充電像加油一樣快”的口號,一場補能變革風暴正在悄然興起。 換電和超充是應對補能焦慮的兩種主要解決方式,而相比于換電,超充技術的發展卻顯得緩慢了許多。顯而易見的是,這其中的主要原因還是要歸結到技術桎梏上面。 超充技術的實現,既要求電池端有能力“承受”,還需要保證充電樁的冷卻系統、功率轉換系統,以及高電壓承受能力等方...

史海拾趣

問答坊 | AI 解惑

2812從內部flash啟動的過程

a)程序硬件復位或者軟件復位 b)判斷mp/mc是否為0,微計算機模式(為1,當為微處理器模式時,2812內部的bootrom被禁止,通過zone7從外部調引導程序啟動。) c)為0則從boot rom啟動,否則從外部啟動(0x3F FC00) d)到bo ...…

查看全部問答∨

用555做的一塊電子開關

轉:http://www.mydigit.net/read.php?tid=152081 周末閑閑的,做了一塊開關板。 用到料簡單,也沒幾個零件,電子城全可以買得到,成本也不高。祥見圖片 功能:按下開關S    555第3角輸出5V電壓驅動繼電器,繼電器有常開常閉觸點跟據 ...…

查看全部問答∨

地線對EMC的影響 EMI/EMC-原理與應對詳解(九)

3-2.地線對EMC的影響 很多人都認為,電路中的地線或接地電路都是不帶電的,實際上,這種認為是錯誤的。在一般的直流電路或低頻電路中,當不考慮電磁感應時,可以認為電路中的地線或接地電路是不帶電的,但在存在電磁感應的電路中,就不要輕易認為 ...…

查看全部問答∨

如何向噴墨打印機發送PCL 打印機指令打印文本

常見的 PCL 打印機指令 http://www.icare.hp.com.cn/TechCenter_StaticArticle/16956/16956.html 如何按照上面的PCL打印機指令打印文字?…

查看全部問答∨

有做過DVD產品的嗎?

有做過DVD產品的嗎? …

查看全部問答∨

大家幫我分析一個op2177的放大電路圖行嗎

我不知道怎么發圖,所以圖片加在附件里了。 大家幫我分析 一下輸入輸出的關系行嗎,詳細了最好,謝謝了…

查看全部問答∨

高手快來啊

我如何定義一個函數指針    我想這樣   void (*temp)();    定義這個后 我怎么讓他指向另一個函數 比如   void max {      .......... } temp=max  這樣為什么不行 ...…

查看全部問答∨

UC3843的資料與論文

本帖最后由 paulhyde 于 2014-9-15 09:45 編輯 …

查看全部問答∨

In-Sight 5605 視覺系統為德國 Continental 公司提供了超高速代碼識別功能

                   摘要 位于德國法蘭克福市的 Continental 公司是一家國際化的汽車供應商,該公司采用成千上萬套運輸托盤運送其大部分組件。標 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 苏尼特左旗| 民丰县| 阿拉尔市| 无为县| 革吉县| 托克逊县| 霍山县| 南岸区| 巴彦县| 乌鲁木齐市| 瑞丽市| 舒兰市| 湘阴县| 右玉县| 登封市| 盈江县| 山阳县| 大宁县| 章丘市| 鹤庆县| 仁布县| 望都县| 宣城市| 江陵县| 永仁县| 德令哈市| 榆树市| 滨州市| 老河口市| 琼结县| 夹江县| 青神县| 沂南县| 中牟县| 阜阳市| 永嘉县| 宣城市| 辛集市| 巴林左旗| 鄂托克前旗| 伊金霍洛旗|