ARM7学习---GPS练习

发布者:冷漠之心最新更新时间:2016-09-06 来源: eefocus关键字:ARM7  GPS 手机看文章 扫描二维码
随时随地手机看文章
下午抽了点时间在调试ARM7,想把上次用ATMEGA8做的GPS移植到ARM7上去,下午移植了LCD和串口,但是还没把串口中断程序编写好。按键也还没移植,其他OK了,再花点时间就可以完整了。我想GPS和GSM结合起来,这样可以做个比较实用的东西。自己玩玩很不错!哈哈!再接再厉继续努力......

ARM7学习---GPS联系 - 小文 - 小文电子设计ARM7学习---GPS联系 - 小文 - 小文电子设计

/**************ARM7(LPC2103)练习程序**************************/
/*************************************************************/
/*****File  Function :  lcd10265液晶显示程序             *****/
/*****Program Author :  ZhengWen(ClimberWin)             *****/
/*****MCU            : LPC2103F 外部11.0592M晶振        *****/
/*****Compile Date   :  2010/01/13                       *****/
/*****Edition Info   :  V1.0                             *****/
/*************************************************************/
//编译环境 KEIL for ARM 
//修改时间2010年2月9日,能够串口输出数据,接收数据,并且LCD上显示
/*************************************************************/
//修改时间2010年2月10日
//修改内容:一直串口和LCD显示不能同时用,后来发现是设置好PLL后由于时序太快,导致液晶不能显示
//          调整好时序后液晶可以正常显示。
//LCD GUI移植成功,还需要移植按键      
//#include
//#include
#include  "RCU6093.h"
#include  "win_delay.h"
#include  "GPS_GH_80.h"
#define uchar unsigned char
#define uint unsigned int
#define    baudrate   9600     //设置波特率
#define    PE        (U0LSR&0x40) //定义串口数据发送忙碌与否,PE=1忙碌;PE=0;不忙绿

#define Fosc (11059200)  //晶振频率,10MHz~25MHz,应当与实际一至
#define Fcclk (Fosc * 6)   //66.3552 系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco (Fcclk * 4)  //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk (Fcclk / 4) * 1 //016.5888,VPB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍

 

//常量定义
uchar lcd_y_num=0;//液晶显示Y轴坐标
uchar temp_h;
uchar temp_l;
uchar stop=0;

uchar UART_MID;  //定义一个缓存区数据临时存储地址

uchar numh=0;
uchar numl=0;

uchar flag=0;
uchar temp1;

uchar data_num0=1;
uchar data_num1=1;

uchar key1_flag; //定义按键标志位
uchar key2_flag;
uchar key3_flag;
uchar gps_flag;//定义是否有GPS数据


//////////////////////////////////////////////////////////////
void LCD_PORT_INI(void);
void LCD_write_LCD(unsigned char data,unsigned char cmd);
void LCD_RCU6093_Clear(void);
void LCD_RCU6093_tset(void);
void LCD_RCU6093_int(void);

void init_USART(void);//USART 初始化
void write_asicc(uchar assi);
void LCD_xy(uchar x,uchar y);
void write_hanzi(uchar hz);
void write_hanzi16(uchar hz,uchar x,uchar y,uchar mirror);
void PLL_Init(void);

void UART0_INT(void);                        //串口初始化
void UART0_SendByte(unsigned char data);     //串口发送字节
void UART0_SendStr(unsigned char const *str);//串口发送字符串

void keytest(void);  //按键测试程序

void Charge(void);//电池充电子程序
void Signal_strength(void);//信号强度指示程序
void banbenxinxi(void);//显示版本信息
void GPS_display(void);
/**********************************************/


void keytest(void)  //按键测试程序
{

}
////////////充电状态////////////////////

void Charge(void)
{
uchar i;
 LCD_xy(94,1);//LCD指针坐标
   write_hanzi(19);//  
  for(i=0;i<6;i++)
  {  LCD_xy(94,0);//LCD指针坐标     
     write_hanzi(13+i);//
  delayms(60000); 
   delayms(60000); 
    delayms(60000); 
  }
}

