搜索
bottom↓
回复: 0

我的370C模块正常,用12864液晶显示的程序问题,希望大侠帮帮忙看看

[复制链接]

出0入0汤圆

发表于 2011-5-24 18:17:55 | 显示全部楼层 |阅读模式
我的12864液晶是串行口自带字库,3根线就可以控制,GPS模块是在阿莫买的370C,在论坛上参考了很多大侠们写的程序,但就是不能在我的液晶上正常运行,希望大家帮忙看看,这是我在网上以及论坛上找的程序(液晶驱动没写上来):

(我用的12M的晶振)

//GPS数据存储数组
uchar jd[10]={"-----.----"}; //经度
uchar jd_fx='-';                             //经度方向
uchar wd[9]={"----.----"};         //纬度
uchar wd_fx='-';           //纬度方向
unsigned char time[6];        //时间
unsigned char date[6];        //日期
uchar state;            //定位状态

//串口中断需要的变量
uchar seg_count;        //逗号计数器
uchar dot_count;        //小数点计数器
uchar byte_count;        //位数计数器
uchar cmd_number;        //命令类型
uchar mode;                //0:结束模式,1:命令模式,2:数据模式
uchar buf_full=0;            //1:整句接收完成,相应数据有效。0:缓存数据无效。
uchar cmd[5];            //命令类型存储数组

//显示需要的变量
unsigned int dsp_count;        //刷新次数计数器
void sys_init(void)             //系统初始化
{
   
    SCON = 0x50;                      //SCON: mode 1, 8-bit UART, enable rcvr
    TMOD |= 0x21;                     //TMOD: timer 1, mode 2, 8-bit reload
    TH1 =  0xf4;                      // TH1: reload value for 4800 baud @ 11.059MHz
    TR1 = 1;                         // TR1: timer 1 run
    PCON=0x00 ;
        LCD_Init();                                //LCD初始化
        FontSet_cn(0,1);                        //设置汉字字体大小和颜色
        FontSet(0,1);                           //设置字符字体大小和颜色
        PutString_cn(0x00,0x00,"GPS自动定位系统");
        SetBackLight(100);
        TimeDelay(500);                    【程序运行到这好像就没往下运行了,因为显示“GPS自动定位系统”几秒后就清屏什么都没有显示了,自己怀疑是串口接收中断函数哪里出错了,但研究了3天一直没找出来,我的GPS设置的是4800bps,所以单片机波特率也设置4800bps。希望大家帮忙看看我的初始化程序和中断接收程序,中断接收程序相信大家很熟悉,不是我自己写的,但自己研究了没有任何问题,但就是在液晶上不能按照程序所写的那样显示。】
    ClrScreen();
    IE|=0x90;                    //开总中断、串口中断

}


void uart(void) interrupt 4                                  //串口接收中断
{
    uchar tmp;
        //RI=0;
    if(RI)
            {
        tmp=SBUF;
        switch(tmp)
        {
            case '$':
                cmd_number=0;                //命令类型清空
                mode=1;                        //接收命令模式
                byte_count=0;                //接收位数清空
                break;
            case ',':
                seg_count++;                //逗号计数加1
                byte_count=0;
                break;
            case '*':
                switch(cmd_number)
                {
                case 1:
                                        buf_full|=0x01; //GPGGA
                                        break;
                                case 2:
                                        buf_full|=0x02; //GPGSV
                                        break;
                                case 3:
                                        buf_full|=0x04; //GPGSA
                                        break;
                                case 4:
                                        buf_full|=0x08; //GPRMC
                                        break;
                }
                mode=0;
                break;
           default:
                if(mode==1)
                        {
                    //命令种类判断
                    cmd[byte_count]=tmp;            //接收字符放入类型缓存
                    if(byte_count>=4)
                            {                //如果类型数据接收完毕,判断类型
                        if(cmd[0]=='G')
                                {
                            if(cmd[1]=='P')
                                    {
                                if(cmd[2]=='R')
                                        {
                                    if(cmd[3]=='M')
                                            {
                                        if(cmd[4]=='C')
                                                {
                                            cmd_number=4;
                                            mode=2;
                                            seg_count=0;
                                            byte_count=0;
                                                }
                                            }
                             
                                        }
                                
                                       
                            }
                        }
                    }
                }
                else if(mode==2)
                        {
                    //接收数据处理
                    switch (cmd_number)
                    {
                        
                        case 4:                //类型3数据接收。GPRMC
                            switch(seg_count)
                            {
                                case 1:
                                    if(byte_count<6)
                                            {                //时间处理
                                        time[byte_count]=tmp;   
                                            }
                                        break;
                                                                case 2:                                //定位判断A or V
                                    if(byte_count<1)
                                            {
                                        state=tmp;
                                            }
                                                                case 3:                                //纬度处理
                                    if(byte_count<9)
                                            {
                                        wd[byte_count]=tmp;
                                            }
                                    break;
                                                                case 4:                                //纬度方向处理
                                    if(byte_count<1)
                                            {
                                        wd_fx=tmp;
                                            }
                                    break;
                                                                case 5:                                //经度处理
                                    if(byte_count<10)
                                            {
                                        jd[byte_count]=tmp;
                                            }
                                    break;
                                                                case 6:                                //经度方向处理
                                    if(byte_count<1)
                                            {
                                        jd_fx=tmp;
                                            }
                                    break;
                                                                case 9:                                //日期处理
                                    
                                   if(byte_count<6)
                                            {
                                     date[byte_count]=tmp;
                                            }        }
                            break;
                    }
                }
                byte_count++;        //接收数位加1
                break;
        }
    }
    //RI=0;
}

