基于ARM嵌入式的日历制作(含完整程序).doc_第1页
基于ARM嵌入式的日历制作(含完整程序).doc_第2页
基于ARM嵌入式的日历制作(含完整程序).doc_第3页
基于ARM嵌入式的日历制作(含完整程序).doc_第4页
基于ARM嵌入式的日历制作(含完整程序).doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编号: 嵌入式系统设计 实训 (论文)说明书 题 目: 基于嵌入式基于嵌入式 armarm 的日历的制作的日历的制作 院 (系): 应用科技学院 专 业: 电子信息工程 学生姓名: 农惜童 学 号: 0701130204 指导教师: 符强、陈小毛、严素清、孙安青 桂林电子科技大学实训说明书专用纸 2011 年 01 月 19 日 桂林电子科技大学实训说明书专用纸 第 0 页 摘 要 日历在生活中经常用到,电子制作的带时钟的日历更是在生活中广泛用到。 本课题是基于 arm 芯片的日历制作,采用 lpc2138 中央控制单元,五个按键分别 用于调节和查询时间日期,设定生日等。用 lcd1602 显示。整个设计元器件少,简洁 美观,且模块化。模块化的设计和调试方法在整个课题研究过程中至关重要,事实上 在任何设计中也同样关键和有效。 关键字:日历;lpc2138;按键;lcd1602; 桂林电子科技大学实训说明书专用纸 第 1 页 abstract calendar in life are often used, electronic made with clock calendar is widely used in life. this topic is based on the arm of the chip making, use the calendar lpc2138 central control unit, five buttons respectively used to regulate and inquires the time or date, set a birthday, etc. with lcd1602 display. the whole design components less, concise and beautiful, and modularization. modular design and debug method in the whole subject research process is of vital importance to in fact in any design also key and effectively. keywords:calendar; lpc2138; button; lcd1602 桂林电子科技大学实训说明书专用纸 第 0 页 目 录 引言.1 1 设计任务.2 2 硬件设计.2 2.1 总体设计方案与系统构成.2 2.2 lpc2138 芯片2 2.2.1lpc2138 管脚2 2.2.2lpc2138 主要性能3 2.2.3lpc2138 的应用4 2.3 rtc 实时时钟模块5 2.3.1rtc 特性5 2.3.2rtc 寄存器5 2.3.3rtc 使用注意事项7 2.4 硬件电路图.8 2.5 硬件电路 pcb9 3 软件设计.9 3.1 整体设计.9 3.2 初始化程序流程图.11 3.3 生日提示程序流程图.11 4 基于 arm 日历的调试12 4.1 硬件电路检测.12 4.2 功能调试.12 5 改进方案.12 桂林电子科技大学实训说明书专用纸 第 1 页 结论.13 谢 辞.14 参考文献15 附 录.1 桂林电子科技大学实训说明书专用纸 第 0 页 引言 rtc 的英文全称是 real-time clock,翻译过来是实时时钟芯片. 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 走得快,有些又走得 慢。 它的主要作用就是提供稳定的时钟信号给后续电路用。主要功能有:时钟 /清除 rtc 中断标志 alhour=12; /报警时间设置为 12::0:00 almin=0; / alsec=0; / amr=0xf8; /屏蔽年月日值,星期值 4.时间计数寄存器 时间值包含 8 个寄存器,见表 2.3.2(4)所示。 表 2.3.2(4)时间计数寄存器 桂林电子科技大学实训说明书专用纸 第 6 页 按读时间计数寄存器方式读取 rtc 时钟程序如下所示: struct date uint16 year; uint8 mon; uint8 day; uint8 dow; struct time uint8 hour; uint8 min; uint8 sec; void gettime(struct date*d,struct time *t) d-year=year; d-mon=month; d-day=dom; d-hour=hour; d-min=min; d-sec=sec 桂林电子科技大学实训说明书专用纸 第 7 页 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 所示: 桂林电子科技大学实训说明书专用纸 第 8 页 图 2.4 硬件电路图 2.5 硬件电路 pcb 为了检测调试方便,在印制 pcb 的时候,将特性中的镜像给选上,这样制板时就 不用打孔,调试电路板时方便易检查。 基于嵌入式 arm 日历制作电路的 pcb 如图 2.5 所示: 桂林电子科技大学实训说明书专用纸 第 9 页 图 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所示。 扫描键盘 生日提示设置 开始 lcd 初始化 rtc 初始化 读取 rtc 时间, 并发送到 lcd 显 示 设置 p0 口为 gpio 口 s1? s2,数值+1s3,数值-1 扫描键盘 按 1 次按 2 次 按 3 次 按 4 次按 2 次 次 按 3 次按 4 次 年设置月设置日设置周设置时设置分设置秒设置 延时 桂林电子科技大学实训说明书专用纸 第 10 页 n y 桂林电子科技大学实训说明书专用纸 第 11 页 图3.1 总程序流程图 3.2 初始化程序流程图 rtc初始化程序流程图如图3.2所示: 设置基准时钟分频 设置年月日变量 year = int_year month int_month dom = int_day 设置时分秒变量 hour=int_hourm min = int_min sec= int_sec 设置周变量 dow = int_week 开启 rtc ccr = 0x01 桂林电子科技大学实训说明书专用纸 第 12 页 图3.2 rtc初始化程序流程图 3.3 生日提示程序流程图 n y 图3.3 生日提示流程图 4 基于 arm 日历的调试 4.1 硬件电路检测 制作好的pcb板,按照装配图或原理图进行器件装配,装配好之后进行电路的调试。 调试规则为:打开电源之前,先按照系统原理图检查制作好的电路板的通断情况, 并取下pcb上的集成块,然后接通电源,用万用表检查板上的各点的电源电压值,完好 之后再关掉电源,插上集成块。 4.2 功能调试 设置生日日期 当前日期与生日 日期相比较 相等 蜂鸣器响,lcd 显示生日提醒 送当前日期给 lcd 显示 桂林电子科技大学实训说明书专用纸 第 13 页 将写好的程序烧到板子上。然后板子接上电源,电源显示灯亮,开始调试。 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.实现对日历的查询,通过年月日,可以知道星期的查询。 桂林电子科技大学实训说明书专用纸 第 14 页 结论 这次实训匆忙的结束了。由于考研的原因使得这次实训时间不够,且在制作过程 中遇到了好多困难,但总的来说,我基本按要求完成了pwm信号发生器这个设计的要求。 尽管这次基本能完成了设计的要求,但我觉得我还有很多需要改进的地方,也许是时 间有限的原因,所以,以后很长一段时间,还需加强这方面的学习。 在这实训中,把理论和实践相结合,我学到了许多新的知识。 首先,设计电路的整个过程中,我深刻体会到电子电路的设计以及生产流程、安 装、布局、布线、焊接等。提高了理论知识与实际动手结合的能力,这让我对数字电 路和模拟电路都有了更深刻的理解。其次,这次设计,我从中了解到了各种集成电路 方面的知识,熟悉了很多以前从未接触过的芯片,对各种芯片的功能以及其可能组成 的电路都有了一部分的了解。最后,掌握了protel的应用技巧,用prolel制作电路板 的过程中,从绘制原理图到封装器件,到最后作出pcb图都遇到很多问题,在同学和老 师的指导之下我都依次解决了这些问题。 设计过程,在调试电路的时候,遇到的问题最多,由于我是第一次嵌入式芯片, 刚开始调试都是从电路的最前面一点一点测试工作点的电压值,以及当输入电压变化 的时候每块芯片的输入输出端应有的变化,每一部分电路都应实现自己的功能,才能 得出最终的结果,达到目标。我认为调试电路不但要熟悉基础电路知识,还要有相当 的调试经验,但电路出现问题的时候应该大胆的做尝试,在这方面我比较欠缺,我会 在以后的工作学习中尽量弥补自己的弱点。 经过这次设计,我觉得自己真的学到了不少东西。同时学会了怎样查阅资料和利用工 具书。在这次设计过程中经常遇到一些不曾学过的东西,但能有针对性地查找资料, 然后加以吸收利用,提高了自己的应用能力,而且还增长了自己的见识,补充了专业 知识,增强了自己的动手能力,而且还磨练了自己的耐性。收获颇多。 桂林电子科技大学实训说明书专用纸 第 15 页 谢 辞 通过本次设计不仅是对我们的专业知识的检查与总结,而且是对今后学习研究的 一种的激励。在陈小毛、符强、严素青、孙安青老师的指导下和同学们的协助下,我 的设计到此已经完全结束。紧张的日子也总算告一段落。回味起来,感触颇多。在此过 程中,我遇到了许多问题,通过老师和同学的帮助以及自己查阅资料等多种途径,解 决了许多问题,也提高了自己独立思考问题、分析问题、解决问题的能力,同时也提 高了实践能力。最后我要感谢这段时间来所有帮助过我的老师、同学和朋友,是你们 让我的不断发现自己的不足并帮助我解决一个个设计上的问题,给我留下了美好的回 忆。谢谢你们! 桂林电子科技大学实训说明书专用纸 第 16 页 参考文献 1 崔更申 孙安青.arm 嵌入式系统开发与实践m.北京:中国电力出版社,2008 2 何加铭. 嵌入式 32 位微处理器系统设计与应用m. 北京:电子工业出版社,2006 3 杨宗德. 嵌入式 arm 系统原理与实例开发m. 北京:北京大学出版社,2007 4 刘天时等 .arm7 嵌入式开发基础实验m. 北京:北京航空航天大学出版社,2007 5 张绮文.arm 嵌入式常用模块与综合系统设计实例精讲.北京:电子工业出版社,2007. 6 欧阳禹.arm7 嵌入式系统实训教程.北京:清华大学出版社,2008. 桂林电子科技大学实训说明书专用纸 第 0 页 附 录 原理图 主程序代码 #include #define uint8 unsigned char #define uint32 unsigned long #define sw_1 (17) #define sw_2 (19) 桂林电子科技大学实训说明书专用纸 第 1 页 #define sw_3 (21) #define sw_4 (23) #define sw_5 (25) #define lcd_rs (116) /get year 桂林电子科技大学实训说明书专用纸 第 7 页 year_q = bak_year/1000; year_b = bak_year%1000/100; year_s = bak_year%1000%100/10; year_g = bak_year%1000%100%10; bak_month = (datas8) /get month month_s = bak_month/10; month_g = bak_month%10; bak_day = datas /get day day_s = bak_day/10; day_g = bak_day%10; bak_week = (times24) /get week bak_hour = (times16) /get hour hour_s = bak_hour/10; hour_g = bak_hour%10; bak_min = (times8) /get minutes 桂林电子科技大学实训说明书专用纸 第 8 页 min_s = bak_min/10; min_g = bak_min%10; bak_sec = times /get second sec_s = bak_sec/10; sec_g = bak_sec%10; /* * * 名称:lcd_display() * 功能:显示文本 * */ void lcd_display() lcd_write_command(0x80,1); lcd_write_data(year_q+0x30); lcd_write_data(year_b+0x30); lcd_write_data(year_s+0x30); lcd_write_data(year_g+0x30); lcd_write_data(-); lcd_write_data(month_s+0x30); lcd_write_data(month_g+0x30); 桂林电子科技大学实训说明书专用纸 第 9 页 lcd_write_data(-); lcd_write_data(day_s+0x30); lcd_write_data(day_g+0x30); lcd_write_data(-); lcd_write_data(bak_week+0x30); lcd_write_data(-); lcd_write_data(hour_s+0x30); lcd_write_data(hour_g+0x30); lcd_write_data(-); lcd_write_command(0xc0,1); lcd_write_data(min_s+0x30); lcd_write_data(min_g+0x30); lcd_write_data(-); lcd_write_data(sec_s+0x30); lcd_write_data(sec_g+0x30); int main (void) pinsel0=0x00000000; pinsel2=0x00000000; io0dir=0x000007ff; io1dir 桂林电子科技大学实训说明书专用纸 第 10 页 io1dir io1dir io1dir io1dir io1set |= (1 sw_1); io1set |= (1 sw_2); io1set |= (1 sw_3); io1set |= (1 sw_4); io1set |= (1 sw_5); io1dir |= (1 bell); io1clr |= (1 bell); lcd_init(); rtcinit(); while(1) if(bak_month=2)i10;i+) io1set |= (1 bell); for(j=0;j60000;j+); io1clr |= (1 bell); lcd_disp_string(6,1,txt0); 桂林电子科技大学实训说明书专用纸 第 11 页 lcd_write_command(0x01,1); if(io1pin j10000;j+); if(io1pin if(ting_flag=7)ting_flag=0; while(io1pin if(io1pin j10000;j+); if(io1pin ccr=0x00; else ccrflag=0; 桂林电子科技大学实训说明书专用纸 第 12 页 ccr=0x01; while(io1pin if(ting_flag=0) if(io1pin j10000;j+); if(io1pin year = int_year; while(io1pin if(io1pin j10000;j+); if(io1pin year = int_year; 桂林电子科技大学实训说明书专用纸 第 13 页 while(io1pin if(ting_flag=1) if(io1pin j10000;j+); if(io1pin mon

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论