首页 基于ARM电子万年历的设计

基于ARM电子万年历的设计

举报
开通vip

基于ARM电子万年历的设计基于ARM电子万年历的设计 本科学生毕业论文(设计) 题目(中 文): 基于ARM电子万年历的设计 The Design Electronic Calendar(英 文): Based on ARM 姓 名 学 号 院 (系) 电子工程系 专业、年级 电子信息工程 2级 指导教师 湖南科技学院本科毕业论文(设计)诚信声明 本人郑重声明:所呈交的本科毕业论文,设计,~是本人在指导老师的指导下~独立进行研究工作所取得的成果~成果不存在知识产权争议~除文中已经注明引用的内容外~本论文不含任何其他个人或集...

基于ARM电子万年历的设计
基于ARM电子万年历的设计 本科学生毕业论文(设计) 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目(中 文): 基于ARM电子万年历的设计 The Design Electronic Calendar(英 文): Based on ARM 姓 名 学 号 院 (系) 电子工程系 专业、年级 电子信息工程 2级 指导教师 湖南科技学院本科毕业论文(设计)诚信声明 本人郑重声明:所呈交的本科毕业论文,设计,~是本人在指导老师的指导下~独立进行研究工作所取得的成果~成果不存在知识产权争议~除文中已经注明引用的内容外~本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 本科毕业论文,设计,作者签名: 年 月 日 II 毕业论文(设计)任务书 课题名称: 基于ARM电子万年历的设计 学生姓名: 系 别: 电子工程系 专 业: 电子信息工程 指导教师: 湖南科技学院本科毕业论文(设计)任务书 1、主题词、关键词: 万年历;ARM;STM32;RTC;TFT-LCD 2、毕业论文(设计)内容要求: 电子万年历的设计内容:系统 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 设计、原理图设计、硬件原理电路图设计、软件程序设计。 电子万年历的设计要求:本课题要求设计并完成电子万年历的设计,通过微处理器设计一个能显示生肖、年、月、日、分、秒和星期的智能万年历,要求能够进行查询、日期调整、日期和时间提醒、并显示在TFT-LCD上等功能。 A 3、文献查阅指引: [1] 彭刚、秦志强等.基于ARM Cortex-M3的STM32系列嵌入式微控制器应用实践[M].北京:电子工业出版社,2003.3: 2-5 [2] 李宁.基于MDK的STM32处理器开发应用[M].北京航空航天大学出版社,2008.7:89-93 [3] 王永红、徐炜、赫立平.STM32系列ARM Cortex-M3微控制器原理与实践[M].北京:北京航空航天大学出版社,2008.5: 27-30 [4] 刘军(例说STM32[M](北京:北京航空航天大学出版社,2011.3: 44-45 [5] 陈启军(嵌入式系统及其应用:基于Cortex-M3内核和STM32F103系列微控制器的系统设计与开发[M](上海:同济大学出版社,2011.1: 128-131 [6] 李宁(ARM MCU开发工具MDK使用入门[M](北京:北京航空航天大学出版社,2012.2: 51-55 [7] 高吉祥.电子技术基础实验与课程设计[M].北京:电子工业出版社.2003.3 [8] 荣政.C语言程序设计[M].西安:西安电子科技大学出版社.2004.7:34-37 [9] 胡翔.电路分析[M].北京:北京高等教育出版社.2009.2: 145-153 [10] Joseph Yiu(The Definitive Guide to the ARM Cortex-M3, Second Edition[M](Nenes Newton, MA, USA,2009.5: 33-35 [11] ARM Limited.Cortex-M3 Technical Reference Manual(r2p0). ARM DDI 0037G.www.arm.com 2008.2: 27-33 4、毕业论文(设计)进度安排: 2012年12月确定设计的研究意义与可行性。 2013年1月查找关于电子万年历发展历史的资料及相关知识。 2013年2月总结该研究涉及到的知识并经行温习,熟悉所应用到的软件。 2013年4月动手设计电路原理图,进行电路硬件和软件的设计。 2013年5月仿真进行下载与调试。 2013年5月理清思路,总结报告,写报告。 教研室意见: 负责人签名: 注:本任务书一式三份~由指导教师填写~经教研室审批后一份下达给学生~一份交指导教师~一份留系里存档。 B 湖南科技学院本科毕业论文(设计)开题报告书 论文(设计)题目 基于ARM电子万年历的设计 作 者 姓 名 周亚彪 所属系、专业、年级 电子工程系 电子信息工程专业 2009 年级 10000 2012.12.25 指导教师姓名、职称 唐云 讲师 预计字数 开题日期 电子随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。 二十一世纪的今天,最具有代表性的计时产品就是电子万年历。它是近代世界钟表业界的第三次革命。使得从原来传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期,星期,温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨越性的进步。 电子万年历的发展趋势将会朝着功能多,读取操作简单,显示更加直观,电路更加简洁,成本越来越低,满足大部分人的要求。 主要内容: 本设计基于ARM,采用C语言编程,用软件的方式设计,灵活性好,且作为课程设计来说不仅是对以往大学阶段一些知识的应用,而且也不用花费多少成本。按照系统设计功能的要求,设计一个简单的数字万年历,显示年、月、日、时、分、秒等基本功能。对此国内外许多设计人员对其进行了大量的设计,有用单片机开发的,有用FPGA开发的,也有用ARM开发的。由于使用ARM设计,简便、成品低廉,所以本课程设计采用基于ARM在设计过程中要完成年月日时分秒基本功能,同时还要设计闹钟功能以及阴阳历显示功能。采用ARM设计的万年历由于成本低,精确高,可靠性好等优点,使它有了非常广阔的使用之处。 研究方法: 1.选定设计课题,制定设计流程和思路。 2.分模块设计各个模块内容,并对主要模块重点研究。 3.在设计中有不了解的地方,及时查阅资料或与指导老师交流,听取老师的建议。 C 完成期限和采取的主要措施: 完成期限:2013年1月:制定设计流程和思路。 2013年2月:分模块设计,动手设计电子电路。 2013年3月:开始编程,并动手写论文,与指导老师交流进行修改。 2013年5月:完善论文,制定PPT,完成毕业答辩。 主要采取措施: 1.通过书籍和上网查阅资料,分析本设计重点和难点。 2.复习C语言,重点复习时钟设置和点亮LCD屏。 3.与指导老师和同学交流,接收指导和建议,完善本设计。 主要参考资料: [1] 彭刚、秦志强等.基于ARM Cortex-M3的STM32系列嵌入式微控制器应用实践[M].北京:电子 工业出版社,2003.3: 2-5 [2] 李宁.基于MDK的STM32处理器开发应用[M].北京航空航天大学出版社,2008.7:89-93 [3] 王永红、徐炜、赫立平.STM32系列ARM Cortex-M3微控制器原理与实践[M].北京:北京航空航 天大学出版社,2008.5: 27-30 [4] 刘军(例说STM32[M](北京:北京航空航天大学出版社,2011.3: 44-45 [5] 陈启军(嵌入式系统及其应用:基于Cortex-M3内核和STM32F103系列微控制器的系统设计与 开发[M](上海:同济大学出版社,2011.1: 128-131 [6] 李宁(ARM MCU开发工具MDK使用入门[M](北京:北京航空航天大学出版社,2012.2: 51-55 [7] 高吉祥.电子技术基础实验与课程设计[M].北京:电子工业出版社.2003.3 [8] 荣政.C语言程序设计[M].西安:西安电子科技大学出版社.2004.7:34-37 [9] 胡翔.电路分析[M].北京:北京高等教育出版社.2009.2: 145-153 [10] Joseph Yiu(The Definitive Guide to the ARM Cortex-M3, Second Edition[M](Nenes Newton, MA, USA,2009.5: 33-35 [11] ARM Limited.Cortex-M3 Technical Reference Manual(r2p0). ARM DDI 0037G.www.arm.com 2008.2: 27-33 指导教师意见: 指导教师签名: 教研室意见: 签 名: 年 月 日 D 开 题 报 告 会 纪 要 时间 2012年12月25日 地点 三教103室 与 姓 名 职务(职称) 姓 名 职务(职称) 姓 名 职务(职称) 会 张新安 教授 唐云 讲师 潘海军 高级实验师 人 梁晓琳 讲师 李荣 讲师 张丹 硕士 员 会议记录摘要: 1. 张新安老师问:该选题重点研究内容是什么,达到什么样的目标, 答:本设计主要就是设计一个电子万年历系统,本次设计以STM32F103RBT芯片为核心,主要能够实现时钟的运行,调整,显示阳历的年、月、日、星期、时、分、秒、以及闹铃等信息。 2. 唐云老师问:该设计的总体思路如何,有无挑战性或困难之处, 答:基于ARM设计一个简易的电子万年历,通过软件配置RTC时钟提供时钟日历功能,而修改计数器的值可以重新设置系统当前的时间和日期,并在TFT-LCD上显示。困难之处在于TFT-LCD的触摸功能实现以及代码的编写。 3(梁晓琳老师问:该设计的扩展空间如何,是否可以增加多种功能, 答:我们可以通过实现TFT-LCD触摸的功能完成日历翻页的功能,还可以添加闹钟、显示温度和生肖等功能。 会议主持人: 记 录 人: 年 月 日 指系导 部 小 意组 意 见 见 负责人签名: 负责人签名: 年 月 日 年 月 日 注:此表由学生本人填写,一式三份,一份留系里存档,指导老师和本人各保存一份 E 湖南科技学院毕业论文(设计)中期检查表 毕业论文(设计)基于ARM电子万年历的设计 题 目 学生姓名 周亚彪 学 号 200906002141 系 别 电子工程系 专 业 电子信息工程 指导教师 唐云 检查日期 2013年4月9日 指导教师检查情况记载及修改意见: 1. 论文初稿基本完成; 2. 论文格式不太规范,需要进一步修改; 3. 缺少总电路原理图,需要添加。 具体修改意见如下: 1. 论文报告中的内容归类不好,正文格式不对。 2. 目录、插图索引格式不对,应采用自动生成目录。且行距为25磅,字体大 小为小四; 3. 论文中多处图片不清晰,应采用清晰图片,并且图片采用嵌入式的。 4. 参考文献内容格式不对,并在文中需要进行相应标记。 5. 论文中正文多处字体大小,字体行距不统一,应采用字体大小为小四,行距 为20磅的字体格式。 签名: 注:此表用于指导教师在学生毕业论文,设计,初稿完成后对学生执行任务书情况进行中期检查时用~由指导教师填写。 F 湖南科技学院毕业设计(论文)指导过程记录表 毕业论文(设计)题目 基于ARM电子万年历的设计 学生姓名 周亚彪 学号 200906002141 专业班级 电信0901班 指导教师 唐云 职称 讲师 系(教研室) 电子工程系 指 论文任务布置指导: 根据自身专业强项~个人完成一个简易电子万年历设计~既能在规定时间内指导内容 完成设计~又能反映出自己的学术能力。 记录(一) 导学 生 签 名: 年 月 日 指导教师签名: 年 月 日 查阅资料指导: 1、到图书馆查找和借阅与选题有关的文献和资料, 2、从学术期刊网检索和下载与选题有关的文献和资料~用以参考, 指导内容 3、可以在百度等网站搜索相关资料~帮助更好地理解和完成设计~但绝不记录(二) 过 能照抄照搬他人成果。 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 程论文开题指导: 1、论文题目应简洁明了、实用。 指导内容 2、概述时应该说明选题的理论、实际意义、国内外研究动态以及自己的见记录(三) 解。 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 记 论文写作指导: 1、毕业论文总体方案的设计, 指导内容 2、对模块电路的不同选择方案应予以对比论证~从而选择更优方案, 记录(四) 3、对设计模块要从硬件和软件两个方面共同把握。 学 生 签 名: 年 月 日 录 指导教师签名: 年 月 日 G 指 论文中期检查指导: 1、深化对设计要求的理解~准确把握各个设计环节, 指导内容 2、重点分析该设计的重点和难点~多查阅资料和交流~逐步完善设计。 记录(五) 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 导 论文初稿修改指导: 1、根据论文模板格式认真写好毕业论文初稿。 指导内容 2、检查后交予指导老师审查、指点。 记录(六) 过学 生 签 名: 年 月 日 指导教师签名: 年 月 日 论文定稿修改指导: 1、按照毕业论文撰写要求排版~使用语、格式、图表、数据、各种资料引 用规范化~符合标准, 程2、插图应与文字紧密配合~文图相符~图表的插入大小应促成页面的美观~指导内容 同类型的图表大小应相同, 记录(七) 3、结论是整篇设计的归宿~要精炼、准确地概述全文的主要观点。 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 记 论文答辩指导: 1、制作好论文PPT~交予老师查看~PPT需要突出本设计重点。 指导内容 2、完成答辩~将论文终稿交予老师审查~完成毕业设计。 记录(八) 学 生 签 名: 年 月 日 录 指导教师签名: 年 月 日 (对情况是否属实做出意见) 答辩小组组长 意见 组长(签名): 年 月 日 注:本表与毕业论文一起装订存档。 H 湖南科技学院本科毕业论文,设计,评审表 论文题目 基于ARM电子万年历的设计 作者姓名 所属系、专业、年级 电子工程 系 电子信息工程 专业 2009年级 周亚彪 指导教师 字 数 定稿日期 唐云 讲师 10000 2013.5.8 姓名、职称 随着信息的快速发展~人们的时间观念越来越重~但是老式的钟表以及日历等 时间显示工具已经不太适合。如钟表易坏~需要经常维修~日历需要每天翻页等。中 对此~电子万年历的设计就有了用武之地。电子万年历在精确度上远远超过钟表~ 并且不需要维修~也不用像日历一样每天翻页~极其方便~且能够添加各种不同功 能的要求。例如:在万年历上添加闹钟~同时显示温度、生肖、阴阳历等。综上所文 述本设计具有设计方便、功能多样、电路简洁、成本低廉等优点~符合社会发展趋 势~前景广阔。 摘 基于ARM的电子万年历设计可分为以下几个模块:时序模块、复位模块、时间 调整模块、显示模块等。各个模块完成不同的任务~整合在一起就构成整个电子万 年历的设计。本设计是使用STM32系列芯片作为主芯片~TFT-LCD作为显示模块。要 通过软件设计配置RTC时序来完成日历功能并显示到TFT-LCD上。 关键词 万年历 ARM STM32 RTC TFT-LCD ,3-5个, With the rapid development of the information, people attach more and more important to the time,but the old clock and calendar time display tool is not suitable. 英 Such as clock is easily broken, need maintenance, calendar need to turn pages every day. To this, the design of electronic calendar comes into play. Electronic calendar far more than clocks on accuracy, and does not require maintenance, also don't like the calendar need to turn pages every day, very convenient, and be able to add various functions by 文 requirement of user. For example: on the calendar can add an alarm clock, measuring temperature, display Chinese zodiac, etc. To sum up this design is easy to design, functional diversity, the advantages of simple circuit, low cost, in line with the trend of social development, broad prospects. 摘 Electronic calendar design based on ARM can be divided into the following several modules: timing module, reset module, time adjust module, display module, etc. Each module complete different tasks, together all the modules, than make up the whole design of the electronic calendar. This design is to use STM32 series chip as mainly chip, use TFT- LCD as display module. Through the software configuration of RTC timing to 要 complete the calendar functions, and displaying on TFT - LCD. 关键词 Calendar ARM STM32 RTC TFT-LCD (3-5个) I 指导教师评定成绩 评审指导教师 评审要素 评审内涵 满分 基元 实评分 选题符合专业培养目标~体现学科、专业特点和教学目的明确 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 的基本要求~达到毕业论文,设计,综合训练的10 符合要求 目的。 选题 符合本学科的理论发展~有一定的学术意义,对经济建质量理论意义或 设和社会发展的应用性研究中的某个理论或方法问题进10 实际价值 25% 行研究~具有一定的实际价值。 选题恰当 题目规模适当~难易度适中,有一定的科学性。 5 查阅文献 能独立查阅相关文献资料~归纳总结本论文所涉及的10 资料能力 有关研究状况及成果。 综合运用 能运用所学专业知识阐述问题,能对查阅的资料进行整10 知识能力 理和运用,能对其科学论点进行论证。 能力研究方案的 整体思路清晰,研究方案合理可行。 5 设计能力 水平 能运用本学科常规研究方法及相关研究手段,如计算机、40% 研究方法和手实验仪器设备等,进行实验、实践并加工处理、总结信10 段的运用能力 息。 外文应用 能阅读、翻译一定量的本专业外文资料、外文摘要和外5 能力 文参考书目,特殊专业除外,体现一定的外语水平。 文题相符 较好地完成论文选题的目的要求。 5 论文写作水平 论点鲜明,论据充分,条理清晰,语言流畅。 15 质量符合学术论文的基本要求。用语、格式、图表、数据、量写作规范 10 和单位、各种资料引用规范化、符合标准。 35% 论文篇幅 10000字左右。 5 实评总分 成绩等级 指导教师评审意见: 指导教师签名: 说明:评定成绩分为优秀、良好、中等、及格、不及格五个等级~实评总分90—100分记为优秀~80—89分记为良好~70—79分记为中等~60—69分记为及格~60分以下记为不及格。 J 评阅教师评定成绩 评审评阅教师 评审要素 评审内涵 满分 基元 实评分 选题符合专业培养目标~体现学科、专业特点和教学目的明确 计划的基本要求~达到毕业论文,设计,综合训练的10 符合要求 目的。 选题 符合本学科的理论发展~有一定的学术意义,对经济建质量理论意义或 设和社会发展的应用性研究中的某个理论或方法问题进10 实际价值 25% 行研究~具有一定的实际价值。 选题恰当 题目规模适当~难易度适中,有一定的科学性。 5 查阅文献 能独立查阅相关文献资料~归纳总结本论文所涉及的10 资料能力 有关研究状况及成果。 综合运用 能运用所学专业知识阐述问题,能对查阅的资料进行整10 知识能力 理和运用,能对其科学论点进行论证。 能力研究方案的 整体思路清晰,研究方案合理可行。 5 设计能力 水平 研究方法和能运用本学科常规研究方法及相关研究手段,如计算机、40% 手段的运用实验仪器设备等,进行实验、实践并加工处理、总结信10 能力 息。 外文应用 能阅读、翻译一定量的本专业外文资料、外文摘要和外5 能力 文参考书目,特殊专业除外,体现一定的外语水平。 文题相符 较好地完成论文选题的目的要求。 5 论文写作水平 论点鲜明,论据充分,条理清晰,语言流畅。 15 质量符合学术论文的基本要求。用语、格式、图表、数据、量写作规范 10 和单位、各种资料引用规范化、符合标准。 35% 论文篇幅 10000字左右。 5 实评总分 成绩等级 评阅教师评审意见: 评阅教师签名: 说明:评定成绩分为优秀、良好、中等、及格、不及格五个等级~实评总分90—100分记为优秀~80—89分记为良好~70—79分记为中等~60—69分记为及格~60分以下记为不及格。 K 湖南科技学院本科毕业论文,设计,答辩记录表 论文题目 基于ARM电子万年历的设计 作者姓名 周亚彪 所属系、专业、年级 电子工程系 电子信息工程专业 2009 年级 指导教师 唐云 讲师 姓名、职称 答 辩 会 纪 要 时间 2013年5月18日 地点 三教103室 答 姓 名 职务(职称) 姓 名 职务(职称) 姓 名 职务(职称) 辩 张新安 教授 潘海军 高级实验师 李荣 讲师 小 唐云 讲师 梁晓琳 讲师 张丹 硕士 组 成 员 答辩中提出的主要问题及回答的简要情况记录: 1.张新安老师问:为什么选用STM32系列芯片,而不选用AT89S51芯片呢, 答:STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3 内核。它支持16位80并口,且最高时钟频率可达到72MHz,比AT89S51更适合完成文字、图片的处理。 2.唐云老师问:通过配置RTC时序实现日历功能的原理是怎样的, 答:STM32的RTC只有一个32位的级数器来计时。没有寄存器来存年月日时分秒等,通过设置可以让这个计数器1秒加1。程序要设置一个时间起点表示0,一般设置起始时间为1970-01-01 00:00:00 ,这是UNIX时间戳。如果设置RTC时间,我们需要计算设置时间与起始时间相差多少秒,把这个值写入RTC计数器就可以了。 3.潘海军老师问:该设计的时间误差可以精确到多少, 答:本设计的时间误差经调试一天的误差在1S内。 会议主持人: 记 录 人: 年 月 日 L 评语: 答 辩 小 组 意 见 评定等级: 负责人(签名): 年 月 日 评语: 系 学 位 委 员 会 意 见 论文(设计)最终评定等级: 负责人(签名): 系部(公章) 年 月 日 评语: 校 学 位 委 员 会 评定等级: 意 负责人(签名): 年 月 日 见 M 目 录 绪论 ............................................................................................................................. 1 1 设计总体方案 .............................................................................................................. 3 1.1 设计思路 ............................................................................................................ 3 1.2 主芯片选择 ........................................................................................................ 3 1.3 显示模块选择 .................................................................................................... 3 2 硬件部分设计 .............................................................................................................. 5 2.1 STM32简介 ........................................................................................................ 5 2.2 STM32F103RBT6介绍 ....................................................................................... 7 2.3 STM32F103RBT6 RTC时钟介绍 ....................................................................... 7 2.4 STM32F103RBT6复位和时序设计 ................................................................... 9 2.5 TFT-LCD介绍 .................................................................................................... 9 2.6 TFT-LCD显示模式与原理 ............................................................................... 11 2.7 触摸屏介绍 ...................................................................................................... 13 3 软件部分设计 ............................................................................................................ 15 3.1 程序设计总方案 .............................................................................................. 15 3.2 初始化程序 ...................................................................................................... 16 3.3 RTC模块时钟子程序 ....................................................................................... 16 3.4 TFT-LCD模块程序 ........................................................................................... 18 3.5 触摸屏处理程序 .............................................................................................. 20 3.6 其他功能 .......................................................................................................... 24 3.7 闹铃功能 .......................................................................................................... 25 结论 ............................................................................................................................... 28 参考文献 ....................................................................................................................... 29 附录:源程序 ................................................................................................................ 30 致 谢 ............................................................................................................................. 37 I 基于ARM的电子万年历设计 摘 要 随着信息的快速发展,人们的时间观念越来越重,但是老式的钟表以及日历等时间显示工具已经不太适合。如钟表易坏,需要经常维修,日历需要每天翻页等。对此,电子万年历的设计就有了用武之地。电子万年历在精确度上远远超过钟表,并且不需要维修,也不用像日历一样每天翻页,极其方便,且能够添加各种不同功能的要求。例如:在万年历上添加闹钟,同时显示温度、生肖、阴阳历等。综上所述本设计具有设计方便、功能多样、电路简洁、成本低廉等优点,符合社会发展趋势,前景广阔。 基于ARM的电子万年历设计可分为以下几个模块:时序模块、复位模块、时间调整模块、显示模块等。各个模块完成不同的任务,整合在一起就构成整个电子万年历的设计。本设计是使用STM32系列芯片作为主芯片,TFT-LCD作为显示模块。通过软件设计配置RTC时序来完成日历功能并显示到TFT-LCD上。 【关键字】万年历 ARM STM32 RTC TFT-LCD II The Design of Electronic Calendar Based on ARM Abstract With the rapid development of the information, people attach more and more important to the time,but the old clock and calendar time display tool is not suitable. Such as clock is easily broken, need maintenance, calendar need to turn pages every day. To this, the design of electronic calendar comes into play. Electronic calendar far more than clocks on accuracy, and does not require maintenance, also don't like the calendar need to turn pages every day, very convenient, and be able to add various functions by requirement of user. For example: on the calendar can add an alarm clock, measuring temperature, display Chinese zodiac, etc. To sum up this design is easy to design, functional diversity, the advantages of simple circuit, low cost, in line with the trend of social development, broad prospects. Electronic calendar design based on ARM can be divided into the following several modules: timing module, reset module, time adjust module, display module, etc. Each module complete different tasks, together all the modules, than make up the whole design of the electronic calendar. This design is to use STM32 series chip as mainly chip, use TFT- LCD as display module. Through the software configuration of RTC timing to complete the calendar functions, and displaying on TFT - LCD. 【Key words】Calendar ARM STM32 RTC TFT-LCD III 绪论 随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高;精准的数字计时的消费要求也是越来越多。 二十一世纪的今天,最具代表的计时产品就是电子万年历,它是近代世界钟表业的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率时钟变走时差从分级缩小到秒级,第二次革命史石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时从分级缩小到1/600万秒,从原有的传统指针计时的方式发展到人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求。因此电子万年历具有很大的开发前景。 电子随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。 市场上有许多电子万年历的专用芯片,如:LM8363、LM8365等,但它们功能单一,电路连接复杂,不便于调试制作。因此本系统采用了以广泛使用的STM32为核心,直接采用STM32的RTC模块。软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用TFT-LCD显示,使人机交互简便易行。LCD的应用很广泛,简单如手表上的液晶显示屏,仪表仪器上的液晶显示器或者是电脑笔记本上的液晶显示器,都使用了LCD。在一般的办公设备上也很常见,如传真机,复印机,以及一些娱乐器材玩具等也常常见到LCD的足迹。字符型液晶显示模块是一种专门用于显示字母,数字,符号等的点阵式液晶显示模块。在显示器件上的设计,它是由若干个5×7或5×11等点阵符位组成。每一个点阵字符位都可以显示一个字符。点阵字 [1]符位之间有一空点距的间隔起到了字符间距和行距的作用。目前市面上常用的有16字×1行,16字×2行,20字×2行和40字×2行等的字符模块组。这些LCD虽然显示字数各不相同,但是都具有相同的输入输出界面。 ARM最早于1990年由Acorn改组而来,之前Acorn时期开发出自己第一代32位、6MHz、3.0μm处理器,即ARM1,并用它做出一台RISC指令集的计算机,也就是说当时还是在沿袭传统的方式,自己设计芯片出售芯片,早期使用Acorn芯片产品的包括苹果的Newton pad等。 我们有必要解释一下RISC,即精简指令集计算机,这是相比复杂指令集CISC而言,CISC任务处理能力强,英特尔采用的正是CISC指令,在桌面电脑领域大行 1 其道,RISC通过精简CISC指令种类,格式,简化寻址方式,达到省电高效的效果,适应与手机、平板、数码相机等便携式电子产品。 Acorn起初为达到降低售价把面积设计的小,功耗低是顺带的优势,而价格低廉功耗少,自然适合移动设备,1990年11月,从苹果获得150万英镑投资,从VLSI获25万英镑投资,Acorn则是12个工程师和作价150万英镑的IP,外加一个办公的谷仓,重组后的Acorn开启世界标准之旅。 初创时期的ARM没有商业经验没有管理经验,当然也没有世界标准这种愿景,运营资金紧张,工程师人心惶惶,最后ARM决定自己不生产芯片,转而以授权的方式将芯片 设计方案 关于薪酬设计方案通用技术作品设计方案停车场设计方案多媒体教室设计方案农贸市场设计方案 转让给其他公司,即“Partnership”开放模式,公司在1993年实现盈利,1998年纳斯达克和伦敦证券交易所两地上市,同年基于ARM架构芯片出货量达5000万片。 进入2000年,开始受益于手机以及其他电子产品的迅速普及,ARM系列芯片呈爆炸性增长,2001年11月出货量累积突破十亿片,2011年基于ARM系列芯片单年出货79亿片,年收入为4.92亿英镑(合7.85亿美元),净利润1.13亿英镑。 ARM的发展代表了半导体行业某种趋势,即从完全的垂直整合到深度的专业化分工,70年代半导体行业普遍采用上中下游的垂直整合封闭式生产体系,80年代开始半导体行业开始分化,出现垂直整合和分工化的系统制造、定制集成等两个体系,台积电的晶圆代工模式进一步推动了专业分工的发展,半导体行业分工进一步细化,形成IP、设计、晶圆、封装价上下游体系,ARM处于价值链顶端。 2 1 设计总体方案 1.1 设计思路 利用STM32 的RTC时钟实现一个简易的电子万年历。RTC时钟是一个独立的定时器,RTC模块拥有一组连续及时的计数器,通过软件配置可以提供时钟日历功能,而修改计数器的值可以重新设置系统当前的时间和日期,当时间计数为23:59:59时刷新为: 00:00:00。本设计原理图如图1所示: 图1 电路原理图 1.2 主芯片选择 STM32 基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,程序存储在闪存中,并从中调取执行,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。 1.3 显示模块选择 方案一: 采用1602LCD。1602LCD也叫1602字符型液晶它是一种专门用来显示字母、 3 数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成。但是每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用。但对显示图形效果不好。 方案二: 采用FTF-LCD。TFT-LCD即薄膜场效应晶体管LCD,TFT-LCD在每个像素点上设计一个场效应开关管,这样就容易实现真彩色、高分辨率的液晶显示器件,并且是目前唯一在亮度、对比度、功耗、寿命、体积和重量等综合性能上全面赶上和超过CRT的显示器件,它的性能优良、大规模生产特性好,自动化程度高,原材料成本低廉,发展空间广阔。所以选择2.8寸的TFT-LCD作为显示模块。 4 2 硬件部分设计 2.1 STM32简介 STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3 内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,程序存储在闪存中,并从中调取执行,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。本设计使用的芯片为STM32F103“增强型的STM32F103RBT6。 ARM Cortex?- M3 处理器是行业领先的 32 位处理器,适用于具有高确定性的实时应用,已专门开发为允许合作伙伴为范围广泛的设备开发高性能低成本的平台。该处理器提供出色的计算性能和对事件的卓越系统响应,同时可以应对低动态和静 [2]态功率限制的挑战。该处理器是高度可配置的,可以支持范围广泛的实现。 主要性能特点: 1、DMA:12通道DMA控制器。支持的外设:定时器, ADC, DAC , SPI, IIC和USART。 2、内核:ARM32位Cortex-M3 CPU , 最高工作频率为72MHz, 1.25DMIPS/MHz。单周期乘法和硬件除法。 3、低功耗:3种低功耗模式:休眠,停止,待机模式。为RTC和备份寄存器供电的VBAT。 4、调试模式:串行调试和JTAG接口。 5、存储器:偏上集成32-512KB的Flash存储器,6-64KB的SRAM的存储器。 6、时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压。POR\PDR和可编程的电压探测器(PVD)。4-16Mhz的晶振,内嵌出厂前调校的8Mhz RC振荡电路,内部40Khz的RC振荡电路。用于CPU时钟的PLL。带校准用于RTC的32kHz的晶振。 7、2个12为的us级的A/D转换器(16通道):A/D测量范围:0~3.6V.双采样和保持能力。片上集成一个温度传感器。 8、2通道12位D/A转换器 9、最多多大11个定时器4个16位定时器,每个定时器有4个IC/OC/PWM或者脉冲计数器。2个16位的6通道高级控制定时器:最多6个通道可用于PWM输 5 出。2个看门狗(独立看门狗和窗口看门狗)。Systick定时器:24位倒计数器。2个16位基本定时器用于驱动DAC。 10、最多多大13个通信接口:2个IIC接口。5个USART接口、3个SPI接口, [3]两个IIS复用。CAN接口(2.0B)。USB 2.0全速接口。SDIO接口。 图2 TM32F103RBT6实物图 STM32系列内部架构图如图3所示。 图3 STM32系列内部架构图 6 2.2 STM32F103RBT6介绍 STM32F103RBT6/STM32F103是ST公司基于ARM最新Cortex-M3架构内核的32位处理器产品,内置128KB的Flash、20K的RAM、12位AD、4个16位定时器和3路USART通讯口等多种资源,时钟频率最高可达72MHz。 STM32F103RBT6的管脚分布如图4所示。 图4 STM32F103RBT6 的管脚分布 2.3 STM32F103RBT6 RTC时钟介绍 STM32的实时时钟(RTC)是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可以提供时钟日历的功能,修改计数器的值可以重新设置系统当前的时间和日期。STM32F10x系列微控制器片上内置的RTC模块,主要特性如下: (1)可编程的预分频系数,分频系数最高位2^20。 (2)32位的可编程计数器,可用于长程时间段的测量。 (3)两个单独的时钟:用于APB1接口的PLCK1和RTC时钟(此时RTC时钟 7 的频率必须小于PCLK1时钟的四分之一以上)。 (4)可以选择以下RTC的时钟源: ,HSE(high speed external)时钟除以128,即高速外部时钟,接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4~16MHz。 ,HSI (high speed internal) 振荡器时钟,级高速背部时钟,RC振荡器,频率为8MHz。 ,LSE(low speed external)振荡器时钟,即低速外部时钟,接石英晶体,频率为32.768kHz。 ?LSI(low speed internal)振荡器时钟,即低速内部时钟,频率为40kHz。 ?PLL为锁相环倍频输出,其时钟输入源可选择HSI/2、HSE或者HSE/2。倍频可选择2~16倍,但是输出频率不能超过72MHz。 (5)2钟独立的复位类型: ,APB1接口由系统复位。 ,RTC核(预分频器、闹钟、计数器和分频器)只能由备份域复位。 (6)3个专门的可屏蔽中断: ,闹钟中断,用来产生一个软件可编程的闹钟中断。 ,秒中断,用来产生一个可编程的周期性中断信号(最长可达1s)。 ,溢出中断, 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 内部可编程计数器溢出并回转为0的状态 (7)STM32侵入检测: ,TPAL=0时启动侵入检测TAMPER引脚前已经为高电平,一旦启动检测功能,则会产生一个额外的侵入事件。 ,TPAL=1时启动侵入引脚TAMPER前该引脚为低电平,一旦启动检测功能,则会产生一个额外的侵入事件。 ,检测TAMPER上的点品变化,就会把备份寄存器的内容清空,以保护重要的数据不被非法盗取。 实时时钟(RTC)是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC由两个主要部分组成。第一部分(APB1接口)用来和APB1总线相连。此单元还包含一组16位寄存器,可通过APB1总线对其进行读写操作。APB1接口由APB1总线时钟驱动,用来与APB1总线接口。 另一部分(RTC核心)由一组可编程计数器组成,分成两个主要模块。第一个模块是RTC的预分频模块,它可编程产生最长为1秒的RTC时间基准TR_CLK。RTC 8 [4]的预分频模块包含了一个20位的可编程分频器(RTC预分频器)。 2.4 STM32F103RBT6复位和时序设计 通过图2-3 STM32F103RBT6管脚介绍图可以看出复位电路和时钟电路两部分,其中复位电路采用按键手动复位和上电自动复位组合,电路如图5所示:其中7脚为STM32的复位端。时钟电路如图6所示:晶振采用的是8MHz和32.786KHz,8MKz分别接STM32的5脚和6脚,32.786KHz分别接STM32的3脚和4脚。 图5 复位电路 图6 时序电路 2.5 TFT-LCD介绍 STM32F103RBT6开发板基于最新 ARM内核 Cortex-M3之 STM32开发套件。 开发板载有目前比较通用的液晶显示模块接口,不仅支持2.4、2.8寸的TFTLCD,还支持OLED显示器。TFT-LCD在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD也叫真彩液晶显示器。其原理图如图7所示: 9 图7 TFT-LCD 原理图 LCD1是一个通用的液晶模块接口。OLED是一个给OLED显示模块供电的接口,它和LCD1拼接在一起。当使用2.4’/2.8’的LCD时,接到LCD1上就可以了,而当使用ALIENTEK 的OLED模块时,则接OLED排阵做电源,同时会连接到LCD1上的部分管脚,从而实现OLED与MCU的连接。 该模块特点如下: 1,2.4’/2.8’两种大小的屏幕可选。 2,320×240的分辨率。 3,16位真彩显示。 4,自带触摸屏,可以用来作为控制输入。 5,通用的接口,除了ALIENTEK MiniSTM32开发板,该液晶模块还可以使用 [5]优异特,STMSKY、红牛等开发板上。 本设计使用的是2.8寸的TFTLCD模块,该模块采用的是显尚光电的DST2001PH TFTLCD(图8),DST2001PH的控制器为ILI9320,采用26万色的TFTLCD屏,分辨率为320×240,采用16位的80并口。 TFTLCD模块采用2*17的2.54公排针与外部连接,接口图如下: 图8 TFT-LCD 与外部连接接口图 10 2.6 TFT-LCD显示模式与原理 该接口采用16位数据线(低了速度太慢,用彩色就没什么效果了)。该模块的80并口有如下一些信号线: CS:TFTLCD片选信号。 WR:向TFTLCD写入数据。 RD:从TFTLCD读取数据。 D[15:0]:16位双向数据线。 RST:硬复位TFTLCD。 RS:命令/数据标志(0,读写命令;1,读写数据)。 需要说明的是,TFTLCD模块的RST信号线是直接接到STM32的复位脚上,并不由软件控制,这样可以省下来一个IO口,另外还需要一个背光控制线来控制TFTLCD的背光[4]。所以,总共需要的IO口数目为21个。 模块的控制器为ILI9320(可能为其他型号,但是他们的设置很相似,除了初始化序列有些区别,其他大都是一摸一样的,这里仅以9320为例介绍),该控制器自带显存,其显存总大小为172820(240*320*18/8),即18位模式(26万色)下的显存量。模块的16位数据线与显寸的对应关系为565方式,如下表所示 表1 16位数据与显存对应关系 st1 Transfer DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB 17 16 15 14 13 12 11 10 8 7 6 5 4 3 2 1 R5 R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 最低5位代表蓝色,中间6位为绿色,最高5位为红色。数值越大,表示该颜色越深。 本设计涉及ILI9320的命令列表如表2所示: 11 表2 ILI9320常用命令表一 指令 各位描述 编号 HEX D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 1 * * * * * * * * * * * * * * OSC R0 0X00 1 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 R3 0X03 TRI DFM 0 BGR 0 0 HWM 0 ORG 0 I/D1 I/D0 AM 0 0 0 R7 0X07 0 0 PTDE1 PTDE0 0 0 0 BASEE 0 0 GON DTE CL 0 DA D0 R32 0X20 0 0 0 0 0 0 0 0 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 R33 0X21 0 0 0 0 0 0 0 AD16 AD15 AD14 AD13 AD12 AD11 AD10 AD9 AD8 R34 0X22 NC NC NC NC NC NC NC NC NC NC NC NC NC NC NC NC R80 0X50 0 0 0 0 0 0 0 0 HSA7 HSA6 HSA5 HSA4 HSA3 HSA2 HSA1 HSA0 R81 0X51 0 0 0 0 0 0 0 0 HEA7 HEA6 HEA5 HEA4 HEA3 HEA2 HEA1 HEA0 R82 0X52 0 0 0 0 0 0 0 VSA8 VSA7 VSA6 VSA5 VSA4 VSA3 VSA2 VSA1 VSA0 R83 0X53 0 0 0 0 0 0 0 VEA8 VEA7 VEA6 VEA5 VEA4 VEA3 VEA2 VEA1 VEA0 表3 ILI9320常用命令表二 编号 指令 命令 R0 0X00 打开振荡器/读取控制器型号 R3 0X03 入口模式 R7 0X07 显示控制 R32 0X20 行地址(X)设置 R33 0X21 列地址(Y)设置 R34 0X22 写数据到GRAM R80 0X50 行起始地址(X)设置 R81 0X51 行结束地址(X)设置 R0,这个命令,有两个功能,如果对它写,则最低位为OSC,用于开启或关闭振荡器。而如果对它读操作,则返回的是控制器的型号。这个命令最大的功能就是通过读它可以得到控制器的型号。 R3,入口模式命令。我们重点关注的是I/D0、I/D1、AM这3个位,因为这3 12 个位控制了屏幕的显示方向。 AM:控制GRAM更新方向。当AM=0的时候,地址以行方向更新。当AM=1的时候,地址以列方向更新。 I/D[1:0]:当更新了一个数据之后,根据这两个位的设置来控制地址计数器自动增加/减少1, 其关系如下图: 图9 GRAM显示方向设置图 通过这几个位的设置,就可以控制屏幕的显示方向了。 R7,显示控制命令。该命令CL位用来控制是8位彩色,还是26万色。为0时26万色,为1时八位色。D1、D0、BASEE这三个位用来控制显示开关与否的。当全部设置为1的时候开启显示,全0是关闭。一般通过该命令的设置来开启或关闭显示器,以降低功耗。 R32,R33,设置GRAM的行地址和列地址。R32用于设置列地址(X坐标,0~239),R33用于设置行地址(Y坐标,0~319)。 R34,写数据到GRAM命令,当写入了这个命令之后,地址计数器才会自动的增加和减少。该命令是我们要介绍的这一组命令里面唯一的单个操作的命令,只需要写入该值就可以了,其他的都是要先写入命令编号,然后写入操作数。 [6]R80~R83,行列GRAM地址位置设置。这几个命令用于设定显示区域的大小。 2.7 触摸屏介绍 电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料 13 层、它的内表面也涂有一层涂层、在他们之间有许多细小的(小于1/1000英寸)的透明隔离点把两层导电层隔开绝缘。当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在X和Y两个方向上产生信号,然后送触摸屏控制器。控制器侦测到这一接触并计算出(X,Y)的位置,再根据获得的位置模拟鼠标的方式运作。这就是电阻技术触摸屏的最基本的原理。 电阻屏的特点有: 1)是一种对外界完全隔离的工作环境,不怕灰尘、水汽和油污。 2)可以用任何物体来触摸,可以用来写字画画,这是它们比较大的优势。 3)电阻触摸屏的精度只取决于A/D转换的精度,因此都能轻松达到4096*4096。 从以上可知,触摸屏都需要一个A/D转换器。本设计中使用的是XPT2046是一款4导线制触摸屏控制器,内含12位分辨率125KHz转换速率逐步逼近型A/D转换器。XPT2046支持从1.5V到5.25V的低电压I/O接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置, 除此之外,还可以测量加在触摸屏上的压力。内部自带2.5V参考电压可以作为辅助输入、温度测量和电池监测模式之用,电池监测的电压范围可以从0V到6V。XPT2046片内集成有一个温度传感器。在2.7V的典型工 [7]作状态下,关闭参考电压,功耗可小于0.75mW。XPT2046采用微小的封装形式:TSSOP-16,QFN-16(0.75mm厚度)和VFBGA,48。 14 3 软件部分设计 3.1 程序设计总方案 电子万年历的软件设计包括RTC模块时钟子程序、TFT-LCD模块显示程序、电 阻式触摸屏处理程序。流程图如图11: 开始 初始化STM32内 核 初始化RTC 初始化TFT-LCD 初始化触摸屏 读RTC 时间设置模式 刷新TFT-LCD 写入RTC 时间显示模块 时间设置模块 图10 主程序流程图 15 3.2 初始化程序 void RTCInit (void) { PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器 PREFRAC = Fpclk - (Fpclk / 32768) * 32768; CCR = 0x00; // 禁止时间计数器 YEAR = 2009; //设置时钟初值 MONTH = 5; DOM = 11; DOW = 1; HOUR = 15; MIN = 23; SEC = 30; CIIR = 0x01; // 设置秒值的增量产生一次中断 ILR = 0x03; // 清除RTC增量和报警中断标志 CCR = 0x01; // 启动RTC } 3.3 RTC模块时钟子程序 RTC模块程序设计中,RTC-Init函数用来初始化RTC时钟,但是只在第一次的时候设置时间,以后如果重新上电/复位都不会再进行时间设置了。而在复位之后,该函数直接就是跳过时间设置,仅仅使能秒钟中断一下,就进行中断分组,然后返回了。这样不会重复设置时间,使得我们设置的时间不会因复位或者断电而丢失。该函数还有返回值,返回值代表此次操作的成功与否,如果返回0,则代表初始化RTC成功,如果返回值非零则代表错误代码了。其关键代码如下: u8 RTC_Init(void) { //检查是不是第一次配置时钟 u8 temp=0; 16 if(BKP->DR1!=0X5050) //第一次配置 { while((!(RCC->BDCR&0X02))&&temp<250) //等待外部时钟就绪 { temp++; delay_ms(10); }; if(temp>=250)return 1; /初始化时钟失败,晶振有问题 RCC->BDCR|=1<<8; //LSI作为RTC时钟 RCC->BDCR|=1<<15; //RTC时钟使能 RTC->CRH|=0X01; //允许秒中断 while(!(RTC->CRL&(1<<5))); //等待RTC寄存器操作完成 RTC->CRL|=1<<4; //允许配置 RTC->PRLH=0X0000; RTC->PRLL=32767; //时钟周期设置 理论值:32767 Auto_Time_Set(); //RTC_Set(2009,12,2,10,0,55); //设置时间 RTC->CRL&=~(1<<4); //配置更新 while(!(RTC->CRL&(1<<5))); //等待RTC寄存器操作完成 BKP->DR1=0X5050; //BKP_Write(1,0X5050); //在寄存器1标记已经开启了 //printf("FIRST TIME\n"); }else //系统继续计时 { while(!(RTC->CRL&(1<<3))); //等待RTC寄存器同步 RTC->CRH|=0X01; //允许秒中断 while(!(RTC->CRL&(1<<5))); //等待RTC寄存器操作完成 //printf("OK\n"); } MY_NVIC_Init(0,0,RTC_IRQChannel,2); //RTC,G2,P2,S2.优先级最低 RTC_Get(); //更新时间 return 0; } 17 3.4 TFT-LCD模块程序 第一个是LCD_WR_DATA函数,该函数通过80并口向LCD模块写入一个16位的数据,使用频率是最高的,这里我们采用了宏定义的方式,以提高速度。其代码如下: #define LCD_WR_DATA(data){\ LCD_RS=1;\ LCD_CS=0;\ DATAOUT(data);\ LCD_WR=0;\ LCD_WR=1;\ LCD_CS=1;\ } 第二个是LCD_WR_REG函数,该函数也是通过80并口向LCD模块写入8位的寄存器命令,因为该函数使用频率不是很高,我们不采用宏定义来做(宏定义占用FLASH较多),通过LCD_RS来标记是写入命令(LCD_RS=0)还是数据(LCD_RS=1)。该函数代码如下: void LCD_WR_REG(u8 data) { LCD_RS=0; //写地址 LCD_CS=0; DATAOUT(data); LCD_WR=0; LCD_WR=1; LCD_CS=1; } 既然有写命令/数据的函数,那就有读命令/数据的函数。接下来介绍LCD_ReadReg函数,该函数用来读取某个寄存器的值。在读某个寄存器的值之前,先要写入该寄存器的编号(命令号),然后设置D[15:0]为输入,在读取该改寄存器的值,读完数据之后,我们再设置IO口为输出。其代码如下: u16 LCD_ReadReg(u8 LCD_Reg) { u16 t; LCD_WR_REG(LCD_Reg); //写入要读的寄存器号 18 GPIOB->CRL=0X88888888; //PB0-7 上拉输入 GPIOB->CRH=0X88888888; //PB8-15 上拉输入 GPIOB->ODR=0XFFFF; //全部输出高 LCD_RS=1; 173 LCD_CS=0; //读取数据(读寄存器时,并不需要读2次) LCD_RD=0; LCD_RD=1; t=DATAIN; LCD_CS=1; GPIOB->CRL=0X33333333; //PB0-7 上拉输出 GPIOB->CRH=0X33333333; //PB8-15 上拉输出 GPIOB->ODR=0XFFFF; //全部输出高 return t; } 第四个是读取GRAM的函数,而TFTLCD模块为彩色的,点数也比OLED模块多很多,以16位色计算,也需要150K字节,这对任何一款ARM来说,都不是一个小数目了。而且我们在图形叠加的时候,可以先读回原来的值,然后写入新的值,在完成叠加后,我们又恢复原来的值。这样在做一些简单菜单的时候,是很有用的。这里我们读取TFTLCD模块数据的函数为LCD_ReadRAM,该函数直接返回读到的GRAM值。该函数使用之前要先设置读取的GRAM地址,通过LCD_SetCursor函数来实现。LCD_ReadRAM的代码如下: u16 LCD_ReadRAM(void) { u16 t; LCD_WR_REG(R34); //选择GRAM地址 GPIOB->CRL=0X88888888; //PB0-7 上拉输入 GPIOB->CRH=0X88888888; //PB8-15 上拉输入 GPIOB->ODR=0XFFFF; //全部输出高 LCD_RS=1; LCD_CS=0; //读取数据(读GRAM时,需要读2次) LCD_RD=0; LCD_RD=1; 19 //dummy READ LCD_RD=0; LCD_RD=1; t=DATAIN; LCD_CS=1; GPIOB->CRL=0X33333333; //PB0-7 上拉输出 GPIOB->CRH=0X33333333; //PB8-15 上拉输出 GPIOB->ODR=0XFFFF; //全部输出高 return t; } 第五个函数为LCD_SetCursor函数,该函数用来设置坐标的,其代码如下: void LCD_SetCursor(u8 Xpos, u16 Ypos) 174 { LCD_WriteReg(R32, Xpos); LCD_WriteReg(R33, Ypos); } (Xpos,Ypos)为要写入或读取的像素点坐标,这里的设置其实就是利用了R32, R33这两个命令,在前面寄存器介绍的时候已经介绍过了。 第六个要介绍的是画点函数LCD_DrawPoint,该函数带2个参数(x,y)就代表 TFTLCD上的坐标,x的范围为0~239,代表横坐标。Y的范围为0~319,代表纵坐标, 写入点的颜色是根据全局变量POINT_COLOR来决定的。该函数代码如下: void LCD_DrawPoint(u8 x,u16 y) { LCD_SetCursor(x,y);//设置光标位置 LCD_WR_REG(R34);//开始写入GRAM LCD_WR_DATA(POINT_COLOR); } POINT_COLOR和BACK_COLOR,这两个16位的全局变量,第一个 [8]POINT_COLOR代表要写入的点的颜色,而BACK_COLOR则代表背景色。 3.5 触摸屏处理程序 触摸屏工作原理图如下: 20 图11 触摸屏工作原理 在该代码中最核心的为触摸屏校准代码了。触摸屏的校准通过void Touch_Adjust(void)函数实现。触摸屏是一种绝对坐标系统,要选哪就直接点哪,与相对定位系统有着本质的区别。绝对坐标系统的特点是每一次定位坐标与上一次定位坐标没有关系,每次触摸的数据通过校准转为屏幕上的坐标,不管在什么情况下,触摸屏这套坐标在同一点的输出数据是稳定的。 以下为从屋里坐标到像素坐标的转换关系式: ; (4-1) LCDxfacPxoff,,,xx LCDyfacPyoff,,,; (4-2) yy 其中(LCDx,LCDy)是在LCD上的像素坐标,(Px,Py)是从触摸屏读到的物理坐标。xfac,yfac分别是X轴方向和Y轴方向的比例因子,而xoff和yoff则是这两个方向 [9]的偏移量。 这样只要事先在屏幕上面显示4个点,分别按这四个点就可以从触摸屏读到4个物理坐标,这样就可以通过待定系数法求出xfac、yfac、xoff、yoff这四个参数。 [10][11]达到了触摸屏校准的目的。该函数代码如下: void Touch_Adjust(void) { signed short pos_temp[4][2]; //坐标缓存值 u8 cnt=0; u16 d1,d2; u32 tem1,tem2; 21 float fac; cnt=0; Pen_Point.xfac=0; //xfac用来标记是否校准过,校准之前必须清掉 while(1) { if(Pen_Point.Key_Sta==Key_Down) // 按键按下了 { if(Read_TP_Once()) //得到单次按键值 { pos_temp[cnt][0]=Pen_Point.X; pos_temp[cnt][1]=Pen_Point.Y; cnt++; } switch(cnt) { case 1: LCD_Clear(WHITE); Drow_Touch_Point(220,20); break; case 2: LCD_Clear(WHITE); Drow_Touch_Point(20,300); break; case 3: LCD_Clear(WHITE); Drow_Touch_Point(220,300); break; case 4: tem1=abs(pos_temp[0][0]-pos_temp[1][0]);//x1-x2 tem2=abs(pos_temp[0][1]-pos_temp[1][1]);//y1-y2 tem1*=tem1; tem2*=tem2; 22 d1=sqrt(tem1+tem2); tem1=abs(pos_temp[2][0]-pos_temp[3][0]);//x3-x4 tem2=abs(pos_temp[2][1]-pos_temp[3][1]);//y3-y4 tem1*=tem1; tem2*=tem2; d2=sqrt(tem1+tem2); fac=(float)d1/d2; if(fac<0.95||fac>1.05||d1==0||d2==0) { cnt=0; LCD_Clear(WHITE); continue; } tem2*=tem2; d2=sqrt(tem1+tem2); fac=(float)d1/d2; continue; } //对角线相等 tem1=abs(pos_temp[1][0]-pos_temp[2][0]);//x1-x3 tem2=abs(pos_temp[1][1]-pos_temp[2][1]);//y1-y3 tem1*=tem1; tem2*=tem2; d1=sqrt(tem1+tem2); //得到1,4的距离 tem1=abs(pos_temp[0][0]-pos_temp[3][0]);//x2-x4 tem2=abs(pos_temp[0][1]-pos_temp[3][1]);//y2-y4 tem1*=tem1; tem2*=tem2; d2=sqrt(tem1+tem2); //得到2,3的距离 fac=(float)d1/d2; LCD_ShowNum(40,140,fac*100,3,16); //显示数值,该数值必 须在95~105范围之内. continue; 23 } continue; } POINT_COLOR=BLUE; LCD_Clear(WHITE); LCD_ShowString(35,110,"Touch Screen Adjust OK!"); delay_ms(500); LCD_Clear(WHITE); return; //校正完成 } } } } 3.6 其他功能 一丶 生肖功能 /*宏定义部分*/ void RCC_Configuration(void); void NVIC_Configuration(void); void GPIO_Configuration(void); void USART_Configuration(void); int fputc(int ch, FILE *f); void RTC_Configuration(void); void Time_Regulate(struct rtc_time *tm); void Time_Adjust(void); void Time_Display(uint32_t TimeVar); void Time_Show(void); u8 USART_Scanf(u32 value); #define RTCClockSource_LSE u8 const *WEEK_STR[] = {"日", "一", "二", "三", "四", "五", "六"}; u8 const *zodiac_sign[] = {"猪", "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊 24 ", "猴", "鸡", "狗"}; struct rtc_time systmtime; /*显示部分*/ void Time_Display(uint32_t TimeVar) { static uint32_t FirstDisplay = 1; u8 str[15]; to_tm(TimeVar, &systmtime); if((!systmtime.tm_hour && !systmtime.tm_min && !systmtime.tm_sec) || (FirstDisplay)) { GetChinaCalendar((u16)systmtime.tm_year, (u8)systmtime.tm_mon, (u8)systmtime.tm_mday, str); printf("\n\r\n\r 今天农历:%0.2d%0.2d,%0.2d,%0.2d", str[0], str[1], str[2], str[3]); GetChinaCalendarStr((u16)systmtime.tm_year,(u8)systmtime.tm_mon,(u8)systmtime.tm_ mday,str); printf(" %s", str); } printf("\r 当前时间为: %d年(%s年) %d月 %d日 (星 期%s) %0.2d:%0.2d:%0.2d", systmtime.tm_year, zodiac_sign[(systmtime.tm_year-3)%12], systmtime.tm_mon, systmtime.tm_mday, WEEK_STR[systmtime.tm_wday], systmtime.tm_hour, systmtime.tm_min, systmtime.tm_sec); } 3.7 闹铃功能 /*定时闹钟*/ void dingshi(void) { 25 if(P1_3==0) //按住P1_3BU不松,显示闹铃设置界面,分别按P1_6、 P1_7设置闹铃时间。 { P2=0XFE; P0=dispcode[0];//秒个位 delay(1); P2=0XFD; P0=dispcode[0];//秒十位 delay(1); P2=0XFB; P0=dispcode[10];//间隔符 - delay(1); P2=0XF7; P0=dispcode[fen%10];//分个位 delay(1); P2=0XEF; P0=dispcode[fen/10];//分十位 delay(1); P2=0XDF; P0=dispcode[10];//间隔符 - delay(1); P2=0XBF; P0=dispcode[shi%10];//时个位 delay(1); P2=0X7F; P0=dispcode[shi/10];//时十位 delay(1); } if(P1_6==0)//设定时 { delay(30); if(P1_6==0) { 26 shi++; if(shi==24) { shi=0;} } delay(250); } if(P1_7==0)//设定分 { delay(30); if(P1_7==0) { fen++; if(fen==60) { fen=0;} } delay(250); } if((hour==shi)&(minite==fen)&(seconde==0))//闹铃时间到,报警十次。 { for(bjcs=0;bjcs<10;bjcs++) { P1_5=0; delay(500); P1_5=1; delay(500); } } } 27 结论 通过这次基于ARM的万年历的设计,使我对ARM有了更深的理解。刚开始拿到题目,我先是查找相关资料,从图书馆和网上找到相关的课题,参考借鉴别人的设计,从而理清我们设计的思路。此次作业设计大致可以分为两部分,电路图部分和程序编程部分,其中最有难度的是程序的编写与调试。在编写程序的过程中,我遇到了各种各样的问题,工程之间的结合,对于其中的错误怎样解决,需要配置什么,更改哪里等等。通过遇到问题解决问题,在这个过程中我收获了不少。 通过对本课程的研究我有以下几个方面的收获: 1) 学习与掌握了ARM的基本原理及其各种应用,对它的软件设计方法有较深入的认识。 2) 通过对电路原理图设计绘制,对数字电路有了更加清晰的了解,学会了以前没注意到的知识。 3) 本设计重点在于软件的设计,因此在设计过程中使自己在大学学到的C语言知识得到了巩固,同时提高了解决实际问题的能力。 28 参考文献 [1] 彭刚、秦志强等.基于ARM Cortex-M3的STM32系列嵌入式微控制器应用实践 [M].北京:电子工业出版社,2003.3: 2-5 [2] 李宁.基于MDK的STM32处理器开发应用[M].北京航空航天大学出版社,2008.7: 89-93 [3] 王永红、徐炜、赫立平.STM32系列ARM Cortex-M3微控制器原理与实践[M].北 京:北京航空航天大学出版社,2008.5: 27-30 [4] 刘军(例说STM32[M](北京:北京航空航天大学出版社,2011.3: 44-45 [5] 陈启军(嵌入式系统及其应用:基于Cortex-M3内核和STM32F103系列微控制 器的系统设计与开发[M](上海:同济大学出版社,2011.1: 128-131 [6] 李宁(ARM MCU开发工具MDK使用入门[M](北京:北京航空航天大学出版 社,2012.2: 51-55 [7] 高吉祥.电子技术基础实验与课程设计[M].北京:电子工业出版社.2003.3 [8] 荣政. C语言程序设计[M].西安:西安电子科技大学出版社.2004.7:34-37 [9] 胡翔.电路分析[M].北京:北京高等教育出版社.2009.2: 145-153 [10] Joseph Yiu(The Definitive Guide to the ARM Cortex-M3, Second Edition[M](Nenes Newton, MA, USA,2009.5: 33-35 [11] ARM Limited.Cortex-M3 Technical Reference Manual(r2p0). ARM DDI 0037G.www.arm.com 2008.2: 27-33 29 附录:源程序 关键源代码: //====================================================================/ /main.c //==================================================================== int main(void) { u8 t=0; Stm32_Clock_Init(9);//系统时钟设置 delay_init(72); //延时初始化 uart_init(72,9600); //串口1初始化 LED_Init(); LCD_Init(); RTC_Init(); //Auto_Time_Set(); //RTC_Set(2004,12,31,23,59,55); //设置时间 POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,90,"For summer_hong"); //显示时间 POINT_COLOR=BLUE;//设置字体为蓝色 LCD_ShowString(60,130," - - "); LCD_ShowString(60,162," : : "); while(1) { if(t!=timer.sec) { t=timer.sec; LCD_ShowNum(60,130,timer.w_year,4,16); LCD_ShowNum(100,130,timer.w_month,2,16); LCD_ShowNum(124,130,timer.w_date,2,16); 30 switch(timer.week) { case 0: LCD_ShowString(60,148,"Sunday "); break; case 1: LCD_ShowString(60,148,"Monday "); break; case 2: LCD_ShowString(60,148,"Tuesday "); break; case 3: LCD_ShowString(60,148,"Wednesday"); break; case 4: LCD_ShowString(60,148,"Thursday "); break; case 5: LCD_ShowString(60,148,"Friday "); break; case 6: LCD_ShowString(60,148,"Saturday "); break; } LCD_ShowNum(60,162,timer.hour,2,16); LCD_ShowNum(84,162,timer.min,2,16); LCD_ShowNum(108,162,timer.sec,2,16); LED0=!LED0; } delay_ms(10); }; 31 Lcd.h头文件内容 #define __LCD_H #include "sys.h" #include "stdlib.h" //TFTLCD部分外要调用的函数 extern u16 POINT_COLOR;//默认红色 extern u16 BACK_COLOR; //背景颜色.默认为白色 //-----------------LCD端口定义---------------- #define LCD_LED PCout(10) //LCD背光 PC10 #define LCD_CS PCout(9) //片选端口 PC9 #define LCD_RS PCout(8) //数据/命令 PC8 #define LCD_WR PCout(7) //写数据 PC7 #define LCD_RD PCout(6) //读数据 PC6 //PB0~15,作为数据线 #define DATAOUT(x) GPIOB->ODR=x; //数据输出 #define DATAIN GPIOB->IDR; //数据输入 //画笔颜色 #define WHITE 0xFFFF #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define MAGENTA 0xF81F #define GREEN 0x07E0 #define CYAN 0x7FFF #define YELLOW 0xFFE0 #define BROWN 0XBC40 //棕色 #define BRRED 0XFC07 //棕红色 #define GRAY 0X8430 //灰色 #define LGRAY 0XC618 //浅灰色 178 extern u16 BACK_COLOR, POINT_COLOR ; void LCD_Init(void); 32 void LCD_Clear(u16 Color); void LCD_SetCursor(u8 Xpos, u16 Ypos); void LCD_DrawPoint(u8 x,u16 y);//画点 void Draw_Circle(u8 x0,u16 y0,u8 r); void LCD_DrawLine(u8 x1, u16 y1, u8 x2, u16 y2); void LCD_DrawRectangle(u8 x1, u16 y1, u8 x2, u16 y2); void LCD_Fill(u8 xsta,u16 ysta,u8 xend,u16 yend,u16 color); void LCD_ShowChar(u8 x,u16 y,u8 num,u8 size,u8 mode);//显示一个字符 void LCD_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); //显示一个数字 void LCD_ShowString(u8 x,u16 y,const u8 *p); //显示一个字符串,16字体 void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue); u16 LCD_ReadReg(u8 LCD_Reg); void LCD_WriteRAM_Prepare(void); void LCD_WriteRAM(u16 RGB_Code); u16 LCD_ReadRAM(void); //9320/9325 LCD寄存器 #define R0 0x00 #define R1 0x01 #define R2 0x02 „„ //寄存器定义区 #define R192 0xC0 #define R193 0xC1 #define R229 0xE5 #endif LCD_ShowChar的代码如下: void LCD_ShowChar(u8 x,u16 y,u8 num,u8 size,u8 mode) { #define MAX_CHAR_POSX 232 #define MAX_CHAR_POSY 304 u8 temp; 33 u8 pos,t; if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return; //设置窗口 LCD_WriteReg(R80,x); //水平方向GRAM起始地址 LCD_WriteReg(R81,x+(size/2-1));//水平方向GRAM结束地址 LCD_WriteReg(R82,y); //垂直方向GRAM起始地址 LCD_WriteReg(R83,y+size-1); //垂直方向GRAM结束地址 LCD_SetCursor(x,y); //设置光标位置 LCD_WriteRAM_Prepare(); //开始写入GRAM num=num-' ';//得到偏移后的值 if(!mode) //非叠加方式 { for(pos=0;pos>=1; } } }else//叠加方式 { for(pos=0;pos>=1; } } } //恢复窗体大小 LCD_WriteReg(R80, 0x0000); //水平方向GRAM起始地址 LCD_WriteReg(R81, 0x00EF); //水平方向GRAM结束地址 LCD_WriteReg(R82, 0x0000); //垂直方向GRAM起始地址 LCD_WriteReg(R83, 0x013F); //垂直方向GRAM结束地址 } void LCD_Init(void) { u16 DeviceCode; RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟 RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟 RCC->APB2ENR|=1<<0; //开启辅助时钟 AFIO->MAPR=0X04000000; //关闭JTAG //PORTC6~10复用推挽输出 GPIOC->CRH&=0XFFFFF000; GPIOC->CRH|=0X00000333; GPIOC->CRL&=0X00FFFFFF; GPIOC->CRL|=0X33000000; GPIOC->ODR|=0X07C0; //PORTB 推挽输出 GPIOB->CRH=0X33333333; GPIOB->CRL=0X33333333; GPIOB->ODR=0XFFFF; Delay(5); // delay 50 ms LCD_WriteReg(0x0000,0x0001); Delay(5); // delay 50 ms DeviceCode = LCD_ReadReg(0x0000); 35 //printf("ID:%d\n",DeviceCode); if(DeviceCode==0x9325||DeviceCode==0x9328)//ILI9325 { „„//初始化代码 } else if(DeviceCode==0x9320||DeviceCode==0x9300) { „„//初始化代码 } else if(DeviceCode==0x1505) { „„//初始化代码 } else if(DeviceCode==0x8989) { „„//初始化代码 } Delay(5000); LCD_Clear(WHITE); } 36 致 谢 该毕业设计在一定程度上代表了我大学四年所学,也是我大学生活的一个结束,为此我想在这里感谢学院为我带来的一切,没有学院为我提供的这个平台,我想将会很难顺利地完成大学四年的学习和本次毕业设计。 首先,我要感谢我的毕业设计指导老师唐云老师,老师的亲切、热心的指导与严格的要求,最终使我顺利完成了毕业设计,再次,我要深深地感谢她。 同时,在设计过程中遇见了不少自己解决不了的问题,对此我很感谢同学们的帮助。他们的帮助不仅使我顺利问题,同时也使我感受到了温暖,给了我强大的动力,使我和同学们的关系更加紧密,使我更加深入明白了团结就是力量。 还有许许多多给予我帮助和支持我的人们,在此无法一一列举,在此一并表示衷心感谢~ 37
本文档为【基于ARM电子万年历的设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_721103
暂无简介~
格式:doc
大小:297KB
软件:Word
页数:63
分类:工学
上传时间:2017-08-31
浏览量:61