嵌入式系统课程设计基于ARM嵌入式的日历制作.docx

上传人:b****6 文档编号:6581761 上传时间:2023-01-08 格式:DOCX 页数:27 大小:405.92KB
下载 相关 举报
嵌入式系统课程设计基于ARM嵌入式的日历制作.docx_第1页
第1页 / 共27页
嵌入式系统课程设计基于ARM嵌入式的日历制作.docx_第2页
第2页 / 共27页
嵌入式系统课程设计基于ARM嵌入式的日历制作.docx_第3页
第3页 / 共27页
嵌入式系统课程设计基于ARM嵌入式的日历制作.docx_第4页
第4页 / 共27页
嵌入式系统课程设计基于ARM嵌入式的日历制作.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

嵌入式系统课程设计基于ARM嵌入式的日历制作.docx

《嵌入式系统课程设计基于ARM嵌入式的日历制作.docx》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计基于ARM嵌入式的日历制作.docx(27页珍藏版)》请在冰豆网上搜索。

嵌入式系统课程设计基于ARM嵌入式的日历制作.docx

嵌入式系统课程设计基于ARM嵌入式的日历制作

编号:

 

嵌入式系统设计

实训(论文)说明书

 

题目:

基于嵌入式ARM的日历的制作

院(系):

应用科技学院

专业:

电子信息工程

2011年01月19日

摘要

日历在生活中经常用到,电子制作的带时钟的日历更是在生活中广泛用到。

本课题是基于ARM芯片的日历制作,采用LPC2138中央控制单元,五个按键分别用于调节和查询时间日期,设定生日等。

用LCD1602显示。

整个设计元器件少,简洁美观,且模块化。

模块化的设计和调试方法在整个课题研究过程中至关重要,事实上在任何设计中也同样关键和有效。

关键字:

日历;LPC2138;按键;LCD1602;

Abstract

Calendarinlifeareoftenused,electronicmadewithclockcalendariswidelyusedinlife.

ThistopicisbasedontheARMofthechipmaking,usethecalendarLPC2138centralcontrolunit,fivebuttonsrespectivelyusedtoregulateandinquiresthetimeordate,setabirthday,etc.WithLCD1602display.Thewholedesigncomponentsless,conciseandbeautiful,andmodularization.Modulardesignanddebugmethodinthewholesubjectresearchprocessisofvitalimportancetoinfactinanydesignalsokeyandeffectively.

Keywords:

Calendar;LPC2138;Button;LCD1602

引言

RTC的英文全称是Real-TimeClock,翻译过来是实时时钟芯片.RTC是PC主板上的晶振及相关电路组成的时钟电路的生成脉冲,RTC经过8254电路的变频产生一个频率较低一点的OS(系统)时钟TSC,系统时钟每一个cpu周期加一,每次系统时钟在系统初起时通过RTC初始化。

RTC通常情况下需要外接32.768kHz晶体,匹配电容、备份电源等元件。

RTC除了I/O口的定位不同,还有功能上的区别,比如与MCU的接口,现在常用的是I2C接口(距离短,可以与其他器件共用)还有RAM的数量、静态功耗大小、中断的数量,特别是精度的区别。

RTC的精度可以说与温度有很大的关系,而温度会影响晶体的频率。

所以就产生实时时钟的衍生产品:

时钟模块(内置晶体、电容、电池等等),其精度可保持在每天误差小于0.50秒。

但时钟模块相比时钟芯片而言会高出许多。

RTC最重要的功能是提供到2099年内的日历功能,对于时间来说,无论快慢都是误差,而匹配电容在RTC的外围器件上其他非常重要的作用,它可以适当修正晶体与RTC之间匹配问题。

特别是像H1208这样的RTC,把匹配电容内置,这样就可以保证RTC精度的一致性,不会出现有的RTC走得快,有些又走得慢。

它的主要作用就是提供稳定的时钟信号给后续电路用。

主要功能有:

时钟&日历,闹钟,周期性中断输出,32KHz时钟输出。

1设计任务

(1)实现公历、星期、周次。

(2)生日提示音。

(3)日期查询。

2硬件设计

2.1总体设计方案与系统构成

本次实训课题——基于嵌入式ARM的日历的制作。

