stc51单片机做的GPS定位及轨迹记录器

2023-10-18 05:50

本文主要是介绍stc51单片机做的GPS定位及轨迹记录器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、程序

主程序

#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 2ggavoid get_gpsmode(void)
{if(!flg_mode){if(buf_gps[3]=='M' && buf_gps[4]=='C') flg_rmcgga = 1;     //RMCelse{if(buf_gps[3]=='G' && buf_gps[4]=='A') flg_rmcgga = 2; //GGAelse flg_rx = 0; }}else{if(buf_gps[3]=='S' && buf_gps[4]=='V') flg_rmcgga = 3; //GGAelse 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<at_id;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<count_gps;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; //GPScase 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<i1;i0++) L5_wrbyte(1,(dip_ico[i0]<<ofs)|line);
}void Lwr_icos(uchar cs,uchar cl)
{uchar k;for(k=0;k<cl;k++) Lwr_ico(buf_gps[cs+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<lc;k++) L5_wr_chr(buf_gps[ch+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:tp_h = 30; break;case 2: tp_y = chr_dec(var_seg[8]+5);if(tp_y%4==0) tp_h = 29;else tp_h = 28;break;default: tp_h = 31; break;         }		if(tp_d<tp_h) tp_d++;else{tp_d = 1;if(tp_m<12) tp_m++;else tp_m = 1;}Lwr_dec(tp_m); Lwr_ico('-'); Lwr_dec(tp_d); 		}else{Lwr_icos(var_seg[8]+3,2); Lwr_ico('-');   Lwr_icos(var_seg[8]+1,2);                   }L5_CE = 1;C64_buf[1] = tp_m; C64_buf[2] = tp_d;	L5_setxy(0,0); ofs = 0; line = 0x40;if(buf_gps[17]=='A'){ Lwr_ico(Signal); flg_sign = 1;} else{ Lwr_ico(NoSignal); flg_sign = 0;}               L5_CE = 1;if((var_seg[4]-var_seg[2])==12){L5_setxy(0,3); ofs = 0; line = 0x00; L5_wr_chr(buf_gps[29]);	L5_setxy(12,3);						  L5_wr_chrs(19,2); Lwr_ico(chr_degree);L5_wr_chrs(21,2); Lwr_ico(chr_point);L5_wr_chrs(24,4);                     L5_CE = 1;if(buf_gps[29]=='N') C64_buf[6] = 0x00; //N78 S83else C64_buf[6] = 0x10;C64_buf[7] = chr_dec(19); C64_buf[8] = chr_dec(21);C64_buf[9] = chr_dec(24); C64_buf[10] = chr_dec(26);}if(var_seg[6]>41){ L5_setxy(0,4); tp_y = buf_gps[var_seg[5]+1]; L5_wr_chr(tp_y); //E/W	  	tp_h = chr_dec(31);if(var_seg[5]>40){	      L5_wr_chrs(31,3);tp_h = tp_h*10+chrtodec(33);}else{ Lwr_icob(6); L5_wr_chrs(31,2);} Lwr_ico(chr_degree);                           L5_wr_chrs(var_seg[5]-7,2); Lwr_ico(chr_point); L5_wr_chrs(var_seg[5]-4,4);	 L5_CE = 1;if(tp_y=='E') C64_buf[6]&=0xf0;     //E69 W87else C64_buf[6]|=0x01;C64_buf[11] = tp_h; C64_buf[12] = chr_dec(var_seg[5]-7);C64_buf[13] = chr_dec(var_seg[5]-4); C64_buf[14] = chr_dec(var_seg[5]-2);		}L5_setxy(52,2); tp_h = var_seg[7]-var_seg[6];    if(tp_h>4){		uint tp_v=0;if(tp_h==7) tp_y = 6;        else tp_y = tp_h;for(tp_m=1;tp_m<tp_y;tp_m++){if(tp_m==3) tp_m++;tp_v = tp_v+chrtodec(var_seg[7]-tp_m)*185;if(tp_m<5){if(tp_v%10>4) tp_v = tp_v/10+1;else tp_v/=10;}}if(tp_h==7) tp_v = tp_v+chrtodec(var_seg[6]+1)*1850;if(tp_v<100) Lwr_icob(8);    else{if(tp_v<1000) Lwr_icob(4);else{ Lwr_ico(tp_v/1000); tp_v%=1000;}Lwr_ico(tp_v/100); tp_v%=100;}Lwr_ico(tp_v/10); Lwr_ico('.'); Lwr_ico(tp_v%10);}else Lwr_icoh("---.-"); //Lwr_ico('k'); -.-kmhL5_CE = 1;L5_setxy(24,2); tp_h = var_seg[8]-var_seg[7];   if(tp_h>4){uint tp_dg=0;tp_h-=4;for(tp_y=0;tp_y<tp_h;tp_y++)tp_dg = tp_dg*10+buf_gps[var_seg[7]+1+tp_y]-48;if(tp_dg>90 && tp_dg<270){Lwr_ico('S'); Lwr_ico(Ico_point);if(tp_dg<180){ Lwr_ico('E'); tp_dg = 180-tp_dg;}else{ Lwr_ico('W'); tp_dg = tp_dg-180;} }else{Lwr_ico('N'); Lwr_ico(Ico_point); if(tp_dg<180) Lwr_ico('E');else{ Lwr_ico('W'); tp_dg = 360-tp_dg;} }Lwr_dec(tp_dg);	Lwr_ico(Ico_degree); }else Lwr_icob(24);L5_CE = 1;		
}void L5_GGA(void)
{uchar tp_h;	L5_setxy(10,0); ofs = 0; line = 0x40;Lwr_icos(var_seg[6]+1,2);	L5_CE = 1;L5_setxy(74,4); ofs = 0; line = 0x00;Lwr_ico(buf_gps[var_seg[5]+1]); L5_CE = 1;L5_setxy(74,3);if((var_seg[8]-var_seg[7])==4){Lwr_icos(var_seg[7]+1,3);tp_h = chrtodec(var_seg[7]+1)*10 +chrtodec(var_seg[7]+3);}else{ Lwr_icoh("-.-"); tp_h = 0;}   L5_CE = 1;C64_buf[15] = tp_h;L5_setxy(56,1);tp_h = var_seg[9]-var_seg[8]; if(tp_h>3){Lwr_icob(28-tp_h*4);        Lwr_icos(var_seg[8]+1,tp_h-1); }else Lwr_icoh("----.-"); 	L5_CE = 1;
}bit flg_lowbat=0;
void L5_BAT(void)
{L5_setxy(74,0); ofs = 0; line = 0x40;if(!Bat_Low){if(flg_lowbat) Lwr_icob(10);else Lwr_ico(Bat_empt);flg_lowbat = !flg_lowbat;}else Lwr_ico(Bat_full); L5_CE = 1;
}bit flg_sata=0;
void L5_SATA(void)
{L5_setxy(22,5); ofs = 0; line = 0x02;if(!flg_sata) Lwr_ico(Sata_run);         else{ Lwr_ico(Sata_pause); flg_sign = 0;} L5_CE = 1;	
}void L5_ComData(bit tp_cd)
{L5_setxy(20,0); ofs = 0; line = 0x40;if(tp_cd) Lwr_ico(Ico_com); else Lwr_icob(10);L5_CE = 1;				
}void L5_sch(bit sen,uchar stype,uint s0,uint s1)
{L5_setxy(0,1); ofs = 0; line = 0x00;if(sen){Lwr_ico(file);if(stype==0) Lwr_ico(Ico_wait);else{if(stype==1) Lwr_ico(Ico_upload);else Lwr_ico(Ico_del);}s0 = s0*100/s1; s1 = s0/5; //20份'%'if(s0<10) Lwr_icob(8); else{if(s0<100){Lwr_icob(4); Lwr_ico(s0/10);}else Lwr_dec(s0/10);}Lwr_ico(s0%10); Lwr_ico('%');		line = 0x1f; Lwr_icob(1+s1); line = 0x11;Lwr_icob(20-s1); line = 0x1f; Lwr_icob(1);}else{ _nms(255); _nms(255); _nms(255); Lwr_icob(54);}L5_CE = 1;
}uint at_id=0; 
void L5_FileN(void)
{L5_setxy(42,0); ofs = 0; line = 0x40;Lwr_dec(at_id/10); Lwr_ico(at_id%10); L5_CE = 1;
}void at_getid(void)
{uchar tp_r;at_id = 0;do{tp_r = AT24C64_RD(at_id*16);if(tp_r==0xff) break;at_id++;L5_sch(1,0,at_id,512);  }while(at_id<512);L5_FileN();	L5_sch(0,0,0,0);
}void at_format(void)
{uint tp_f;if(flg_sata){                          if(at_id>0){for(tp_f=0;tp_f<at_id;tp_f++){AT24C64_WR(tp_f*16,0xff);	L5_sch(1,2,tp_f,at_id); }at_id = 0; L5_FileN(); L5_sch(0,0,0,0);}}
}void L5_AtWr(uchar wen)
{L5_setxy(30,0); ofs = 0; line = 0x40;if(wen==1) Lwr_ico(Ico_wait);else{if(wen==2) Lwr_ico(Ico_del);else Lwr_icob(7);} L5_CE = 1;
}void at_onewr(uchar hdat)
{if(flg_sign && at_id<512){	L5_AtWr(1);C64_buf[0] = hdat;  AT24C64_WrPage(at_id*16); at_id++; L5_FileN();}else L5_AtWr(2);
}uchar var_rec=0;
void L5_recty(void)
{L5_setxy(0,2); ofs = 0; if(var_rec==0){ line = 0x00; Lwr_icob(6); Lwr_ico('H'); Lwr_icob(7);}else{ line = 0x20; Lwr_ico('A'); Lwr_dec(var_rec); Lwr_ico('s');}L5_CE = 1; 
}void rec_add(void)
{switch(var_rec){case 0: var_rec = 90; break;case 90: var_rec = 60; break;case 60: var_rec = 30; break;case 30: var_rec = 10; break;default: var_rec = 0; break;}L5_recty(); 
}void Lgps_disp_dt(void)
{//第1行	L5_setxy(56,1); ofs = 0; line = 0x00; Lwr_icoh("----.-m"); L5_CE = 1;	//第2行L5_setxy(52,2); Lwr_icoh("---.-k");  L5_CE = 1;//第3行L5_setxy(0,3); L5_wr_chr('N');L5_setxy(12,3); L5_wr_chrh("--"); Lwr_ico(chr_degree); L5_wr_chrh("--"); Lwr_ico(chr_point); L5_wr_chrh("----"); Lwr_ico(chr_min); L5_CE = 1;L5_setxy(74,3); Lwr_icoh("-.-"); L5_CE = 1;//第4行L5_setxy(0,4); L5_wr_chrh("E---"); Lwr_ico(chr_degree); L5_wr_chrh("--");Lwr_ico(chr_point);	L5_wr_chrh("----"); Lwr_ico(chr_min); L5_CE = 1;L5_setxy(74,4); Lwr_icoh("0D");	L5_CE = 1;//第2行L5_recty();
}void Lgps_disp_init(void)
{L5_clear();L5_setxy(0,0); ofs = 0; line = 0x40;Lwr_ico(NoSignal); Lwr_icoh("00"); Lwr_icob(19);Lwr_ico(file); Lwr_icoh("000/512"); Lwr_icob(4);Lwr_ico(Bat_empt); L5_CE = 1;Lgps_disp_dt();L5_setxy(0,5); ofs = 0; line = 0x02; Lwr_ico(Ico_gps); Lwr_icob(2); Lwr_ico(Sata_run);	Lwr_icob(4); ofs = 3;Lwr_icoh("00-00"); Lwr_icob(4); Lwr_icoh("--:--:--");L5_CE = 1;at_getid();
}unsigned char code g_sign[] = {0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
void L5_GSV(void)
{				  	uchar tp_j,tp_jk,tp_g,tp_n;tp_n = buf_gps[8]-48; ofs = 2; line = 0x01; for(tp_j=0;tp_j<4;tp_j++){if(tp_n==1) L5_setxy(tp_j*14,2);else{if(tp_n==2){if(tp_j<2) L5_setxy((tp_j+4)*14,2);else L5_setxy((tp_j-2)*14,4);}else L5_setxy((tp_j+2)*14,4);}Lwr_icob(2);tp_jk = tp_j*4+3;if(var_seg[tp_jk+1]>(var_seg[tp_jk]+1)) Lwr_icos(var_seg[tp_jk]+1,2);else Lwr_icoh("--");Lwr_icob(4);}for(tp_j=0;tp_j<4;tp_j++){tp_jk = tp_j*4+6;if(var_seg[tp_jk+1]>(var_seg[tp_jk]+1)) tp_g = chr_dec(var_seg[tp_jk]+1);else tp_g = 0;if(tp_n==1) L5_setxy(tp_j*14,1);else{if(tp_n==2){if(tp_j<2) L5_setxy((tp_j+4)*14,1);else L5_setxy((tp_j-2)*14,3);}else L5_setxy((tp_j+2)*14,3);}		line = g_sign[tp_g/12]; Lwr_icob(4);line = 0x00; Lwr_dec(tp_g);}L5_CE = 1;
}

2、电路图

转载于:https://my.oschina.net/zhanggongming/blog/685222

这篇关于stc51单片机做的GPS定位及轨迹记录器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/230590

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

轨迹规划-B样条

B样条究竟是干啥的?白话就是给出一堆点,用样条的方式,给这些点连接起来,并保证丝滑的。 同时B样条分为准均匀和非均匀,以下为准均匀为例。 参考链接1:https://zhuanlan.zhihu.com/p/50626506https://zhuanlan.zhihu.com/p/50626506 参考链接2: https://zhuanlan.zhihu.com/p/536470972h

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

js定位navigator.geolocation

一、简介   html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。   window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置int watchCurrentPosition(

全英文地图/天地图和谷歌瓦片地图杂交/设备分布和轨迹回放/无需翻墙离线使用

一、前言说明 随着风云局势的剧烈变化,对我们搞软件开发的人员来说,影响也是越发明显,比如之前对美对欧的软件居多,现在慢慢的变成了对大鹅和中东以及非洲的居多,这两年明显问有没有俄语或者阿拉伯语的输入法的增多,这要是放在2019年以前,一年也遇不到一个人问这种需求场景的。 地图应用这块也是,之前的应用主要在国内,现在慢慢的多了一些外国的应用场景,这就遇到一个大问题,我们平时主要开发用的都是国内的地

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

一次生产环境大量CLOSE_WAIT导致服务无法访问的定位过程

1.症状 生产环境的一个服务突然无法访问,服务的交互过程如下所示: 所有的请求都是通过网关进入,之后分发到后端服务。 现在的情况是用户服务无法访问商旅服务,网关有大量java.net.SocketTimeoutException: Read timed out报错日志,商旅服务也不断有日志打印,大多是回调和定时任务日志,所以故障点在网关和商旅服务,大概率是商旅服务无法访问导致网关超时。 后

定位cpu占用过高的线程和对应的方法

如何定位cpu占用过高的线程和对应的方法? 主要是通过线程id找到对应的方法。 1 查询某个用户cpu占用最高的进程号 top -u 用户名 2 查询这个进程中占用cpu最高的线程号 top –p 进程号-H    3 查询到进程id后把进程相关的代码打印到jstack文件 jstack -l pid > jstack.txt 4 在jstack文件中通过16进制的线程id搜索到