///////////信号强度状态//////////////////
void Signal_strength(void)
{
uchar i;
 LCD_xy(0,1);//LCD指针坐标
   write_hanzi(20);//  
  for(i=0;i<4;i++)
  {  LCD_xy(0,0);//LCD指针坐标     
     write_hanzi(21+i);//
  delayms(60000); 
   delayms(60000); 
    delayms(60000); 
  }
}

///////////////////////////////
/////////////////////////////////
void banbenxinxi(void)
{
LCD_RCU6093_int();    //初始化液晶

  LCD_xy(0,2);//LCD指针坐标

write_asicc('G');
write_asicc('P');
write_asicc('S');
write_asicc(0);
write_asicc('V');
write_asicc('1');
write_asicc('.');
write_asicc('2');


  LCD_xy(0,3);//LCD指针坐标
write_asicc('C');
write_asicc('P');
write_asicc('U');
write_asicc(':');

write_asicc('A');
write_asicc('R');
write_asicc('M');
write_asicc('7');
write_asicc('T');
write_asicc('D'); 
write_asicc('M'); 
write_asicc('I');

    LCD_xy(0,4);//LCD指针坐标
write_asicc('B');
write_asicc('Y');
write_asicc(0);
write_asicc('C');
write_asicc('L');
write_asicc('I');
write_asicc('M');
write_asicc('B');
write_asicc('E');
write_asicc('R');
write_asicc('W');
write_asicc('I');
write_asicc('N');
LCD_xy(0,5);//LCD指针坐标
write_asicc('2');
write_asicc('0');
write_asicc('1');
write_asicc('0');
 write_hanzi(4);//年
write_asicc('0');
write_asicc('2');
 write_hanzi(5);//月
write_asicc('1');
write_asicc('0');
 write_hanzi(6);//日

LCD_xy(72,7);//LCD指针坐标
 write_asicc('B');
  write_asicc('A');
   write_asicc('C');
    write_asicc('K');
//////////显示手持式导航仪/////////////////
write_hanzi16(4,4,0,0);
write_hanzi16(5,1*16+4,0,0);
write_hanzi16(6,2*16+4,0,0);
write_hanzi16(7,3*16+4,0,0);
write_hanzi16(8,4*16+4,0,0);
write_hanzi16(9,5*16+4,0,0);
  
}


void PLL_Init(void)
{
  /* 设置系统各部分时钟 */
    PLLCON = 1;
 #if ((Fcclk / 4) / Fpclk) == 1
  VPBDIV = 0;
 #endif
 #if ((Fcclk / 4) / Fpclk) == 2
  VPBDIV = 2;
 #endif
 #if ((Fcclk / 4) / Fpclk) == 4
  VPBDIV = 1;
 #endif
 #if (Fcco / Fcclk) == 2
  PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
 #endif
 #if (Fcco / Fcclk) == 4
  PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
 #endif
 #if (Fcco / Fcclk) == 8
  PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
 #endif
 #if (Fcco / Fcclk) == 16
  PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
 #endif
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  while((PLLSTAT & (1 << 10)) == 0);
  PLLCON = 3;
  PLLFEED = 0xaa;
  PLLFEED = 0x55; 
}

 

  

 

/***********串口0初始化**********************/
void UART0_INT(void)
{ unsigned  int U0DL;
 
  U0LCR = 0x83;                 // DLAB = 1,可设置波特率 ;无奇偶校验  1位停止位 8位数据长度。
  U0DL =  (Fpclk/16)/baudrate;
  U0DLM=  U0DL/256;       //高8位
  U0DLL = U0DL%256;       //低8位
  U0LCR = 0x03;           // DLAB = 0,设置好波特率;无奇偶校验 1位停止位 8位数据长度。
}
/***********串口发送字节**********************/
void UART0_SendByte(unsigned char data)

  U0THR = data;                    //发送数据
  while( PE==0 );                 //等待数据发送完毕 PE=1忙碌;PE=0;不忙绿

}
/***********串口发送字符串**********************/
void UART0_SendStr(unsigned char const *str)
{   while(1)
  { if( *str == '\0' ) break;
     UART0_SendByte(*str++);        //发送数据
  }
}
/*************串口接收字符*************************/