软件程序从下载口接入LPC2138嵌入式芯片,通过调用LPC2138中的RTC实时时钟模块来实现日历功能,外部接个D/A转换电路,实现生日提示音的功能。

外加5个按键,分别控制日期时间的调整,和生日的设定。

电路系统构成框图如图2.1所示。

图2.1电路系统构成

2.2LPC2138芯片

本系统主要由嵌入式ARM芯片LPC2138的RTC主控模块、LCD1602显示模块以及按键控制模块构成。

原理图见附录1

2.2.1LPC2138管脚

管脚图如图2.2.1所示

图2.2.1LPC2138管脚图

2.2.2LPC2138主要性能

(1)小型LQFP64封装的16/32位ARM7TDMI-S微控制器。

(2)8/16/32kB片内静态RAM。

(3)片内Boot装载软件实现在系统/在应用中编程(ISP/IAP)。

扇区擦除或整片擦除的时间为400ms,1ms可编程256字节。

(4)EmbeddedICE®RT和嵌入式跟踪接口可实时调试(利用片内RealMonitor软件)和高速跟踪执行代码。

(5)1个(LPC2132/2132)或2个(LPC2138)8路10位A/D转换器共包含16个模拟输入,每个通道的转换时间低至2.44us。

(6)1个10位D/A转换器,可提供不同的模拟输出(LPC2132/2138)。

(7)2个32位定时器/计数器(带4路捕获和4路比较通道)、PWM单元(6路输出)和看门狗。

(8)实时时钟具有独立的电源和时钟源,在节电模式下极大地降低了功耗。

(9)多个串行接口,包括2个16C550工业标准UART、2个高速I2C接口(400kbit/s)、SPITM和SSP(具有缓冲功能,数据长度可变)。

(10)向量中断控制器。

可配置优先级和向量地址。

(11)多达47个5V的通用I/O口(LQFP64封装)。

(12)9个边沿或电平触发的外部中断引脚。

(13)通过片内PLL可实现最大为60MHz的CPU操作频率,PLL的稳定时间为100us。

(14)片内晶振频率范围:

1~30MHz。

(15)2个低功耗模式:

空闲和掉电。

(16)可通过个别使能/禁止外部功能和降低外部时钟来优化功耗。

(17)通过外部中断将处理器从掉电模式中唤醒。

(18)单个电源供电,含有上电复位(POR)和掉电检测(BOD)电路:

-CPU操作电压范围:

3.0~3.6V(3.3V+/-10%),I/O口可承受5V的最大电压。

2.2.3LPC2138的应用

(1)工业控制

(2)医疗系统

(3)访问控制

(4)POS机

(5)通信网关

(6)嵌入式软moderm

(7)一般性应用

2.3RTC实时时钟模块

实时时钟(RTC)提供一套计数器在系统上电和关闭操作时对时间进行测量。

RTC消耗的功率非常低。

LPC2138的RTC时钟可由独立的32.768kHz振荡器或基于VPB时钟的可编程预分频器来提供。

另外,RTC还具有专用的电源管脚Vbat,可连接到电池或其它器件使用的相同的3.3V电压上

2.3.1RTC特性

(1)测量保持日历或时钟的时间通路

(2)超低功耗设计,支持电池供电系统

(3)提供秒、分、小时、日、月、年和星期

(4)指定的32kHz振荡器或可编程VPB时钟预分频器

(5)专用电源管脚可与电池或3.3V的电压相连

2.3.2RTC寄存器

1.时钟节拍计数器CTC

时钟节拍计数器CTC是用于尝试秒的时钟节拍计数,这是一个只读寄存器,但它可以通过时钟控制寄存器(CCR)复位为0,如图2.3.2

(1)所示。

图2.3.2

(1)RTC计数部分原理示意图

2.时钟控制寄存器CCR

时钟控制寄存器CCR是一个4位寄存器,它用于控制时钟分频电路的操作,包括启动RTC和复位时钟节计数器琴CTC等。

操作示例如下:

CCR=0x01;//启动RTC

3.报警寄存器

报警寄存器如表2.3.2(3)所示,这些寄存器的值与时间计数器相比较,如果所有未屏蔽的报警寄存器都与它们相对应的时间计数器相匹配,那么将产生一次中断。

像中断位置寄存器的bit1写入1清除中断。

