OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8475|回复: 6

求单片机接收GPS模块定位数据信息并显示在LCD1602上的程序,有谁可以帮下忙啊,可以支付酬劳!

[复制链接]

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-4-21
在线时间
0 小时
发表于 2014-5-11 22:22:25 | 显示全部楼层 |阅读模式
5金钱
本人编写的程序不能显示1602肯定是没有问题的,就是单片机收不到数据,所以显示不了,这块实在是弄不了,有哪个大神可以帮下忙?
本人可以支付酬劳的!

最佳答案

查看完整内容[请看2#楼]

=。=!! 1602的驱动和原子的屏驱动都是用IBM的8080总线呀,只不过一个是8位的,一个是16位的。你主要找到两行的地址改一下就能用了。但注意通信频率要降下来。有些LCD两行的地址都有些不同的。 我以前都用1602,后来就越来越大,然后是1604,再然后是12864................我有一些以前的代码,但是是配STC的片片用的,你将就看 一下吧。 #include < STC12C5A60s2.h > #include < intrins.h ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
发表于 2014-5-11 22:22:26 | 显示全部楼层
=。=!!

1602的驱动和原子的屏驱动都是用IBM的8080总线呀,只不过一个是8位的,一个是16位的。你主要找到两行的地址改一下就能用了。但注意通信频率要降下来。有些LCD两行的地址都有些不同的。
我以前都用1602,后来就越来越大,然后是1604,再然后是12864................我有一些以前的代码,但是是配STC的片片用的,你将就看 一下吧。

#include < STC12C5A60s2.h >
#include < intrins.h >

#define uchar unsigned char
#define uint    unsigned int

sbit DQ = 3^3 ;    //定义DS18B20端口DQ  

sbit LCD_RS = 3^6 ;             
sbit LCD_RW = 3^7 ;
sbit LCD_EN = 4^0 ;
sbit Buzz=P3^5;

bit presence    ;
//                         0   1      2 3  4  5   6 7 8   9 10
uchar code cdis[20][17]={{"A) rinting     "},{"C) Manual Adj.  "},{"RLMotor Working "},{"SVMotor Working "},{"    rinting    "},{"   Setup  Menu   "},{"   Data Saved   "},{"Hight Sense ADj."},{"ulse:          "},{"                "},{"                   "},
// 11 12 13    14  15   16  17    18 19  
{"   Save Data?  "},{"  A)Yes   B)No  "},{"Material Ticknes"},{"  --- Quit ---  "},{"Front Offset Adj"},{"  H Hight ADj. "},{"rint Delay ADj."},{" Data  Saved!!! "},{"D)  Exit Menu   "}};

//          0                   1                      2  3   4    5    6 7    8    9   10 11
uchar code cdis_add[20][17]={{"                "},{" wait for Order "},{" rinting  Done "},{"O) Continue     "},{"   Hight  set   "},{"     Manual     "},{"Printing Standby"},{" Printing  Done "},{"D) Exit Menu    "},{"B) Setup Menu   "},{"--Front Moving--"},{"--Back  Moving--"}
//  12 13 14  15  16    17 18  19
,{"-- Up  Moving --"},{"--Down  Moving--"},{"B) My  Position "},{"C) Home Way Stup"},{"D) -- Recess -- "},{" D) For Get Up  "},{" --Change  to-- "},{"O)     Quit     "}};



extern uchar IRCOM[4];

#define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ;

void IR_init(void);
void delay_ms(uint n);



/*******************************************************************/
void delay1(int ms)
{
unsigned char y ;
    while(ms--)
{
    for(y = 0 ; y<250 ; y++)
    {
     _nop_() ;
     _nop_() ;
     _nop_() ;
     _nop_() ;
    }
}
}

/******************************************************************/
/*检查LCD忙状态                                                     */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。     */
/******************************************************************/ 
bit lcd_busy()
{                          
      bit result ;
      LCD_RS = 0 ;
      LCD_RW = 1 ;
      LCD_EN = 1 ;
      delayNOP() ;
      result = (bit)(P2&0x80) ;
      LCD_EN = 0 ;
      return(result) ; 
}

/*写指令数据到LCD                                                    */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。            */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{                          
     while(lcd_busy()) ;
      LCD_RS = 0 ;
      LCD_RW = 0 ;
      LCD_EN = 0 ;
      _nop_() ;
      _nop_() ; 
      P2 = cmd ;
      delayNOP() ;
      LCD_EN = 1 ;
      delayNOP() ;
      LCD_EN = 0 ;  
}

/*******************************************************************/
/*写显示数据到LCD                              */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。         */
/*******************************************************************/
void lcd_wdat(uchar dat)
{                          
     while(lcd_busy()) ;
      LCD_RS = 1 ;
      LCD_RW = 0 ;
      LCD_EN = 0 ;
      P2 = dat ;
      delayNOP() ;
      LCD_EN = 1 ;
      delayNOP() ;
      LCD_EN = 0 ; 
}


/*    LCD初始化设定                                                    */
/*******************************************************************/
void lcd_init()

      delay1(50) ;   
      lcd_wcmd(0x01) ;        //清除LCD的显示内容            
      lcd_wcmd(0x38) ;        //16*2显示,5*7点阵,8位数据
      delay1(50) ;
      lcd_wcmd(0x38) ;         
      delay1(50) ;
      lcd_wcmd(0x38) ;         
      delay1(50) ;

      lcd_wcmd(0x0c) ;        //显示开,关光标
      delay1(50) ;
      lcd_wcmd(0x06) ;        //移动光标
      delay1(50) ;
      lcd_wcmd(0x01) ;        //清除LCD的显示内容
      delay1(50) ;


}

