原创 LPC2134学习日志(二)-- LCD12864时钟

2011-5-27 14:12 5327 11 11 分类: MCU/ 嵌入式

rar.gifSRC.rar(压缩包里面有源代码与工程文件)

这两个星期貌似有点忙,弄的懒猫身心疲惫,甚至有时忍不住竟对别人发了火,这一点懒猫很抱歉,在此说一对不起,希望你们能谅解。好了,再忙,懒猫也得抽空学点东东,还是那句老话,学如行舟,不进则退,懒猫虽爱飞,但还没有学会飞,所以为了懒猫能周游世界的梦想,懒猫一定要好好奋斗再好好奋斗!

嗯,好了,不费话,这几天抽空在上篇日志的基础上写,又添加了点东东,做了个实时时钟,当然功能还不全,还没有调时间的功能,还没有定时的功能,LCD12864上也没有添加菜单的功能……反正这个是最简单的实时时钟,主要就是学习一下LPC2134内部的RTC,程序虽然能运行,但是在仿真时出了点小BUG,就是秒值3秒钟才更新一次,这一点让懒猫很郁闷,找了良久也没有找出原因,不过懒猫并未放弃,还是一直找下去,直到把它消灭到,如果你写过这方面的程序,也可以指导一下懒猫,懒猫不胜感激,在此深表感谢。

好了,下面给出这次仿真用的接口示意图,再强调一下,这个只是在proteus中仿真用的,不能用于实际焊接:

sch.bmp

1-1 仿真电路图

由于这个实时时钟是在上一篇日志《LPC2134学习日志 学习使用LCD12864》有基础上更改的,所以只添加了Clock.hClock.c这两个文件,这样添加的好处是模块化编程,但时用不到,可以直接删除,模板可以不用来回更改,下面给是CLOCK.H里面的内容:

 

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

//文件名称:Clock.h

//    能:关于定时器的一些函数

//    者:懒猫爱飞

//    注:MCU      -- LPC2134

//          Crystal  -- 12MHz

//          RTC      -- 32.768KHz  

//          开发环境 -- RealView MDK-ARM Verxion 4.12

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

#ifndef __CLOCK_H__

#define __CLOCK_H__

 

#include "config.h"

 

#define RTC_NUM 13 /*-- RTC中断号 --*/

#define T0_NUM 4  /*-- Timer0 中断号 --*/

 

/*------------------------

    全局变量

-------------------------*/

struct {

        uint8 second;  // 记录

        uint8 minute;  // 记录

        uint8 hour;    // 记录

                  uint8 year;    // 记录

                  uint8 month;   // 记录

                  uint8 day;     // 记录

                  uint8 week;    // 记录 星期

       } current_time,pre_time;

 

#define Cur_Sec   current_time.second

#define Cur_Min   current_time.minute

#define Cur_Hour  current_time.hour

#define Cur_Year  current_time.year

#define Cur_Month current_time.month

#define Cur_Day   current_time.day

#define Cur_Week  current_time.week

 

#define Pre_Sec   pre_time.second

#define Pre_Min   pre_time.minute

#define Pre_Hour  pre_time.hour

#define Pre_Year  pre_time.year

#define Pre_Month pre_time.month

#define Pre_Day   pre_time.day

#define Pre_Week  pre_time.week

 

struct {

        uint32 timet;  // 从寄存器中读取当前时间

        uint32 datet;  // 从当前寄存器中读取日期

       } rtc_time;

 

#define Timet  rtc_time.timet

#define Datet  rtc_time.datet

 

BOOL t0flag;                        // 定时器标志

BOOL secflag;          // 秒标志

BOOL dotflag;          // 分与秒之间的冒号显示标志

 

extern void RTC_Init(void);    // RTC初始化

extern void Timer0_Init(void); // 定时器0初始化

extern void T0_Process(void);  // 定时器0处理程序

extern void Updata_Time(void); // 更新时间

 

#endif

这个文件里面主要是声明了一些全局变量与一些写RTC和定时器有关的函数,其中BOOL

这个数据类型是我自定义的,在config.h中有声明如下:

//用共用体定义二值变量

typedef enum

{

    FALSE = 0,

    TRUE  = 1,

} BOOL;

下面这几个函数是在main函数中调用的,所以要加上关键字extern,关于Clock.c文件的内容,在这里就不在贴出来了,有点多,有兴趣的可以参看附件,附件里面有源代码与工程文件,编译环境是MDK4.12。这里还要说一下Show_Time(uint8 svalue,uint vposi)这个函数,这个函数是用于更新完数据后在LCD相应位置显示,要说的一点是在重新显示之前一定要把那个位置清0,不然会出现乱码。如下面程序所示:

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

//函数名称:void Show_Time(uint8 svalue,uint8 vposi)

//    能:在LCD屏的相应位置显示时间

//入口参数:uint8 svalue -- 时间

//          uint8 vposi  -- 显示的初始位置 只能取024,与数组定义有关

//出口参数:NULL

//    注:NULL

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

void Show_Time(uint8 svalue,uint8 vposi)

{

   uint8 i = 0;

   uint8 hb = 0; // 存储时间十位

   uint8 lb = 0; // 存储时间个位

   hb = svalue;

   for(i=0;i<2;i++)

   {    

      lb = hb%10;

      hb /= 10;

      Show_Num(6,timeposi[i+vposi],10);  // 在更新数据的位置先清零,不然容易出现乱码

      Show_Num(6,timeposi[i+vposi],lb);

   }

}

 

好了,先总结这么多吧,该继续工作了,不然boss看到了又以为我再玩,晚上回去再查一下bug~~

最后,再吼一下懒猫的口号:

 

 

每天进步一点点,开心多一点^_^

 

 

 

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /1 下一条