表2.3.2(3)报警寄存器

定时报警设置示例程序如下所示:

ILR=0x03;//清除RTC中断标志

ALHOUR=12;//报警时间设置为12:

:

0:

00

ALMIN=0;//

ALSEC=0;//

AMR=0xF8;//屏蔽年月日值,星期值

4.时间计数寄存器

时间值包含8个寄存器,见表2.3.2(4)所示。

表2.3.2(4)时间计数寄存器

按读时间计数寄存器方式读取RTC时钟程序如下所示:

StructDATE

{uint16year;

Uint8mon;

Uint8day;

Uint8dow;

}

StructTIME

{uint8hour;

Uint8min;

Uint8sec;

}

VoidGetTime(structDATE*d,structTIME*t)

{d->year=YEAR;

d->mon=MONTH;

d->day=DOM;

d->hour=HOUR;

d->min=MIN;

d->sec=SEC

}

2.3.3RTC使用注意事项

如果使用RTC,Vbat必须连接到V3脚或一个独立的电源(外部电池)。

否则,Vbat应该接地(Vss)。

Vbat断电时LPC2131/2132/2138不能保存RTC的状态,如果时钟源丢失、中断或改变,RTC也无法维持时间计数。

由于RTC有两个可用的时钟(VPB时钟(pclk)或来自RTCX1-2管脚的32KHz的信号),所选择时钟的任何中断都会导致时间值的偏移。

如果RTC初始化成这个时间值或从RTC激活后运行的一段时间内出现了一个错误,它们带来的变化都将影响真实的时钟时间。

RTCX1-2管脚的信号可随时为RTC提供时钟,选择pclk作为RTC时钟和进入掉电模式会使时间的更新出现误差。

而且,在系统操作过程中(重新配置PLL、VPB定时器或RTC预分频器)改变RTC的时间基准会使累加时间出现错误。

当RTC时钟由pclk转变为RTCX管脚信号时也会出现累加时间误差。

一旦RTCX1-2管脚的32KHz信号被选择用作RTC的时钟源,RTC可完全独立工作,与VPB时钟(pclk)无关。

因此,在要用到RTC且对功耗敏感的应用中(如电池供电设备)可通过使用RTCX1-2管脚的信号和清除PCONP功率控制寄存器的PCRTC位来降低功耗(见“系统控制模块”一章的“功率控制”)。

2.4硬件电路图

LPC2138的外围电路及为简单,如下图所示,LCD1602为显示电路,按键S1-S5为控制电路,蜂鸣器为生日提醒电路。

硬件电路图如图2.4所示:

图2.4硬件电路图

2.5硬件电路PCB

为了检测调试方便,在印制PCB的时候,将特性中的镜像给选上,这样制板时就不用打孔,调试电路板时方便易检查。

基于嵌入式ARM日历制作电路的PCB如图2.5所示:

图2.5硬件电路PCB

3软件设计

系统的主程序主要完成输出3路PWM信号,并由按键来控制调节。

3.1整体设计

由设计要求,可分析得出程序设计一共有以下几个模块:

(1)初始化程序设计,包括LCD1602屏幕显示初始化,LPC2138芯片的RTC模块初始化,设置管脚P0口为GPIO口,设置P1.17,P1.19,P1.21,P1.23为按键输入口。

(2)RTC时钟提取设计,初始化后,开启RTC专用定时器,通过它的匹配功能来提取年月日时分秒星期等时间,并送至LCD显示。

(3)变量控制,提取时钟后,要通过按键来调节时钟的大小。

(4)生日提醒,设置生日时间,生日那天,则蜂鸣器响,LCD显示birthday提醒。

总体软件设计流程图如图3.1所示。

 

N

Y

 

图3.1总程序流程图

3.2初始化程序流程图

RTC初始化程序流程图如图3.2所示:

 

图3.2RTC初始化程序流程图

3.3生日提示程序流程图

 

 

N

Y

 

图3.3生日提示流程图

4基于ARM日历的调试

4.1硬件电路检测

制作好的PCB板,按照装配图或原理图进行器件装配,装配好之后进行电路的调试。

调试规则为:

打开电源之前,先按照系统原理图检查制作好的电路板的通断情况,并取下PCB上的集成块,然后接通电源,用万用表检查板上的各点的电源电压值,完好之后再关掉电源,插上集成块。