unsigned char UART0_GetChar(void)
{                         

  while (!(U0LSR & 0x01));
  return (U0RBR);
  
}

void __irq UART0_IRQ (void)
{

}


//////////////////////////////////////////////////////////////
void LCD_PORT_INI(void) 
{  
 IO0DIR|=0x0000ff00;  //配置P0.8-P1.5为输出         

}
//////////////////////////////////////////////////////////////
void LCD_write_LCD(unsigned char data,unsigned char cmd)
{   
    unsigned char i=0;
 
 LCD_CS_L();

 if(cmd)LCD_A0_H();
 else LCD_A0_L();
 for (i=0;i<8;i++) 
     { 
        LCD_SCL_L();
        if (data&0X80) LCD_SD_H(); else  LCD_SD_L();  
        data<<=1; 
      
        LCD_SCL_H();
    
    }
    
 LCD_CS_H();
  //delayms(1);
}
////////////////////////////////////////////////////////////
void LCD_RCU6093_Clear(void)
{    
     unsigned int i=0;
  
  for ( i = 0 ; i < 918 ; i++ )
     {
    LCD_write_LCD(0x00,1);
     
     }
  
}
////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////
void LCD_RCU6093_int(void)
{
  LCD_PORT_INI();
  LCD_RST_L();
  LCD_CS_H();
  LCD_A0_H();
  LCD_SCL_H();
  LCD_SD_H();
  delayms(1);
  LCD_RST_H();
  LCD_write_LCD(0x21,0);//写Extend 指令  (H=1)
  LCD_write_LCD(0xb0,0); //对比度调节
  LCD_write_LCD(0x14,0);//LCD Duty设置
  LCD_write_LCD(0x20,0);//写Basic 指令(H=0)
  LCD_write_LCD(0x0c,0);//画面显示模式 0x08全白 0x09全黑 0x0c正常模式 0x0d反转显示模式
  LCD_RCU6093_Clear();
  
}

///////////////////写asicc码//////////////////////////////////
void write_asicc(uchar assi)
{
     uchar i;
     for(i=0;i<8;i++)
     {LCD_write_LCD( asicc[assi][i],1);}
  //{LCD_write_LCD(32+i,1);}
}
///////////////////写8*8简单汉字//////////////////////////////////
void write_hanzi(uchar hz)
{
     uchar i;
     for(i=0;i<8;i++)
      {LCD_write_LCD( hanzi1[hz][i],1);}
}
///////////////////写16*16简单汉字//////////////////////////////////
void write_hanzi16(uchar hz,uchar x,uchar y,uchar mirror)
{
     uchar i;
   LCD_write_LCD(0x80+x,0);//X轴地址
      LCD_write_LCD(0x40+y,0);//Y轴地址
     for(i=0;i<8;i++)
  if(mirror==0)
     {LCD_write_LCD(hanzi16[4*hz][i],1);}
  else
      {LCD_write_LCD(~hanzi16[4*hz][i],1);}
  for(i=0;i<8;i++)
   if(mirror==0)
     {LCD_write_LCD(hanzi16[4*hz+1][i],1);}
  else
  {LCD_write_LCD(~hanzi16[4*hz+1][i],1);}

   LCD_write_LCD(0x80+x,0);//X轴地址
      LCD_write_LCD(0x40+y+1,0);//Y轴地址
     for(i=0;i<8;i++)
   if(mirror==0)
     {LCD_write_LCD(hanzi16[4*hz+2][i],1);}
  else
  {LCD_write_LCD(~hanzi16[4*hz+2][i],1);}
  for(i=0;i<8;i++)
  if(mirror==0)
     {LCD_write_LCD(hanzi16[4*hz+3][i],1);}
  else
  {LCD_write_LCD(~hanzi16[4*hz+3][i],1);}
}
//////////////LCD指针坐标//////////////////////
void LCD_xy(uchar x,uchar y)
{
 LCD_write_LCD(0x80+x,0);//X轴地址
 LCD_write_LCD(0x40+y,0);//Y轴地址
}

//////////////////////////////////////////////////////////////

