ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:1.06MB ,
资源ID:9497023      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9497023.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于ARM7LPC2138的实时时钟.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于ARM7LPC2138的实时时钟.docx

1、基于ARM7LPC2138的实时时钟前 言近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。32位嵌入式系统发展很快,32位单片机已逐渐占领8位机的市场,并以很高的性价比赢得了越来越多的用户的青睐。随着科技和工艺的进步,32位单片机的优势会更加突显出来,将会成为嵌入式系统的主流。在32位嵌入式系统中,基于ARM的应用占据了大部分份额。 实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。

2、RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。随着集成电路技术的不断发展,RTC器件的新品也不断推出。这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。本次设计是采用LPC2138的32位芯片设计的可调万年历,具有调时、调分、调月、调日和准点报时的功能。当整点时,蜂鸣器响的次数为当时小时的值以及LED会闪烁相应的次数。关键词:ARM LPC21

3、38 LED RTC一、功能说明利用内部RTC的实时时钟,制作一个时钟,通过液晶显示模块显示年、月、日和时间。K1键、K2键、K3键和K4键分别可用于调整月份、日、小时和分钟数。在调整过程中,日期和时钟以新的时间为起点继续刷新显示。同时,该设计具有整点报时的功能,当整点时,蜂鸣器响的次数为当时小时的值以及LED会闪烁相应的次数。本设计采用的是OCM128128液晶显示模块是128128点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8位标准数据总线、6条控制线及电源线。采用T6963C驱动IC进行控制。本实验板中采用的是3.3V的液晶模块,可以直接连接到LPC2138的GPI

4、O上,而不需要进行电平转换。二、系统硬件设计2.1 系统结构本实验是基于LPC2138ARM处理器而设计的实时时钟,综合性较强,涉及到RTC外部中断,引脚的GPIO功能,C语言编程等知识。首先要定义P0口为基本IO功能,然后通过引脚功能选择寄存器PINSEL0及PINSEL1定义输入输出外部中断口所在的位,另外还要对外部中断进行初始化,其中有规定他们的优先级,中断触发方式,中断地址分配,本实验采用液晶模块OCM128128同时显示实时时间,同样要对他们进行初始化,包括检查总线忙与闲,传送地址,传送数据及显示函数的编程、LPC2138微控制器自带有一个实时时钟RTC带日历和时钟功能,要使用它也要

5、进行一下的基本操作:设置RTC基准时钟分频器初始化RTC的时钟值如,YEAR,MONTH,HOUR等启动RTC即CCR的CLKEN位职位读取完整时间寄存器值或等待中断。陈述完以上的模块初始化后,下面简要说明一下程序的流程。先调用以上各个模块的初始化函数lcd_int(),RTCint()。然后开启RTC时钟,并调用LCD显示函数SendTimetRtc(),如果没用中断发生就判断实时时间是否与以设定的报警时间相同,如果相同就马上接通蜂鸣器报警并且点亮LED灯。假如有中断发生,在无效状态下,马上给中断标志寄存器EXTINT对应位,然后写1清零,然后转到中断服务程序。根据项目要求,确定该系统的设计

6、方案,图2-1为该系统设计方案的结构框图。硬件电路由6个部分组成,即ARMLPC2138处理器、时钟电路、复位电路、液晶显示模块、时间调整模块、整点报时模块。图2-1 系统结构框图2.2元器件的选择选用嵌入式arm 7系列的LPC2138芯片和LCDPG128128a显示器: 三、系统软件设计3.1程序和芯片的初始化 程序中包括:Lcd的初始化:void init_lcd (void) IO0CLR=rst; IO0SET=rst; delay1(50); IO0CLR=ce; IO0SET=wr; IO0SET=rd; wr_xd(addr_w,0x40); /文本显示区首地址 wr_xd(

7、addr_t,0x42); /图形显示区首地址 wr_td(width,0x00,0x41); /文本显示区宽度 wr_td(width,0x00,0x43); /图形显示区宽度 wr_comm(0x81); /逻辑异或 wr_td(0x56,0x00,0x22); /CGRAM偏置地址设置 wr_comm(0x9c); /启用文本显示,启用图形显示中断向量的初始化:VICIntSelect = 0x00000000; VICVectCntl0 = 0x20|13; VICVectAddr0 = (uint32)RTC_int; ILR=0x03; VICIntEnable = (113);