4.2功能调试

将写好的程序烧到板子上。

然后板子接上电源,电源显示灯亮,开始调试。

PWM信号发生器按键功能如图4.2所示

图4.2PWM信号发生器按键

(1)开启电源,各模块初始化。

LCD屏幕显示初始化时钟2011-1-19-3-10-48-56,表示电路工作正常。

上述时钟表示2011年1月19日星期三10点48分56秒。

(2)按下S1键1次,则等下按键修改功能作用于年变量,按2次为月变量,3次为日变量,以此类推。

我们先按下2次S1键,则作用的是月变量。

(3)按下S2键,可以看到LCD屏显上的月变量+1,每按一次+1。

(4)按下S3键,可以看到CD屏显上的月变量-1,每按一次-1。

按照这个方法,调试其他时钟变量。

至此,基于ARM日历的调试完毕。

5改进方案

日历的制作简单,功能很多。

若在以上我们制作的基础上,加上一些模块,还可以实现诸多功能。

1.多功能闹钟,设置方式和设置生日提醒得方式一致。

2.实现对日历的查询,通过年月日,可以知道星期的查询。

结论

这次实训匆忙的结束了。

由于考研的原因使得这次实训时间不够,且在制作过程中遇到了好多困难,但总的来说,我基本按要求完成了PWM信号发生器这个设计的要求。

尽管这次基本能完成了设计的要求,但我觉得我还有很多需要改进的地方,也许是时间有限的原因,所以,以后很长一段时间,还需加强这方面的学习。

在这实训中,把理论和实践相结合,我学到了许多新的知识。

首先,设计电路的整个过程中,我深刻体会到电子电路的设计以及生产流程、安装、布局、布线、焊接等。

提高了理论知识与实际动手结合的能力,这让我对数字电路和模拟电路都有了更深刻的理解。

其次,这次设计,我从中了解到了各种集成电路方面的知识,熟悉了很多以前从未接触过的芯片,对各种芯片的功能以及其可能组成的电路都有了一部分的了解。

最后,掌握了protel的应用技巧,用prolel制作电路板的过程中,从绘制原理图到封装器件,到最后作出PCB图都遇到很多问题,在同学和老师的指导之下我都依次解决了这些问题。

设计过程,在调试电路的时候,遇到的问题最多,由于我是第一次嵌入式芯片,刚开始调试都是从电路的最前面一点一点测试工作点的电压值,以及当输入电压变化的时候每块芯片的输入输出端应有的变化,每一部分电路都应实现自己的功能,才能得出最终的结果,达到目标。

我认为调试电路不但要熟悉基础电路知识,还要有相当的调试经验,但电路出现问题的时候应该大胆的做尝试,在这方面我比较欠缺,我会在以后的工作学习中尽量弥补自己的弱点。

经过这次设计,我觉得自己真的学到了不少东西。

同时学会了怎样查阅资料和利用工具书。

在这次设计过程中经常遇到一些不曾学过的东西,但能有针对性地查找资料,然后加以吸收利用,提高了自己的应用能力,而且还增长了自己的见识,补充了专业知识,增强了自己的动手能力,而且还磨练了自己的耐性。

收获颇多。

谢辞

通过本次设计不仅是对我们的专业知识的检查与总结,而且是对今后学习研究的一种的激励。

在陈小毛、符强、严素青、孙安青老师的指导下和同学们的协助下,我的设计到此已经完全结束。

紧张的日子也总算告一段落。

回味起来,感触颇多。

在此过程中,我遇到了许多问题,通过老师和同学的帮助以及自己查阅资料等多种途径,解决了许多问题,也提高了自己独立思考问题、分析问题、解决问题的能力,同时也提高了实践能力。

最后我要感谢这段时间来所有帮助过我的老师、同学和朋友,是你们让我的不断发现自己的不足并帮助我解决一个个设计上的问题,给我留下了美好的回忆。

谢谢你们!

参考文献

[1]崔更申孙安青.ARM嵌入式系统开发与实践[M].北京:

中国电力出版社,2008

[2]何加铭.嵌入式32位微处理器系统设计与应用[M].北京:

电子工业出版社,2006