void main(void)
{
    uchar i;
    char Bhour;
    sys_init();
    while(1)
    {
         if(buf_full==0)                //无GPS信号时
        {
            dsp_count++;
            if(dsp_count>=65000)         //等待30秒无信号 显示
                    {
                ClrScreen();            //清屏
                PutString(0x00,0x00,"No GPS connect..");  【如果没有GPS信号应该显示那串英文字符串,但我的液晶上什么也不显示,就只有背光亮着,所以下面的程序液晶也是更没能显示。希望大侠帮帮忙研究下。】
                while(buf_full==0);
                ClrScreen();   
                dsp_count=0;
                    }
        }
        else if(state=='V')                           //GPRMC语句
              {                                    //如果未定位
                                         ClrScreen();
                   PutString(0x10,0x00,"No Positioning");
                   //ClrScreen();                  
              }
            else
              {                            //如果已定位
                   if(jd_fx=='E')
                                    {
                                   PutString_cn(0x00,0x20,"东经");
                                    }
                                   else if(wd_fx=='W')
                                    {
                                   PutString_cn(0x00,0x20,"西经");         //第三行显示经度信息
                                    }
                   for(i=0;i<3;i++)
                   {
                   PutChar(0x20+(i*8),0x20,jd);
                   }
                   PutChar(0x38,0x20,'.');
                   for(i=3;i<10;i++)
                   {
                   PutChar(0x40+(i*8),0x20,jd);
                   }
                                   if(wd_fx=='N')
                                    {
                                   PutString_cn(0x00,0x30,"北纬");         //第四行显示纬度信息
                                    }
                                   else if(wd_fx=='S')
                                    {
                                   PutString_cn(0x00,0x30,"南纬");
                                    }
                   for(i=0;i<2;i++)
                   {
                   PutChar(0x30+(i*8),0x30,wd);
                   }            
                   PutChar(0x40,0x30,'.');
                   for(i=2;i<9;i++)
                   {
                   PutChar(0x50+(i*8),0x30,wd);
                   }
                   PutString_cn(0x00,0x00,"日期");        //日期2011-05-24
                   PutString_cn(0x30,0x00,"20");
                                   PutChar(0x40,0x00,date[4]);
                                   PutChar(0x48,0x00,date[5]);
                                   PutChar(0x50,0x00,'-');
                   PutChar(0x58,0x00,date[2]);
                   PutChar(0x60,0x00,date[3]);
                                   PutChar(0x68,0x00,'-');
                                   PutChar(0x70,0x00,date[0]);
                                   PutChar(0x78,0x00,date[1]);
                                  
                                   Bhour=((time[0]-0x30)*10+time[1]-0x30)+TIME_AREA;
                    if(Bhour>=24)
                    {
                        Bhour-=24;
                    }
                    else if(Bhour<0)
                    {
                        Bhour+=24;
                    }
                    PutString_cn(0x00,0x10,"时间");        
                    PutChar(0x20,0x10,Bhour/10+0x30);
                    PutChar(0x28,0x10,Bhour%10+0x30);
                    PutChar(0x30,0x10,':');
                    PutChar(0x38,0x10,time[2]);
                    PutChar(0x40,0x10,time[3]);
                    PutChar(0x48,0x10,':');
                    PutChar(0x50,0x10,time[4]);
                    PutChar(0x58,0x10,time[5]);

                }
                    
                  
            dsp_count=0;
         }
}







程序我自己又检查了遍,,改动了点地方,已经没什么大问题,,但最关键的是在我的液晶上显示一条条的波纹,内容什么都没有,,不知道这跟液晶有什么关系,,对液晶有什么要求,希望明白的回个贴。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-5 04:29

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

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