void GPS_display(void)
{
unsigned char i,j,n,m;
unsigned char hh,hl,mh,ml,sh,sl;
unsigned char temp_time;
 
 LCD_xy(16,0);//LCD指针坐标

       write_hanzi(7); //小
       write_hanzi(8);//文
       write_hanzi(0); //电
       write_hanzi(11);//子


       write_asicc(0);//空白
       write_asicc('G');
       write_asicc('P');
       write_asicc('S');

 


   if(flag==2  && data_num1==10 && E1_temp[10]==0xea) 
    {

   //cli();
   data_num0=1;
   data_num1=1;
    LCD_xy(0,1);//LCD指针坐标
    write_asicc('2');
    write_asicc('0');
   GPS_date_time();//获取GPS时间
    if((GPS_date_year/10)==0 && (GPS_date_year%10)==4)
     {
  write_asicc(GPS_date_year/10+0x30);
     write_asicc(GPS_date_year%10+0x30+5);
  }
        else
  {
  write_asicc(GPS_date_year/10+0x30);
     write_asicc(GPS_date_year%10+0x30);
  }
       write_hanzi(4);//年

 

    write_asicc(GPS_date_month/10+0x30);
    write_asicc(GPS_date_month%10+0x30);
       write_hanzi(5);//月

    write_asicc(GPS_date_day/10+0x30);
    write_asicc(GPS_date_day%10+0x30);
       write_hanzi(6);//日

     LCD_xy(0,2);//LCD指针坐标
   write_hanzi(2);//时
       write_hanzi(3);//间
       write_asicc(':');

     
    write_asicc((GPS_time_hour+8)/10+0x30);
    write_asicc((GPS_time_hour+8)%10+0x30);
       write_asicc(':');
    
    write_asicc(GPS_time_minute/10+0x30);
    write_asicc(GPS_time_minute%10+0x30);
       write_asicc(':');
    
    write_asicc(GPS_time_second/10+0x30);
    write_asicc(GPS_time_second%10+0x30);

///////////////////////////////////////////////
    //////////卫星数量///////////
       LCD_xy(0,7);//LCD指针坐标
       write_asicc('S');
    write_asicc('A');
    write_asicc('T');
    write_asicc('E');
    write_asicc('L');
    write_asicc('L');
    write_asicc('I');
    write_asicc('T');
    write_asicc('E');
    write_asicc(':');

       if(E0_temp[21]>=0 && E0_temp[21]<=12){write_asicc(E0_temp[21]/10+0x30);write_asicc(E0_temp[21]%10+0x30); }
    //////////////////////////////
////////海拔//////////////
       LCD_xy(0,6);//LCD指针坐标
      

       write_asicc('H');
    write_asicc('I');
    write_asicc('G');
    write_asicc('H');
    write_asicc(':');

       Altitude_change();

      // write_asicc(GPS_E0_temp[12]/10+0x30);   //高3位不显示
      // write_asicc(GPS_E0_temp[12]%10+0x30);
      // write_asicc(GPS_E0_temp[13]/10+0x30);  
   if(GPS_Altitude<9000) 
      { 
    write_asicc( GPS_Altitude/1000+0x30);
    write_asicc((GPS_Altitude%1000)/100+0x30);  
       write_asicc(((GPS_Altitude%1000)%100/10)+0x30);
    write_asicc('.'); 
       write_asicc(((GPS_Altitude%1000)%100%10)/10+0x30); 
     write_asicc('M'); 
   flag=0;
       }
    else
    {;}
   //////////////////速度///////////////////
     
       LCD_xy(1,5);//LCD指针坐标
       write_asicc('S');
    write_asicc('P');
    write_asicc('E');
    write_asicc('E');
    write_asicc('D');
    write_asicc(':');
   Speed_change();
       if(GPS_speed<9000) 
      { 
    write_asicc( GPS_speed/1000+0x30);
    write_asicc((GPS_speed%1000)/100+0x30);  
       write_asicc(((GPS_speed%1000)%100/10)+0x30);
    write_asicc('.'); 
       write_asicc(((GPS_speed%1000)%100%10)/10+0x30);

       }
     else
    {
       write_asicc('0');
    }

////////////////////经纬度///////////////////////////
  LCD_xy(0,3);//LCD指针坐标
Coordinates_change(1);
write_asicc('N');

//////////////2009.12.29修改/////
if(GPS_degree!=34 && GPS_minute!=44)
{
/////////////////////////////////
if(GPS_degree>100){write_asicc(GPS_degree/100+0x30);write_asicc((GPS_degree%100)/10+0x30);write_asicc((GPS_degree%100)%10+0x30); write_asicc(23);}
if(GPS_degree<100){write_asicc(GPS_degree/10+0x30);write_asicc(GPS_degree%10+0x30);write_asicc(23);}
if(GPS_minute>100){write_asicc(GPS_minute/100+0x30);write_asicc((GPS_minute%100)/10+0x30);write_asicc((GPS_minute%100)%10+0x30); write_asicc(27);}
if(GPS_minute<100){write_asicc(GPS_minute/10+0x30);write_asicc(GPS_minute%10+0x30);write_asicc(27);}

if(GPS_second>100){write_asicc(GPS_second/100+0x30);write_asicc((GPS_second%100)/10+0x30);write_asicc((GPS_second%100)%10+0x30);}
if(GPS_second<100){write_asicc(GPS_second/10+0x30);write_asicc(GPS_second%10+0x30);}
if(GPS_last>100){write_asicc(GPS_last/100+0x30);write_asicc((GPS_last%100)/10+0x30);write_asicc((GPS_last%100)%10+0x30);}
if(GPS_last<100){write_asicc(GPS_last/10+0x30);write_asicc(GPS_last%10+0x30);}
}
else
{
write_asicc('0');write_asicc('0');write_asicc(23);write_asicc('0');write_asicc('0');write_asicc(27);write_asicc('0');write_asicc('0');write_asicc('0');write_asicc('0');write_asicc('0');
}


Coordinates_change(2);
LCD_xy(0,4);//LCD指针坐标
write_asicc('E');
if(GPS_degree!=135 && GPS_minute!=21)
{
if(GPS_degree>100){write_asicc(GPS_degree/100+0x30);write_asicc((GPS_degree%100)/10+0x30);write_asicc((GPS_degree%100)%10+0x30); write_asicc(23);}
if(GPS_degree<100){write_asicc(GPS_degree/10+0x30);write_asicc(GPS_degree%10+0x30);write_asicc(23);}
if(GPS_minute>100){write_asicc(GPS_minute/100+0x30);write_asicc((GPS_minute%100)/10+0x30);write_asicc((GPS_minute%100)%10+0x30); write_asicc(27);}
if(GPS_minute<100){write_asicc(GPS_minute/10+0x30);write_asicc(GPS_minute%10+0x30);write_asicc(27);}

if(GPS_second>100){write_asicc(GPS_second/100+0x30);write_asicc((GPS_second%100)/10+0x30);write_asicc((GPS_second%100)%10+0x30);}
if(GPS_second<100){write_asicc(GPS_second/10+0x30);write_asicc(GPS_second%10+0x30);}
if(GPS_last>100){write_asicc(GPS_last/100+0x30);write_asicc((GPS_last%100)/10+0x30);write_asicc((GPS_last%100)%10+0x30);}
if(GPS_last<100){write_asicc(GPS_last/10+0x30);write_asicc(GPS_last%10+0x30);}
}
else
{
write_asicc('0');write_asicc('0');write_asicc(23);write_asicc('0');write_asicc('0');write_asicc(27);write_asicc('0');write_asicc('0');write_asicc('0');write_asicc('0');write_asicc('0');
}


      flag=0;
  //  sei();

    }
   else
   {;} 
}
////////////主程序/////////////////////
int  main(void)
{   
 unsigned char i,j,n,m;

 uchar uart_temp;
 uchar mode_flag;//模式标志位,用来切换界面


uchar tubiao1,tubiao2,tubiao3,tubiao4;//定义首界面图标
tubiao1=0x00;
tubiao2=0x00;
tubiao3=0x00;
tubiao4=0x00;
mode_flag=0x01;//模式标志位flag=0x00开机界面flag=0x01初始界面;flag=0x02日历界面;flag=0x03工具界面;
               //flag=0x04导航界面;flag=0x05文件夹界面

 delayms(50000);   
  flag=0;
 gps_flag=0;//初始化

 

  PLL_Init();//系统时钟配置,必须设置

 PINSEL0 |= 0x00000005;            //设置I/O连接到UART0
 PINSEL1 |= 0x00000000;  
 
 
 
  
  UART0_INT(); //串口初始化
  UART0_SendStr("LPC2103 UART0 Test OK!");  //向串口发送字符串
  delayms(60000); 
 

     LCD_RCU6093_int();    //初始化液晶 
    LCD_xy(0,0);//LCD指针坐标
 
mode_flag=0x05;
while(1)
{
key1_flag=0x00;
key2_flag=0x00;
key3_flag=0x00;

   
    LCD_RCU6093_int();    //初始化液晶
    LCD_xy(0,0);//LCD指针坐标


      
data_num0=1;
data_num1=1;

///////////显示电池和信号强度////////////
LCD_xy(94,1);//LCD指针坐标
   write_hanzi(19);// 
   LCD_xy(94,0);//LCD指针坐标 
 write_hanzi(17);//
 LCD_xy(0,1);//LCD指针坐标
   write_hanzi(20);//
   LCD_xy(0,0);//LCD指针坐标 
 write_hanzi(24);//
////////////////////////////

 

 LCD_xy(16,0);//LCD指针坐标

       write_hanzi(7); //小
       write_hanzi(8);// 文
       write_hanzi(0); //电
       write_hanzi(11);//子


       write_asicc(0);//空白
      write_asicc(0);//空白
       write_asicc('G');
       write_asicc('P');
       write_asicc('S');


LCD_xy(0,7);//LCD指针坐标
 write_asicc('O');
  write_asicc('K');
LCD_xy(72,7);//LCD指针坐标
 write_asicc('B');
  write_asicc('A');
   write_asicc('C');
    write_asicc('K');

    


 while(mode_flag==0x01)
 { 
 //cli();

///////图标//////////////////////
write_hanzi16(0,2,3,tubiao1);
write_hanzi16(1,2*14+2,3,tubiao2);
write_hanzi16(2,4*14+2,3,tubiao3);
write_hanzi16(3,6*14+2,3,tubiao4);
//////////显示手持式导航仪/////////////////
write_hanzi16(4,4,5,0);
write_hanzi16(5,1*16+4,5,0);
write_hanzi16(6,2*16+4,5,0);
write_hanzi16(7,3*16+4,5,0);
write_hanzi16(8,4*16+4,5,0);
write_hanzi16(9,5*16+4,5,0);

 
keytest();
if( key1_flag==0){tubiao1=0;tubiao2=0;tubiao3=0;tubiao4=0;key2_flag=0;}
if( key1_flag==1){tubiao1=1;tubiao2=0;tubiao3=0;tubiao4=0;key2_flag=0;}
if( key1_flag==2){tubiao1=0;tubiao2=1;tubiao3=0;tubiao4=0;key2_flag=0;}
if( key1_flag==3){tubiao1=0;tubiao2=0;tubiao3=1;tubiao4=0;}
if( key1_flag==4){tubiao1=0;tubiao2=0;tubiao3=0;tubiao4=1;}
if( key1_flag==5){key1_flag=0;}
if( key1_flag==3 &&key2_flag==1){key2_flag=0;mode_flag=0x04;}
if( key1_flag==4 &&key2_flag==1){key2_flag=0;mode_flag=0x05;}

 
 }

     
 ///////////////////////////////////////////////////////////////    
while(mode_flag==0x04)
{
  UART0_INT(); //串口初始化   
    //sei();     //中断使能(avr/interrupt.h 中调用) 
  LCD_RCU6093_Clear(); 
  key3_flag=0;
  gps_flag=0;
  break;
 }
while(mode_flag==0x04)
{

while(gps_flag==0)//如果GPS没收到指令就一直发送09.12.29
{
U0THR=0xc0;
delayms(10000); 
U0THR=0xa3;
delayms(10000);  
U0THR=0x8f;
delayms(10000); 
U0THR=0xec; 
delayms(10000);
U0THR=0xca;
delayms(50000);
   LCD_xy(24,3);//LCD指针坐标
   write_asicc('N');
   write_asicc('O');
    write_asicc(0);
   write_asicc('G');
   write_asicc('P');
   write_asicc('S');
keytest();
if( key3_flag==1){key3_flag=0;mode_flag=0x01;break;}
}
while(1)
{
GPS_display();
keytest();
if( key3_flag==1){key3_flag=0;mode_flag=0x01;break;}
}

}

while(mode_flag==0x05)
{
banbenxinxi();
key3_flag=0;
break;
}
while(mode_flag==0x05)
{

keytest();
if( key3_flag==1){key3_flag=0;mode_flag=0x01;break;}
   
}

}

   
}