8、_enable_irq(); RTC的初始化:void RTC_int(void) uint32 i,h; uint8 hh2; h=HOUR; hh0 = HOUR /10+0x30; hh1 = HOUR% 10+0x30; clrram(); /清屏 disp_img(0,16,64,nBitmapDot); /显示图画 disp_zf(0,12,Current Time:); for(i=0;i2;i+) disp_zfyg(13+i,12,hhi); for(i=0;i23) HOUR=0; CIIR=0x04; while(IO0PIN&ATH)=0); if(IO0PIN&ATM

9、)=0) CIIR=0x00; MIN+; if(MIN59) MIN=0; CIIR=0x04; while(IO0PIN&ATM)=0); if(IO0PIN&ATS)=0) CIIR=0x00; MONTH+; if(MONTH12) MONTH=0; CIIR=0x04; while(IO0PIN&ATS)=0); if(IO0PIN&ATD)=0) CIIR=0x00; DOM+; CIIR=0x04; while(IO0PIN&ATD)=0); 延时函数void DelayNS(uint32 dly) uint32 i; for(; dly0; dly-) for(i=0; i50

10、000; i+);整点报时函数void RTC_int(void) uint32 i,h; uint8 hh2; h=HOUR; hh0 = HOUR /10+0x30; hh1 = HOUR% 10+0x30; clrram(); /清屏 disp_img(0,16,64,nBitmapDot); /显示图画 disp_zf(0,12,Current Time:); for(i=0;i2;i+) disp_zfyg(13+i,12,hhi); for(i=0;ih;i+) IO0CLR=LED; IO0SET=BEAK; DelayNS(30); IO0SET=LED; IO0CLR=BEA

11、K; DelayNS(30); ILR = 0x03; VICVectAddr = 0x00; clrram(); /清屏输出字符串函数void disp_zf(uint32 x,uint32 y,uint8 *str)char c;wr_xd(addr_w+16*y+x),0x24);wr_comm(0xb0);while(*str!=0)c = (*str);wr_auto(c-32);str+; wr_comm(0xb2);输出一个字符的函数void disp_zfyg(uint32 x,uint32 y,uint8 str)char c;wr_xd(addr_w+16*y+x),0x2

12、4);wr_comm(0xb0);c = str;wr_auto(c-32);wr_comm(0xb2);四、实验测试4.1IAR软件的编译,连接和运行 构建完整的程序:添加头文件,中断处理汇编程序段,初始化函数和主函数:4.2protues仿真软件的联合调试 为LPC2138芯片选择Hex文件路径:五、实验结果5.1仿真结果5.2实验板结果六、心得体会众所周知,ARM微处理器功能特别的强大,与MC51单片机相比,它更适合做中高端数字系统的微处理器,ARM已经成了现代主流微处理器内核,目前,绝大多数码产品,如,手机,MP3,MP4,数码相机,他们的系统都嵌入了ARM系列内核,ARM微处理器更新

13、换代很快,现在的诺基亚N系列智能手机如N78,N79已经采用了ARM11了,使得运行于塞班操作系统S60第三版的应用程序流畅自如。 回顾起此次课程设计,至今我仍感慨颇多,从理论到实践,在整整半个月的日子里,我学到很多很多的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的内容。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。在设计的过程遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻

14、,掌握得不够牢固,通过这次课程设计,把以前所学过的知识重新温故,巩固了所学的知识。七、程序清单/* 文件名:LCDTEST.C* 功能:显示图像,显示汉字,显示字符。显示点阵*/#include Config.h#include Target.h#include T6963C.h#include #define uint32 unsigned int#define uint8 unsigned char #define BEAK (120) #define LED (116)#define ATM (117) /调整分钟#define ATH (118) /调整小时#define ATS (1

15、22) / 调整月份#define ATD (123) HOUR=0; CIIR=0x04; while(IO0PIN&ATH)=0); if(IO0PIN&ATM)=0) CIIR=0x00; MIN+; if(MIN59) MIN=0; CIIR=0x04; while(IO0PIN&ATM)=0); if(IO0PIN&ATS)=0) CIIR=0x00; MONTH+; if(MONTH12) MONTH=0; CIIR=0x04; while(IO0PIN&ATS)=0); if(IO0PIN&ATD)=0) CIIR=0x00; DOM+; CIIR=0x04; while(IO0

