论坛风格切换切换到宽版
  • 67516阅读
  • 338回复

GPS OEM板+单片机+液晶显示 [复制链接]

上一主题 下一主题
在线BG4UVR
发帖
11287
只看该作者 300楼 发表于: 2007-12-19
'
http://www.hellocq.net/forum/showthread.php?t=139534&page=8&pp=30
第8页的bg4uvr的程序,感觉有点不妥!
//串口接收中断
void uart(void) interrupt 4
{
       unsigned char tmp;
       if(ri){
       ......
       }
       ri=0;
}
如果发生了中断,但是ri=0,if语句中的代码不执行,恰好此时ri=1,最后ri被清0,就回丢数据。可能作者的程序不会发生这种情况,但是从严谨的角度出发,
应该为:
//串口接收中断
void uart(void) interrupt 4
{
       unsigned char tmp;
       if(ri){
       ......
       ri=0;
       }      
}
'

程序中未用串口发送,那么当串口产生中断时,一定是接收中断,所以ri必然是1的。像你所说的“发了中断,但是ri=0”这种情况,我认为是不可能存在的。欢迎交流,共同提高。

第8页的代码是比较早以前写的了,后来在avr上重新写过几次gps的代码,发现当时这个在51下写的代码还是存在比较多的不足的。
离线wb4916
发帖
213
只看该作者 301楼 发表于: 2007-12-25
你也许不知道,新手会以你的程序为摸板来完成自己的功能!

第一个程序没有问题,我写的:
//11.0592mhz 4800波特率
//如果接收到$,亮灯指示

#include <at89x52.h>

#define uchar unsigned char     // one byte
sbit leddisplay = p2^0;

void main(void)
{
  uchar temp;
   
  scon = 0x50;   //串口方式1,允许接收
 
  tmod = 0x20;   //定时器1定时方式2
 
  //tcon = 0x40;   //设定时器1开始计数
 
  th1 = 0xfa;   //11.0592mhz 4800波特率
  tl1 = 0xfa;
 
  tr1 = 1;     //启动定时器
 
  p2 = 0x00;
 
  while(1)
  {
    if(ri)     //接受中断处理
    {
        temp = sbuf;
        if('$' == temp)
        //if(65 == temp)   //!!!!不能够为"a",字符串
          leddisplay = !leddisplay;   //逻辑非
       
        p1 = ~temp;   //按位非
        ri = 0;
    }
  }
}


第二个是依照你的程序改写的,害死我,最后是别人帮助我找到问题的。虽然用在自己的情况可能没有问题,但是还是要注意严谨!!

//11.0592mhz 4800波特率
//如果接收到$,亮灯指示
//判断是接收到a 有效定位,还是v 无效定位

#include <at89x52.h>

#define uchar unsigned char     // one byte
sbit leddisplay = p2^0;

void main(void)
{
  uchar temp;
  uchar snmea[79] = {0};   //加上“$”和“cr/lf”,每句最到有80个字符。
  uchar i = 0;
  uchar flag = 0;
   
  scon = 0x50;   //串口方式1,允许接收
 
  tmod = 0x20;   //定时器1定时方式2
 
  //tcon = 0x40;   //设定时器1开始计数
 
  th1 = 0xfa;   //11.0592mhz 4800波特率
  tl1 = 0xfa;
 
  tr1 = 1;     //启动定时器
 
  //p2 = 0x00;
 
  while(1)
  {
    if(ri)
    {
        temp = sbuf;
        if('$'==temp)
          flag = 1;
       
        if(1==flag)
          snmea[i++] = temp;
       
        if(13==temp)
        {
          if('c'==snmea[4])
            if('v'==snmea[17])
                leddisplay = !leddisplay;   //逻辑非
               
          flag = 0;
          i = 0;
        }
    }
    ri=0;
  }
}

附件为这2个程序的压缩包:
附件: GPS.zip (0 K) 下载次数:120
在线BG4UVR
发帖
11287
只看该作者 302楼 发表于: 2007-12-25
粗看了一下你的代码,发现你的代码和我的有个非常重要的区别。就是我的代码,这些处理是放在中断中的,而你的代码,是在主程序中反复查询ri——这也是你产生你所说的情况的最主要的原因。
离线bd7rf
发帖
10148
只看该作者 303楼 发表于: 2007-12-25
'
我的mail:wb4916@sohu.com
skype:wb4916
你的呢?欢迎交流!
现在更改存储到u盘为存储到sd卡,使用spi模式,正在研究ing!初始化命令通过了,正在研究fat文件系统。
'
我的单片机水平不高,请多多关照。
离线FMer
发帖
2549
只看该作者 304楼 发表于: 2007-12-25
那个谁的程序写的实在太糟糕了.
在线BG4UVR
发帖
11287
只看该作者 305楼 发表于: 2007-12-26
'
那个谁的程序写的实在太糟糕了.
'

