一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2643|回复: 21
收起左侧

[51单片机] 做了一个GPS授时实验,发现日期显示莫名其妙的变化。

[复制链接]
发表于 2015-8-18 16:11 | 显示全部楼层 |阅读模式
本帖最后由 qduwg 于 2015-8-19 09:21 编辑

今天从本论坛找了一个GPS授时C程序,是在LCD1602上显示时间日期的。我一看,跟我的开发板基本差不多。我就稍微改动一下,下载到我的板子上了。
发现时间是可以正常显示的。可是日期,出现问题了。年份和秒的两位,不断重复显示24这个数。好奇怪了。不知道哪里的问题。

源码附上:
http://pan.baidu.com/s/1sjOKeSH

原代码思路是把第八个逗号后面的数据保存到date[]数组内的。

    if(dhcount==8) //逗号计数到8,后面的是日期数据
    {date[i ] = ch;   //保存到数组元素
    i++;
    }


数组显示代码如下:



                          nian=(date[4]-0x30)*10+(date[5]-0x30);  //把年份取出改为十进制
              yue=(date[2]-0x30)*10+(date[3]-0x30);
              ri=(date[0]-0x30)*10+(date[1]-0x30);
               
              LCD_xianshiZIFU("20",0,1);  //显示20
              LCD_xianshi(nian,2,1);  //显示年份
                          LCD_xianshiZIFU("-",4,1); //显示“-”号
              LCD_xianshi(yue,5,1);
              LCD_xianshiZIFU("-",7,1);
              LCD_xianshi(ri,8,1);
仔细看了看,没有可以修改date[]数组的地方啊。怎么会发生这样的问题?






发表于 2015-8-18 16:43 | 显示全部楼层
本帖最后由 40560335 于 2015-8-18 16:52 编辑

上次优信买了几片3.3V的12864,用SPI控制,问题跟你这个类似,在已经有显示的地方,随机性的显示错误的字符,换以前的5V屏,换了3个都正常,后来百度了下,看到有人说延迟稍微长点就OK了,发送显示数据太快导致。
 楼主| 发表于 2015-8-18 16:46 | 显示全部楼层
40560335 发表于 2015-8-18 16:43
上次优信买了个3.3V的12864,问题跟你这个类似,在已经有显示的地方,随机性的显示错误的字符,换以前的5V ...

这样啊。是因为没有延迟造成的啊?我试试,加上延迟时间看看。
发表于 2015-8-18 16:59 | 显示全部楼层
qduwg 发表于 2015-8-18 16:46
这样啊。是因为没有延迟造成的啊?我试试,加上延迟时间看看。

把你1602显示的头文件贴上来看看!~
 楼主| 发表于 2015-8-18 17:02 | 显示全部楼层
这个是显示函数。不知道在哪里加延迟?
void LCD_xianshi(uint xian,uint X,uint Y)          
{  
   //xie_LCDcom(0x01);       
   xie_LCDcom(0x0c);       
   
   //bai=xian/100%10;
   shi=xian/10%10;
   ge=xian%10;
   xie_LCDcom(0x80+X+Y*0x40);
       
   //xie_LCDdata(shuju[qian]);
   //xie_LCDcom(0x80+X+1+Y*0x40);
   //xie_LCDdata(shuju[bai]);
   // ys(1);
   // xie_LCDcom(0x80+X+2+Y*0x40);
   xie_LCDdata(shuju[shi]);
   //xie_LCDcom(0x80+X+3+Y*0x40);
   xie_LCDdata(shuju[ge]);
   }
发表于 2015-8-18 17:08 | 显示全部楼层
本帖最后由 40560335 于 2015-8-18 17:10 编辑
qduwg 发表于 2015-8-18 17:02
这个是显示函数。不知道在哪里加延迟?
void LCD_xianshi(uint xian,uint X,uint Y)         
{  

还有一种可能是中断导致的,具体你调试下就知道了,把2015的15位置放入固定的字符串试试,看看还会不会变。

              像这样:
              LCD_xianshiZIFU("20",0,1);  //显示20
              
LCD_xianshiZIFU("16",2,1);  //显示16
 楼主| 发表于 2015-8-18 17:08 | 显示全部楼层
我在主函数里面的显示函数后加了延时,好像不管用。
 楼主| 发表于 2015-8-18 17:10 | 显示全部楼层
40560335 发表于 2015-8-18 17:08
还有一种可能是中断导致的,具体你调试下就知道了,把2015的15位置放入固定的字符串试试,看看还会不会变 ...

加上固定的字符,肯定不会变了。没有意义了啊。
发表于 2015-8-18 17:11 | 显示全部楼层
本帖最后由 40560335 于 2015-8-18 17:13 编辑
qduwg 发表于 2015-8-18 17:10
加上固定的字符,肯定不会变了。没有意义了啊。

试试呗,要不为啥说是调试呢,你看你的视频,还在显示2024:47:38呢!~
 楼主| 发表于 2015-8-18 17:21 | 显示全部楼层
40560335 发表于 2015-8-18 17:11
试试呗,要不为啥说是调试呢,你看你的视频,还在显示2024:47:38呢!~

已经试了,改成固定的,不会受到影响。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-7 08:07 , Processed in 0.068662 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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