16、PIN&ATD)=0); /*/输出字符串函数/*void disp_zf(uint32 x,uint32 y,uint8 *str)char c;wr_xd(addr_w+16*y+x),0x24);wr_comm(0xb0);while(*str!=0)c = (*str);wr_auto(c-32);str+; wr_comm(0xb2);/*/输出一个字符的函数/*void disp_zfyg(uint32 x,uint32 y,uint8 str)char c;wr_xd(addr_w+16*y+x),0x24);wr_comm(0xb0);c = str;wr_auto(c-32)

17、;wr_comm(0xb2);/* 名称:DelayNS()* 功能:长软件延时* 入口参数:dly 延时参数,值越大,延时越久* 出口参数:无*/void DelayNS(uint32 dly) uint32 i; for(; dly0; dly-) for(i=0; i50000; i+);/*/液晶初始化函数/*void init_lcd (void) IO0CLR=rst; IO0SET=rst; delay1(50); IO0CLR=ce; IO0SET=wr; IO0SET=rd; wr_xd(addr_w,0x40); /文本显示区首地址 wr_xd(addr_t,0x42);

18、/图形显示区首地址 wr_td(width,0x00,0x41); /文本显示区宽度 wr_td(width,0x00,0x43); /图形显示区宽度 wr_comm(0x81); /逻辑异或 wr_td(0x56,0x00,0x22); /CGRAM偏置地址设置 wr_comm(0x9c); /启用文本显示,启用图形显示/*整点报时函数*/void RTC_int(void) uint32 i,h; uint8 hh2; h=HOUR; hh0 = HOUR /10+0x30; hh1 = HOUR% 10+0x30; clrram(); /清屏 disp_img(0,16,64,nBitm

19、apDot); /显示图画 disp_zf(0,12,Current Time:); for(i=0;i2;i+) disp_zfyg(13+i,12,hhi); for(i=0;ih;i+) IO0CLR=LED; IO0SET=BEAK; DelayNS(30); IO0SET=LED; IO0CLR=BEAK; DelayNS(30); ILR = 0x03; VICVectAddr = 0x00; clrram(); /清屏/* 函数名称 :RTCInit()* 函数功能 :初始化实时时钟* 入口参数 :无* 出口参数 :无*/void RTCInit (void) PREINT =

20、Fpclk / 32768 - 1; / 设置基准时钟分频器 PREFRAC = Fpclk - (Fpclk / 32768) * 32768; CCR = 0x00; / 禁止时间计数器 YEAR = 2013; MONTH = 07; DOM = 01; DOW = 1; HOUR = 2; MIN = 59; SEC = 55; CIIR = 0x04; / 设置HOUR值的增量产生1次中断 ILR = 0x03; / 清除RTC增量和报警中断标志 CCR = 0x01; / 启动RTC/*-主程序-*/void main () uint32 i; uint8 k18; TargetR

21、esetInit(); RTCInit (); VICIntSelect = 0x00000000; VICVectCntl0 = 0x20|13; VICVectAddr0 = (uint32)RTC_int; ILR=0x03; VICIntEnable = (113); _enable_irq(); PINSEL0 = 0x0000000; / 设置I/O连接到UART1 PINSEL1 = 0x00000000; / 设置PS2口为GPIO输入 IO0DIR = 0xff39ffff; IO0SET=LED; IO0SET=ATM; IO0SET=ATH; init_lcd (); /

22、液晶初始化 clrram(); /清屏 while(1) key(); k0 = YEAR /1000+0x30; k1 = YEAR %1000/100+0x30; k2 = YEAR%100/ 10+0x30; k3 = YEAR % 10+0x30; k4=-; k5 = MONTH /10+0x30; k6 = MONTH % 10+0x30; k7=-; k8 =DOM/ 10+0x30; k9 = DOM % 10+0x30; k10 = HOUR /10+0x30; k11 = HOUR % 10+0x30; k12=:; k13 = MIN/ 10+0x30; k14 =MIN % 10+0x30; k15=:; k16=SEC/10+0x30; k17=(SEC%10+0x30); disp_img(0,16,64,nBitmapDot); /显示图画 disp_zf(0,10,DATE: ); disp_zf(0,13,TIME: ); for(i=0;i10;i+) disp_zfyg(6+i,10,ki); for(i=10;i18;i+) disp_zfyg(6+i-10,13,ki);

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2