新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LPC2134學(xué)習(xí)日志(二)-- LCD12864時(shí)鐘

LPC2134學(xué)習(xí)日志(二)-- LCD12864時(shí)鐘

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
這兩個(gè)星期貌似有點(diǎn)忙,弄的懶貓身心疲憊,甚至有時(shí)忍不住竟對(duì)別人發(fā)了火,這一點(diǎn)懶貓很抱歉,在此說(shuō)一對(duì)不起,希望你們能諒解。好了,再忙,懶貓也得抽空學(xué)點(diǎn)東東,還是那句老話(huà),學(xué)如行舟,不進(jìn)則退,懶貓雖愛(ài)飛,但還沒(méi)有學(xué)會(huì)飛,所以為了懶貓能周游世界的夢(mèng)想,懶貓一定要好好奮斗再好好奮斗!

嗯,好了,不費(fèi)話(huà),這幾天抽空在上篇日志的基礎(chǔ)上寫(xiě),又添加了點(diǎn)東東,做了個(gè)實(shí)時(shí)時(shí)鐘,當(dāng)然功能還不全,還沒(méi)有調(diào)時(shí)間的功能,還沒(méi)有定時(shí)的功能,LCD12864上也沒(méi)有添加菜單的功能……反正這個(gè)是最簡(jiǎn)單的實(shí)時(shí)時(shí)鐘,主要就是學(xué)習(xí)一下LPC2134內(nèi)部的RTC,程序雖然能運(yùn)行,但是在仿真時(shí)出了點(diǎn)小BUG,就是秒值3秒鐘才更新一次,這一點(diǎn)讓?xiě)胸埡苡魫?,找了良久也沒(méi)有找出原因,不過(guò)懶貓并未放棄,還是一直找下去,直到把它消滅到,如果你寫(xiě)過(guò)這方面的程序,也可以指導(dǎo)一下懶貓,懶貓不勝感激,在此深表感謝。

本文引用地址:http://m.butianyuan.cn/article/201611/319453.htm

好了,下面給出這次仿真用的接口示意圖,再?gòu)?qiáng)調(diào)一下,這個(gè)只是在proteus中仿真用的,不能用于實(shí)際焊接:

圖1-1仿真電路圖

由于這個(gè)實(shí)時(shí)時(shí)鐘是在上一篇日志《LPC2134學(xué)習(xí)日志學(xué)習(xí)使用LCD12864》有基礎(chǔ)上更改的,所以只添加了Clock.h與Clock.c這兩個(gè)文件,這樣添加的好處是模塊化編程,但時(shí)用不到,可以直接刪除,模板可以不用來(lái)回更改,下面給是CLOCK.H里面的內(nèi)容:

//文件名稱(chēng):Clock.h

//功能:關(guān)于定時(shí)器的一些函數(shù)

//作者:懶貓愛(ài)飛

//備注:MCU-- LPC2134

//Crystal-- 12MHz

//RTC-- 32.768KHz

//開(kāi)發(fā)環(huán)境-- 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;//記錄時(shí)

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;//從寄存器中讀取當(dāng)前時(shí)間

uint32 datet;//從當(dāng)前寄存器中讀取日期

} rtc_time;

#define Timetrtc_time.timet

#define Datetrtc_time.datet

BOOL t0flag;//定時(shí)器標(biāo)志

BOOL secflag;//秒標(biāo)志

BOOL dotflag;//分與秒之間的冒號(hào)顯示標(biāo)志

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

extern void Timer0_Init(void); //定時(shí)器0初始化

extern void T0_Process(void);//定時(shí)器0處理程序

extern void Updata_Time(void); //更新時(shí)間

#endif

這個(gè)文件里面主要是聲明了一些全局變量與一些寫(xiě)RTC和定時(shí)器有關(guān)的函數(shù),其中BOOL

這個(gè)數(shù)據(jù)類(lèi)型是我自定義的,在config.h中有聲明如下:

//用共用體定義二值變量

typedef enum

{

FALSE = 0,

TRUE= 1,

} BOOL;

下面這幾個(gè)函數(shù)是在main函數(shù)中調(diào)用的,所以要加上關(guān)鍵字extern,關(guān)于Clock.c文件的內(nèi)容,在這里就不在貼出來(lái)了,有點(diǎn)多,有興趣的可以參看附件,附件里面有源代碼與工程文件,編譯環(huán)境是MDK4.12。這里還要說(shuō)一下Show_Time(uint8 svalue,uint vposi)這個(gè)函數(shù),這個(gè)函數(shù)是用于更新完數(shù)據(jù)后在LCD相應(yīng)位置顯示,要說(shuō)的一點(diǎn)是在重新顯示之前一定要把那個(gè)位置清0,不然會(huì)出現(xiàn)亂碼。如下面程序所示:

void Show_Time(uint8 svalue,uint8 vposi)

{

uint8 i = 0;

uint8 hb = 0; //存儲(chǔ)時(shí)間十位

uint8 lb = 0; //存儲(chǔ)時(shí)間個(gè)位

hb = svalue;

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

{

lb = hb;

hb /= 10;

Show_Num(6,timeposi[i+vposi],10);//在更新數(shù)據(jù)的位置先清零,不然容易出現(xiàn)亂碼

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

}

}

好了,先總結(jié)這么多吧,該繼續(xù)工作了,不然boss看到了又以為我再玩,晚上回去再查一下bug~~



關(guān)鍵詞: LPC2134LCD12864時(shí)

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