野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13587|回复: 22

RTC时钟显示在液晶上

[复制链接]
发表于 2015-2-24 16:55:03 | 显示全部楼层 |阅读模式
本帖最后由 11kxmx 于 2015-2-24 17:00 编辑

我想通过修改例程RTC实时时钟,使其显示在液晶屏上 结果越编译 错误越多 
思路是这样的:在主程序最前面加   LCD_Init();
在 其原有语句Time_Show(&systmtime)后面加
   LCD_DisNum(100, 50, systmtime.tm_year,WHITE);
   LCD_DisNum(100,100, systmtime.tm_mon,WHITE);
 .....或 LCD_DispChar()等语句
但编译 提示这某个函数未定义 最后不断添加新的文件和编译路径 一个错误消除了 带来更多错误 
好象是汉字显示函数惹的祸 由于 LCD_DisNum()函数的源文件中有函数GetGBKCode_from_sd(buffer,pstr);  /* 取字模数据 */
这个函数又要读SD卡 于是又牵出一大堆 SD卡操作的函数 还用到文件系统 还有许多中断配置 最后编译还是有好多结构体未定义
DMA也用上了 SDIO也用上了 文件夹套文件夹  源文件套头文件 头文件套源文件 真乱套了! 
哪位大侠有成功的例子和较清的思路,请提出指导,多谢了! 
回复

使用道具 举报

 楼主| 发表于 2015-2-25 15:10:05 | 显示全部楼层
Time_Show(&systmtime)是一个死循环,LCD显示函数不能加在它后面,必须加在它里面
回复 支持 反对

使用道具 举报

发表于 2015-2-26 09:18:57 | 显示全部楼层
11kxmx 发表于 2015-2-25 15:10
Time_Show(&systmtime)是一个死循环,LCD显示函数不能加在它后面,必须加在它里面

液晶显示函数可以加在  打印时间 的代码 后面
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-27 09:47:29 | 显示全部楼层
fire 发表于 2015-2-26 09:18
液晶显示函数可以加在  打印时间 的代码 后面

是的,我试过了 基本成功
就是字太小 也不能显示汉字
回复 支持 反对

使用道具 举报

发表于 2015-3-3 19:37:56 | 显示全部楼层
我弄过。。。。字大小就用自己生成的字模。。。汉字得专门用一个函数,还有字库。。。我现在有的问题是,程序调试好用之后,,断电再上电,就不显示了,,,楼主有这种情况吗???
回复 支持 反对

使用道具 举报

发表于 2015-3-4 09:39:12 | 显示全部楼层
w7159 发表于 2015-3-3 19:37
我弄过。。。。字大小就用自己生成的字模。。。汉字得专门用一个函数,还有字库。。。我现在有的问题是,程 ...

放电池了吗
回复 支持 反对

使用道具 举报

发表于 2015-3-4 13:06:15 | 显示全部楼层

电池不是只跟RTC有关的麼。。。我断电之后上电,液晶啥的都没反应了。。。
回复 支持 反对

使用道具 举报

发表于 2015-3-4 13:53:33 | 显示全部楼层
w7159 发表于 2015-3-4 13:06
电池不是只跟RTC有关的麼。。。我断电之后上电,液晶啥的都没反应了。。。

看程序怎么写的咯~   如果RTC获取不到数据,液晶显示什么呢?   又或者说RTC重新上电后是不是有一段通过串口设置时间的代码要跑?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-9 15:58:25 | 显示全部楼层
本帖最后由 11kxmx 于 2015-4-29 10:58 编辑
w7159 发表于 2015-3-3 19:37
我弄过。。。。字大小就用自己生成的字模。。。汉字得专门用一个函数,还有字库。。。我现在有的问题是,程 ...


确实如其他朋友所说,RTC没电池的话,再次上电,程序会停在要求你输入当前年月日和时间的程序上,有好几个死循环,不设置完就不会执行下一步,用串口助手可以看到,液晶虽已初始化,但是确实什么也显示不了
回复 支持 反对

使用道具 举报

发表于 2015-5-3 21:27:47 | 显示全部楼层
11kxmx 发表于 2015-2-27 09:47
是的,我试过了 基本成功
就是字太小 也不能显示汉字

你好 我也想实现RTC显示在LCD上 可是一直不成功。。能不能把程序发给我啊 QQ  3827237  谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-4 08:31:24 | 显示全部楼层
本帖最后由 11kxmx 于 2015-5-4 08:32 编辑
jessejiang 发表于 2015-5-3 21:27
你好 我也想实现RTC显示在LCD上 可是一直不成功。。能不能把程序发给我啊 QQ  3827237  谢谢


不加汉字显示的话,很简单 主程序中加 LCD_Init();
当然要添加液晶驱动的源文件和头文件及其编译路径
RTC.C的子函数Time_Display(uint32_t TimeVar,struct rtc_time *tm)中加LCD显示函数
主程序
int main()
{   
    LCD_Init();
   LCD_Clear(0,0,240,320, RED);
    /* 配置RTC秒中断优先级 */
   RTC_NVIC_Config();  
   USART1_Config();
   RTC_CheckAndConfig(&systmtime);
  /* Display time in infinite loop */
   Time_Show(&systmtime);
  }

