SRC.rar(压缩包里面有源代码与工程文件)
这两个星期貌似有点忙,弄的懒猫身心疲惫,甚至有时忍不住竟对别人发了火,这一点懒猫很抱歉,在此说一对不起,希望你们能谅解。好了,再忙,懒猫也得抽空学点东东,还是那句老话,学如行舟,不进则退,懒猫虽爱飞,但还没有学会飞,所以为了懒猫能周游世界的梦想,懒猫一定要好好奋斗再好好奋斗!
嗯,好了,不费话,这几天抽空在上篇日志的基础上写,又添加了点东东,做了个实时时钟,当然功能还不全,还没有调时间的功能,还没有定时的功能,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 /*-- 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 -- 显示的初始位置 只能取0、2、4,与数组定义有关
//出口参数: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~~
最后,再吼一下懒猫的口号:
每天进步一点点,开心多一点^_^
文章评论(0条评论)
登录后参与讨论