/*    设定显示位置                                      */
/*******************************************************************/
void lcd_pos(uchar pos)
{                          
//    if(pos<15)
lcd_wcmd(pos | 0x80) ;    //数据指针=80+地址变量
// else
// lcd_wcmd((pos-15) | 0xc0) ;  
}

 
//*********************************************************************/


void  lcd_show(uchar A,uchar b,uchar c) //

 uchar i,j;
 if ((A>20)&(A<99))
   {
 lcd_pos(b);
 delay_ms(5);
     for (i=0;i<A-20;i++)
   {
     lcd_wdat(c);
 delay_ms(5);
   }
   }

 if (A><20)
   {
    i=0;
    lcd_pos(b);
    delay_ms(5);
    while(cdis[A] != '\0')//
     {                           //显示字符 void 
   lcd_wdat(cdis[A]) ;
   delay_ms(5);
   i++ ;
     }
    i=0;
   }



  if (A>100)
   {
    i=0,j=0;
j=A-100;
    lcd_pos(b);
    delay_ms(5);
    while(cdis_add[j] != '\0')//
     {                           //显示字符 void 
   lcd_wdat(cdis_add[j]) ;
   delay_ms(5);
   i++ ;
     }
    i=0;
   }

}
我的工作就是天天在玩
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-11 22:33:27 | 显示全部楼层
论坛貌似有人发过。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-12 08:19:46 | 显示全部楼层
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-4-21
在线时间
0 小时
 楼主| 发表于 2014-5-12 16:29:39 | 显示全部楼层
回复【3楼】chinafox:
---------------------------------
我LCD1602显示应该是没有问题 主要就是串口接收并解码NMEA0183的协议这个部分不会,要不然单片机也不可能收不到数据。
回复

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
发表于 2014-5-13 00:39:49 | 显示全部楼层
那得找到指令手册了
我的工作就是天天在玩
回复

使用道具 举报

0

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
370
金钱
370
注册时间
2014-3-5
在线时间
65 小时
发表于 2014-5-13 17:11:21 | 显示全部楼层
回复【5楼】huangchangfen:
---------------------------------
应该可以用USB转串口线直接把GPS模块连接到笔记本的USB口,然后在笔记本上用串口调试助手查看GPS发送出来的报文数据格式,再根据实际的格式用有限状态机的方法编写GPS报文解析函数,提取想要的数据。
急不来总有障碍客观的存在...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 02:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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