Time_Display中新增语句示例
printf(" UNIX时间戳 = %d 当前时间为: %d年(%s年) %d月 %d日 (星期%s)  %0.2d:%0.2d:%0.2d\r",TimeVar,
                     tm->tm_year, zodiac_sign[(tm->tm_year-3)%12], tm->tm_mon, tm->tm_mday,
                     WEEK_STR[tm->tm_wday], tm->tm_hour,
                     tm->tm_min, tm->tm_sec);
      LCD_DisNum(0, 50, tm->tm_year, WHITE);//显示公历年   
     LCD_DisNum(100, 50, tm->tm_mon, WHITE);//显示公历月      
      LCD_DisNum3216(170, 50,  tm->tm_mday, WHITE);//显示公历日
      

回复 支持 0 反对 2

使用道具 举报

发表于 2015-5-4 10:01:25 | 显示全部楼层
11kxmx 发表于 2015-5-4 08:31
不加汉字显示的话,很简单 主程序中加 LCD_Init();
当然要添加液晶驱动的源文件和头文件及其编译路径 ...

看懂了 谢谢
回复 支持 反对

使用道具 举报

发表于 2015-12-19 19:55:33 | 显示全部楼层
请问 LCD_DisNum()这个函数要自己定义的吗?
回复 支持 反对

使用道具 举报

发表于 2015-12-19 20:11:31 | 显示全部楼层
看来这个地方的确有点绕疼啊。哈哈。
回复 支持 反对

使用道具 举报

发表于 2015-12-19 20:12:56 | 显示全部楼层
w7159 发表于 2015-3-3 19:37
我弄过。。。。字大小就用自己生成的字模。。。汉字得专门用一个函数,还有字库。。。我现在有的问题是,程 ...

你是不是用systick了?将lcd_init写在它之前
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-22 22:41:26 | 显示全部楼层
本帖最后由 11kxmx 于 2015-12-22 23:00 编辑
小旭旭 发表于 2015-12-19 20:12
你是不是用systick了?将lcd_init写在它之前

用systick干什么,实时时钟有它的脉冲源 LCD_Init();加主程序最前面        
把LCD显示语句加在
Time_Display(uint32_t TimeVar,struct rtc_time *tm)里面

比较 长,因汉字是一个个分散显示的
部分语句如下:
printf(" UNIX时间戳 = %d 当前时间为: %dÄê(%sÄê) %dÔÂ %dèÕ (DÇÆú%s)  %0.2d:%0.2d:%0.2d\r",TimeVar,
                            tm->tm_year, zodiac_sign[(tm->tm_year-3)%12], tm->tm_mon, tm->tm_mday,
                            WEEK_STR[tm->tm_wday], tm->tm_hour,
                            tm->tm_min, tm->tm_sec);//粘贴板复制后就乱码
                    LCD_DisNum3216(0, 50, tm->tm_year, WHITE);//公历年
                    LCD_Disphanzi(65, 50,0,WHITE); //汉字"年"编号为0
                          LCD_DisNum3216(100, 50, tm->tm_mon, WHITE);//公历月
                    LCD_Disphanzi(135, 50,1,WHITE); //汉字"月"编号为1
                    LCD_DisNum3216(170, 50,  tm->tm_mday, WHITE);//公历日
                     LCD_Disphanzi(205, 50,2,WHITE); //"日"编号为2
                    没用字库,少量汉字字模直接以表格的形式写入程序中


回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-22 23:04:12 | 显示全部楼层
mcsailam 发表于 2015-12-19 19:55
请问 LCD_DisNum()这个函数要自己定义的吗?

这个函数LCD显示程序里有,不过我嫌其字太小,后来以写了16*32的数字显示函数
回复 支持 反对

使用道具 举报

发表于 2015-12-23 08:35:22 | 显示全部楼层
11kxmx 发表于 2015-12-22 23:04
这个函数LCD显示程序里有,不过我嫌其字太小,后来以写了16*32的数字显示函数

使用sprintf函数把数字转成字符串,然后调用汉字显示函数就可以了
回复 支持 反对

使用道具 举报

发表于 2015-12-29 14:45:35 | 显示全部楼层
mcsailam 发表于 2015-12-19 19:55
请问 LCD_DisNum()这个函数要自己定义的吗?

火哥液晶显示例程有
回复 支持 反对

使用道具 举报

发表于 2016-5-3 13:14:10 | 显示全部楼层
chaoge131 发表于 2015-12-29 14:45
火哥液晶显示例程有

在那里?为什么我找不到
回复 支持 反对

使用道具 举报

发表于 2016-5-5 20:02:58 | 显示全部楼层
RTC_CheckAndConfig(&systmtime);
                 if (TimeDisplay == 1)
            {
                               
              Time_Display( RTC_GetCounter(),&systmtime);                   
              TimeDisplay = 0;
            }
例程中有个while死循环,你把它改成上面这样就可以显示了
回复 支持 反对

使用道具 举报

发表于 2016-8-16 14:26:01 | 显示全部楼层
945994099@qq.com能不能给我一份你的例程 我也在学这个东西一直没有调试出来  ,  对了 上面说的那个断电之后为什么液晶就不会显示数据了搞不清   能不能给说一下 感激不尽
回复 支持 反对

使用道具 举报

发表于 2017-1-9 16:59:28 | 显示全部楼层
求大神分享一下源代码,正在学习中,谢谢了  346736077@qq.com
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-14 04:05 , Processed in 0.036614 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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