不要这样说嘛,你找下你刚学的时候写的代码看看
离线ding
发帖
3488
只看该作者 306楼 发表于: 2008-01-03
'
想做一个练习板,检验自己学习8051的水准!!
通过stc89c54rd+采集gps模块的数据,在1602上面显示,并存取在u盘(使用ch375a)。
由于是想记录自己出游时走过的路(同事起名:记录人生轨迹),必须考虑供电问题。2节镍氢电池(1.8v-2.4v,可能耗电较大,升压ic比较难找。等待pt1302早日设计出来!!)/锂电池升压为5v。估计这样功耗较大,可能的话,告诉我节能的方法!记录数据是最重要的,但是至少要记录7天12小时的(每秒一次)。希望大家能够提供帮助,谢谢!!
'
你想做一个车辆监控器呀?!还是做私家警查呀。我晕
离线ding
发帖
3488
只看该作者 307楼 发表于: 2008-01-03
今年又重新来做了。。。
先顶起来再说!
离线dzyj
发帖
2277
只看该作者 308楼 发表于: 2008-01-04
这个挺好玩的,俺做了.
离线峰回路转
发帖
584
只看该作者 309楼 发表于: 2008-01-15
昨晚看完。今天现在实验板上测试一下。然后用2051做了一个呵呵有意思。。成功。。很好很强大
离线vvipi_new
发帖
36
只看该作者 310楼 发表于: 2008-01-20
请问各位大虾,gps驯服晶振是怎么一回事?
离线wb4916
发帖
213
只看该作者 311楼 发表于: 2008-01-20
'
你想做一个车辆监控器呀?!还是做私家警查呀。我晕 [表情]
'

记录数据是最重要的,但是至少要记录7天12小时的(每秒一次)

喜欢爬野山。那些山都没有地图的。特别是深圳的七娘山,昨天上山,在大雁顶突然碰到大雾了!!如果不记得路,肯定迷路。于是就想先采集一些山路的诡计,然后用它来导航!由于现在绝大部分的gps导航仪是为汽车开发的!

http://auction1.taobao.com/auction/0/item_detail-0db1-8b1dc4fa768cb1b8f86d145449c0c51a.jhtml

双钻美国原装正品 garmin gpsmap 60csx高明手持gps 元旦特价
一 口 价:2880.00元

存储指标
航 点:500个
航 线:50条,每条航线可加入250个航点。
航 迹:可连续记录10000个航迹点,并可另存20条包含500个航迹点的航迹
地图内存:64m(仅gps map60)


现在51读写sd卡基本搞定。在研究gps模块发出的nmea数据。
最后给她接个屏幕,就完美了!!
2880¥以内能够完成,我就赚了。希望有人能够提供51驱动lcd的帮助!

打算使用以下lcd。nokia 5110

手机液晶
http://www.hellocq.net/forum/showthread-t-166757.%ca%d6%bb%fa%d2%ba%be%a7.html





已经结案:
自制gps轨迹记录仪!
http://www.hellocq.net/forum/showthread.php?p=1999039#post1999039
离线bd7rf
发帖
10148
只看该作者 312楼 发表于: 2008-02-10
'
希望有人能够提供51驱动lcd的帮助!
'
不难啊,用什么屏?
离线lulei
发帖
47
只看该作者 313楼 发表于: 2008-02-22
我也正在做GPS
交流一下 qq77257067
email:luleiwoaini2008@163.com
离线hampig
发帖
33480
只看该作者 314楼 发表于: 2008-02-29
'
不难啊,用什么屏?
'

哈哈
有门
同求
哈哈
89s52+1602的lcd
谢谢拉
求hex文件
包括原代码
离线bd7rf
发帖
10148
只看该作者 315楼 发表于: 2008-02-29
'
哈哈
有门
同求
哈哈
89s52+1602的lcd
谢谢拉
求hex文件
包括原代码 [表情]
'
先做第一步吧,把lcd驱动起来就完成大半了。
离线bg4tvk
发帖
548
只看该作者 316楼 发表于: 2008-02-29
=你们的gps套件
离线hampig
发帖
33480
只看该作者 317楼 发表于: 2008-02-29
'
先做第一步吧,把lcd驱动起来就完成大半了。
'

谢谢您啦
这里有不少菜鸟
刚看到门
呵呵
目前只会把hex烧到片子里
比如我
呵呵
所以非常感谢您们这些前辈的帮助
离线eightyjake
只看该作者 318楼 发表于: 2008-04-24
我照原理图上做了一个2051+1602显示gps信息的。怎么显示的速度只有正常速度的一半。比如车速在60km/h,单片机上只显示30km/h
在线BG4UVR
发帖
11287
只看该作者 319楼 发表于: 2008-04-24
'
我照原理图上做了一个2051+1602显示gps信息的。怎么显示的速度只有正常速度的一半。比如车速在60km/h,单片机上只显示30km/h
'

代码存在错误,没有改正,把gps输出的英制速度单位按公制算了。