关键字:ARM7  GPS 引用地址:ARM7学习---GPS练习

上一篇:ARM7学习---GPIO笔记
下一篇:ARM7学习---UART0练习

推荐阅读最新更新时间:2024-03-16 15:08

锐迪科微电子宣布GPRS/GPS全集成终端芯片量产
        锐迪科微电子(RDA)日前宣布,已经将GPS技术集成到最新的GSM/GPRS芯片中,使GPS的实用性大大提高。新芯片型号为RDA8851GL,它具有体积小、低功耗和功能强等特点,使之应用于监测,遥控,定位的硬件模块可以做到只有一张邮票大小,从而扩大了GPS的传统应用范围,使其可以广泛应用于消费类电子产品中,甚至可以应用于手表和项链坠中。这也是在该领域国内首颗成功上市的全集成芯片,采用CMOS工艺,BGA 10X12mm封装,片外器件极少,高集成度,应用简单。  RDA8851GL的量产令锐迪科的无线产品线更加丰富。此前,锐迪科已经成功推出了Bluetooth,Wifi,GSM等芯片。其中针对GSM Fea
[手机便携]
实至名归:北斗导航涨志气,研发团队获殊荣
在一年一度的中国科协会员日上,中国科协在人民大会堂颁出了“十佳全国优秀科技工作者”奖项。“中国芯”研究者吴汉明、北斗卫星导航系统建设者谭述森等10人获奖。 颁奖词中指出,吴汉明自海外归国14年来,潜心致力于芯片研究,其成果使得我国的芯片制造技术与国外的差距从6代以上得到了极大的缩小。同事在分享吴汉明的研究趣事时提到,吴汉明在谈恋爱时就曾对爱人说,“我没有多少时间陪你,你要有心理准备。”连新婚蜜月也在实验室度过的吴汉明如此说道:“选择了这个行业,我就选择了坚持。” 目前,北斗卫星导航系统已在我国的交通、减灾救灾、国家安全等方面发挥着巨大的作用,其背后的领军人就是北斗二号工程副总设计师、此次“十佳全国优秀科技工作者”之一的谭述
[单片机]
Proteus仿真ARM7 LPC2101 AD转换器源程序
调试时首先观察待测电阻是否工作正常。在电阻的变化端插入电压探针,具体方式在 左边工具探针中选取电压探针(Voltage)运行仿真,点击电阻,观察探针电压是否在不断 变化。 调试流程 绘制 ADC 接口电路 1.在器件库中找到 ADC 转换芯片(ADC0801),如图连接 ADC0801 和总线信号。其中 ADC0801数据线连接数据总线最低字节(D0-D7),读写信号接总线读写信号(NRD,NWR)。其他信 号请按照下图进行连接。 2.片选信号 AD_CS 接译码电路输出(采用部分译码,对应地址为 0x03XXXXXX)。 3.连接模拟输入,在器件库找到可变电阻(POT-HG)。 完成 ADC0801 工作流程
[单片机]
Proteus仿真<font color='red'>ARM7</font> LPC2101 AD转换器源程序
基于uClinux的GPSOne/GPS双定位信息接收
摘要 阐述uClinux串口编程的基本方法;简要介绍操作系统的几种I/O模型,特别对基于select的I/O复用模型在监听多个设备时的适用性进行较详细的分析;比较多个串口下使用轮询方法和使用select机制处理的差别;结合GPSOne与GPS双定位导航系统的实例,给出双串口定位信息接收的软件实现方法。 关键词 GPSGPSOneselectI/O复用串口   GPS是当前在导航系统中应用最广泛的定位技术之一,但GPS也有其自身的不足。例如,当GPS终端在建筑密集的地方或在高架桥底下等恶劣的地理位置时,定位信号比较容易丢失,往往难以获取有效的定位信息。由美国高通公司开发的GPSOne定位模块,提供的定位信号是基于网络与蜂窝的定位技术
[嵌入式]
双口RAM芯片CY7C028的INS/GPS组合导航系统
在众多组合导般系统中,INS/GPS组合导航系统更是发展迅速,在军用和民用领域均已获得广泛应用,而且愈来愈受到重视。就INS/GPS组合导航系统而言,除了要完成大量的导航解算工作外,还要完成控制、人机接口、与外部系统的通信等功能。由于导航系统对实时性要求较高,采用单片CPU来实现上述功能是不现实的。在研制某弹载INS/GPS组合导航系统时,针对弹载导航系统体积小、重量轻、功耗小的特点,设计了一种嵌入式高速处理系统。该系统采用TI公司的TMS320VC33和TMS320F240组成双DSP系统,即由两个DSP构成一个主从式系统完成相应功能。主从式系统设计的关键是主机与从机之间的数据通信。主从机之间的数据通信主要有串行、并行、DMA及双
[模拟电子]
双口RAM芯片CY7C028的INS/<font color='red'>GPS</font>组合导航系统
科学家们研发了一种新型 GPS 系统 不过是用来定位人体细胞
如果你想要找到自己附近的餐厅或者酒店,使用手机上的地图 APP 就可以实现,不管是谷歌,高德还是百度地图,通过使用地球附近的全球定位卫星系统,这些 APP 都可以让你快速找到心仪的餐厅位置,并告诉你距离有多远,步行或者乘坐各种交通工具的时间要多久,你需要的交通信息在其中都可以找到。 基于同样的原理,其实这样的 GPS 定位技术也完全作用到人体上,最近麻省理工学院的计算机科学和人工智能实验室的研发人员,Dina Katabi 博士和其团队就开发了一款名为 ReMix 的人体 GPS 定位系统,通过这种无线技术给人体内部的各项机能进行定位,在搜寻肿瘤和癌细胞方面都能起到很大的作用。 相比起来,目前医学上的人体侦测方法是极具侵入性的,需
[医疗电子]
高通25亿美元吞并英国GPS蓝牙芯片巨头CSR
     美国高通,是移动互联网时代的芯片大赢家。而高通仍然在通过并购,把自己的优势延伸到移动芯片的各个新兴领域。10月15日,高通宣布,将斥资25亿美元收购英国芯片厂商CSR,该公司产品包括GPS芯片、蓝牙通信芯片以及物联网芯片等。高通为CSR开出的收购价格是每股9英镑,交易总额为16亿英镑,相当于25亿美元。 高通25亿美元吞并英国GPS蓝牙芯片巨头CSR 目前,CSR的董事会已经同意了高通的收购报价。不过这一交易还需要相关监管机构的批准,预计将会在明年年中才能够最后完成。 据外媒分析,由于高通在移动芯片领域拥有垄断性优势,因此此次收购CSR的交易,将会在大西洋两岸面临一定的反垄断审核阻力。 CSR公司总部位于英格兰剑桥,主要
[手机便携]
基于ARM7和CPLD的数字公交站亭系统设计
  针对现有印刷公交站亭提供信息少、无法提供车辆到站预报、增加线路或者修改线路信息麻烦等不足,本文提出了一种新数字公交站亭系统。该系统基于ARM7 和CPLD 架构,通过GPRS 与公交控制中心通信,采用CA 认证保证通信的安全性,能实现实时车辆到站预报、公众信息(如天气预报、重要新闻、交通路况、紧急状态信息)发布、线路信息及时更新以及系统在线升级等功能,具有实时性好、安全性高,可扩展性强等特点,有助于全面提升城市公交站的信息服务水平。   1 数字公交站亭系统总体结构及工作原理   该系统分为控制中心、站亭终端通信模块、站亭终端控制模块、站亭终端显示模块四个部分,总体结构框图如图1,各个部分组成和工作原理介绍如下:   (
[单片机]
基于<font color='red'>ARM7</font>和CPLD的数字公交站亭系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved