微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LPC2134学习日志(二)-- LCD12864时钟

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

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

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

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

图1-1仿真电路图

由于这个实时时钟是在上一篇日志《LPC2134学习日志学习使用LCD12864》有基础上更改的,所以只添加了Clock.h与Clock.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

#define T0_NUM 4

struct {

uint8 second;//记录

uint8 minute;//记录

uint8 hour;//记录

uint8 year;//记录

uint8 month;//记录

uint8 day;//记录

uint8 week;//记录星期

} current_time,pre_time;

#define Cur_Seccurrent_time.second

#define Cur_Mincurrent_time.minute

#define Cur_Hourcurrent_time.hour

#define Cur_Yearcurrent_time.year

#define Cur_Month current_time.month

#define Cur_Daycurrent_time.day

#define Cur_Weekcurrent_time.week

#define Pre_Secpre_time.second

#define Pre_Minpre_time.minute

#define Pre_Hourpre_time.hour

#define Pre_Yearpre_time.year

#define Pre_Month pre_time.month

#define Pre_Daypre_time.day

#define Pre_Weekpre_time.week

struct {

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

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

} rtc_time;

#define Timetrtc_time.timet

#define Datetrtc_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)

{

uint8 i = 0;

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

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

hb = svalue;

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

{

lb = hb;

hb /= 10;

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

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

}

}

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top