搜索
bottom↓
回复: 0

AVR ATmega16 关于GPS接受用5110液晶屏显示的问题,望各位高手们帮忙看一下问题在

[复制链接]

出0入0汤圆

发表于 2011-5-16 16:35:52 | 显示全部楼层 |阅读模式
我们在做接收GPS信号并处理用液晶屏显示的小实验,出现了一点问题被卡住啦,希望各位帮帮忙.假设已经接收到信号
unsigned char Recieve_Gps[80]={"$GPRMC,114301.000,A,3802.2167,N,11431.5890,E,0.00,,080511,,*1F"};//接收一条完整的gps语句
/*<1>*/unsigned char Gps_time[10];//接收时时间,hhmmss        ///////////
/*<2>*/unsigned char Data_State;//定位状态,A=有效定位,V=无效定位 //////
/*<3>*/unsigned char Latitude[9];//纬度
/*<4>*/unsigned char Latitude_Direction;//纬度方向,N为北纬,S为南纬
/*<5>*/unsigned char Longitude[10];//经度
/*<6>*/unsigned char Longitude_Direction;//经度方向,E为东经,W为西经
/*<7>*/unsigned char Gps_Speed[4];//地面速率(000.0~999.9节,前面的0也将被传输)
/*<8>*/unsigned char Gps_Angle[5];//地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
/*<9>*/unsigned char Gps_Date[6];//UTC日期,ddmmyy(日月年)格式
unsigned char Gps_End;
unsigned int flag=0;
unsigned char mode; //0---接收帧尾数据模式
                                 //1---接收帧头数据模式
                                 //2---接收帧内数据模式
unsigned int Seg_Count=0;//逗号计数器
unsigned int Byte_Count=0;//位数计数器       
unsigned char Frame_Flag[5];//帧头,GPRMC
unsigned int i;
unsigned char *temp;
void Gps_Save(void)
{
for(i=0;i<79;i++)
{*temp=Recieve_Gps;
       switch(*temp)
        {
                case'$':mode=1;//进入接收帧头数据模式
                            Byte_Count=0;break;//接收位数清空
                                   default:
                if(mode==1)//开始接收帧头
                    {
                             if(Byte_Count<5)
                 Frame_Flag[Byte_Count++]=*temp;break;//接收字符放入类型缓存
                        }
int main(void)
{
Uart_Init();      //串口初始化
LCD_init();//初始化液晶   
LCD_clear();
SETBIT(DDRC,BACKLED_EN); //配置背光控制端口                                                                               
CLEARBIT(PORTC,BACKLED_EN);//使能背光
sei();
LCD_write_english_string(5,0,"WELCOM ");
  while(1){
Gps_Save();
LCD_write_english_string(5,1,  Frame_Flag);}}
这样实验的时候能够正常显示,但是用下面的程序再做的时候就不行了,是一屏乱码
void Gps_Save(void)
{
for(i=0;i<79;i++)
{*temp=Recieve_Gps;
       switch(*temp)
        {
                case'$':mode=1;//进入接收帧头数据模式
                            Byte_Count=0;break;//接收位数清空
                case',':Seg_Count++;//逗号计数加1
                        mode=2;
                            Byte_Count=0;break;
                case'*':mode=3;//进入接收帧尾数据模式
                            Byte_Count=0;break;
                default:
                if(mode==1)//开始接收帧头
                    {
                             if(Byte_Count<5)
                 Frame_Flag[Byte_Count++]=*temp;break;//接收字符放入类型缓存
                        }
                if(mode==2)//开始接收帧内数据
                        {switch(Seg_Count)
                                    {case 1:if(Byte_Count<10)//接收时间
                                    {
                                        Gps_time[Byte_Count]=*temp;
                                变换并赋予高二位显示   
                                    }break;
                                    case 2:if(Byte_Count<1)//接收数据有效位
                                                {
                                        *Data_State=*temp;
                                    }break;
                                    case 3:if(Byte_Count<9)//接收纬度
                                    {
                                         Latitude[Byte_Count]=*temp;
                                    }break;
                                    case 4:if(Byte_Count<1)//接收纬度方向
                                                    {
                                          *Latitude_Direction=*temp;
                                    }break;
                                    case 5:if(Byte_Count<10)//接收经度
                                    {
                                          Longitude[Byte_Count]=*temp;
                                    }break;
                                    case 6:if(Byte_Count<1)//接收经度方向
                                                {  
                                          *Longitude_Direction=*temp;
                                    }break;
                                    case 7:if(Byte_Count<4)// 地面速率
                                                        {
                                            Gps_Speed[Byte_Count]=*temp;
                                    }break;
                                    case 8:if(Byte_Count<5)//地面航向
                                                        {
                                              Gps_Angle[Byte_Count]=*temp;
                                    }break;
                                    case 9:if(Byte_Count<6)//接收日期 UTC日期
                                    {
                                             Gps_Date[Byte_Count]=*temp;
                                    }break;
                                    default:break;
                                    }
                    }
            if(mode==3)//开始接收帧尾
                               {if(Seg_Count==11)
                                            {
                                                        Gps_End=1;
                                                        Seg_Count=0;
                                            }break;
                                               
                                   }                                       
                }
Byte_Count++;break;
}
               
}
int main(void)
{
Uart_Init();      //串口初始化
LCD_init();//初始化液晶   
LCD_clear();
SETBIT(DDRC,BACKLED_EN); //配置背光控制端口                                                                               
CLEARBIT(PORTC,BACKLED_EN);//使能背光
sei();
LCD_write_english_string(5,0,"WELCOM ");
  while(1)
{

Gps_Save();
LCD_write_english_string(5,1,Gps_time);
Delay_ms(100);      
LCD_write_english_string(5,2,Data_State);
Delay_ms(100);
LCD_write_english_string(5,3,Latitude);
Delay_ms(100);
LCD_write_english_string(5,4,Latitude_Direction);
Delay_ms(100);
LCD_write_english_string(5,5,Longitude);
Delay_ms(100);
LCD_clear();
LCD_write_english_string(5,1,Longitude_Direction);
Delay_ms(100);
LCD_write_english_string(5,2,Gps_Speed);
Delay_ms(100);
LCD_write_english_string(5,3,Gps_Angle);
Delay_ms(100);
LCD_write_english_string(5,4,Gps_Date);
Delay_ms(100);

}

}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 09:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表