[3]杨宗德.嵌入式ARM系统原理与实例开发[M].北京:

北京大学出版社,2007

[4]刘天时[等].ARM7嵌入式开发基础实验[M].北京:

北京航空航天大学出版社,2007

[5]张绮文.ARM嵌入式常用模块与综合系统设计实例精讲.北京:

电子工业出版社,2007.

[6]欧阳禹.ARM7嵌入式系统实训教程.北京:

清华大学出版社,2008.

附录

原理图

主程序代码

#include

#defineuint8unsignedchar

#defineuint32unsignedlong

#defineSW_1(17)

#defineSW_2(19)

#defineSW_3(21)

#defineSW_4(23)

#defineSW_5(25)

#defineLCD_RS(1<<8)

#defineLCD_RW(1<<9)

#defineLCD_E(1<<10)

#defineLCD_BUSY(1<<7)

#defineFpclk20000000

#defineBELL(27)

uint8txt0[]={"birthday"};

uint32datas,times,bak_year,bak_month,bak_day,year_q,year_b,year_s,year_g,month_s,month_g,day_s,day_g;

uint32bak_week,bak_hour,bak_min,bak_sec,hour_s,hour_g,min_s,min_g,sec_s,sec_g,i;

uint32int_year=2011,int_month=1,int_day=19,int_week=3,int_hour=10,int_min=48,int_sec=56,j;

uint8ting_flag=0,ccrflag=0;

voiddelay(uint32n)

{

uint32i;

for(i=0;i

}

voidLCD_ChkBusy(void)

{

IO0DIR=0x000007ff;

IO0CLR=LCD_RS;

IO0SET=LCD_RW;

IO0SET=LCD_E;

while((IO0PIN&LCD_BUSY)!

=0);

delay(400);

IO0CLR=LCD_E;

IO0DIR=0x000007ff;

}

voidLCD_write_command(uint8dat,uint8busy)

{

if(busy)LCD_ChkBusy();

IO0CLR=LCD_E;

IO0CLR=LCD_RS;

IO0CLR=LCD_RW;

IO0CLR=0x000000ff;

IO0SET=dat;

IO0SET=LCD_E;

delay(400);

IO0CLR=LCD_E;

}

voidLCD_write_data(uint8dat)

{

//LCD_ChkBusy();

delay(400);

IO0CLR=LCD_E;

IO0SET=LCD_RS;

IO0CLR=LCD_RW;

IO0CLR=0x000000ff;

IO0SET=dat;

IO0SET=LCD_E;

delay(400);

IO0CLR=LCD_E;

}

voidLCD_disp_string(uint8x,uint8y,uint8*dat)

{

uint8addr;

if(y==0)

addr=0x80+x;

else

addr=0xc0+x;

LCD_write_command(addr,1);

while(*dat)

{

LCD_write_data(*dat);

dat++;

}

}

voidLCD_init()

{

delay(1000);

LCD_write_command(0x38,0);

delay(400);

LCD_write_command(0x38,0);

delay(400);

LCD_write_command(0x38,0);

delay(2800);

LCD_write_command(0x38,0);

delay(2800);

LCD_write_command(0x08,0);

delay(2800);

LCD_write_command(0x0c,0);//整体显示,关光标,不闪烁

delay(2800);

LCD_write_command(0x06,0);//设定输入方式,增量不移位

delay(2800);

LCD_write_command(0x01,0);//清除屏幕显示

delay(2800);

}

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

**Name:

RTCInit()

**Function:

initRTC(初始RTC)

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

voidRTCInit(void)

{

PREINT=Fpclk/32768-1;//设置基准时钟分频

PREFRAC=Fpclk-(Fpclk/32768)*32768;

CCR=0x00;

YEAR=int_year;//年

MONTH=int_month;//月

DOM=int_day;//日

DOW=int_week;//星期

HOUR=int_hour;//小时

MIN=int_min;//分钟

SEC=int_sec;//秒

CIIR=0x01;//设置秒值的增量产生一次中断

CCR=0x01;//启动RTC

}

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

**Name:

SendTimeRtc()

**Function:

readRTCtimevalue,andsendtimetopctodisplay

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

voidSendTimeRtc(void)

{

/*readfullclockrigister*/

times=CTIME0;

datas=CTIME1;

bak_

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1