基于嵌入式系统的LCD电子时钟设计

合集下载

嵌入式课程设计-- 基于LCD的电子时钟实验

嵌入式课程设计-- 基于LCD的电子时钟实验

课程设计报告题目嵌入式系统项目设计课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:基于LCD的电子时钟实验Ⅱ、课程设计(论文)工作内容学习LCD与ARM的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法和RTC控制方法,在可行性分析的基础上实现以下功能:1、编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来;2、仿照给定图形在LCD上显示类似的时钟界面;3、动态显示当前的时间,包括:年、月、日、时、分、秒,时针,分针、秒针必须为动态实时指示当前的时间。

一、课程设计目标1、培养综合运用知识和独立开展实践创新的能力;2、培养学生的编程能力、用计算机解决实际问题的能力。

3、培养学生遇到问题,解决问题的能力。

二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、实验设备有L-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆;3、PC操作系统WIN98或WIN2000或WINXP,ARM SDT2.5或ADS1.2集成开发环境,仿真器驱动程序;4、本实验使用实验教学系统的CPU板,在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

三、课程设计预期效果1、完成实验环境搭建;2、分模块调试和编译;3、组合并完善程序;4、联合仿真软件运行程序;5、液晶显示器显示时钟图样,时,分,秒能指向正确的时间。

学生姓名:严维锋专业年级:自动化2008级目录前言 (3)第一章系统设计 (4)第一节课题目标及总体方案 (4)第二节原理框图 (5)第三节程序和芯片的初始化 (5)第四节构建功能模块 (7)第五节 MAIN函数的局部原理分析 (8)第二章实验(测试)结果及讨论 (13)第一节 ADS1.2软件的编译,连接和运行 (13)第二节程序调试 (14)第三章结论 (14)心得体会 (15)参考文献 (16)附录 (17)源程序 (17)前言近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,其强大的控制能力和专业性在通讯、网络、工控、电子等领域发挥着越来越重要的作用。

嵌入式电子闹钟课程设计方案

嵌入式电子闹钟课程设计方案

嵌入式系统综合实验题目基于嵌入式的数字闹钟系统设计学生姓名秦乙学号20071309087学院电子与信息工程学院专业信息工程二O一O年十二月二十七日目录论文标题.................................................... 错误!未定义书签。

摘要和关键词................................................ 错误!未定义书签。

1 绪论 (2)1.1 在信息产业中EDA产生的影响 (2)1.2 中国国内EDA发展情况 (2)2 FPGA简介 (2)2.1 FPGA概述 (2)2.2 FPGA基本结构 (3)2.3 FPGA编程原理 (3)3 设计的总体方案 (4)3.1流程图 (4)3.2模块组成 (4)3.3数字闹钟工作原理 (4)4设计的详细原理 (5)4.1主要模块 (5)4.2功能概述 (5)5设计的步骤和过程 (6)5.1计时模块 (6)5.2校时模块 (7)5.3设定闹钟模块 (8)5.4显示模块设计 (9)5.5蜂鸣器模块设计..................................... 错误!未定义书签。

2 6设计的仿真和结果......................................... 错误!未定义书签。

2 7总结..................................................... 错误!未定义书签。

5 参考文献................................................... 错误!未定义书签。

5基于嵌入式的数字闹钟系统设计秦乙南京信息工程大学电子与信息工程学院信息工程系,南京210044 摘要:随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。

为了在观测时间的同时,能够了解其它与人类密切相关的信息,比如温度、星期、日期等,电子数字钟诞生了,它集时间、日期、星期和温度功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

嵌入式课程设计-- 基于LCD的电子时钟实验

嵌入式课程设计-- 基于LCD的电子时钟实验

课程设计报告题目嵌入式系统项目设计课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:基于LCD的电子时钟实验Ⅱ、课程设计(论文)工作内容学习LCD与ARM的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法和RTC控制方法,在可行性分析的基础上实现以下功能:1、编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来;2、仿照给定图形在LCD上显示类似的时钟界面;3、动态显示当前的时间,包括:年、月、日、时、分、秒,时针,分针、秒针必须为动态实时指示当前的时间。

一、课程设计目标1、培养综合运用知识和独立开展实践创新的能力;2、培养学生的编程能力、用计算机解决实际问题的能力。

3、培养学生遇到问题,解决问题的能力。

二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、实验设备有L-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆;3、PC操作系统WIN98或WIN2000或WINXP,ARM SDT2.5或ADS1.2集成开发环境,仿真器驱动程序;4、本实验使用实验教学系统的CPU板,在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

三、课程设计预期效果1、完成实验环境搭建;2、分模块调试和编译;3、组合并完善程序;4、联合仿真软件运行程序;5、液晶显示器显示时钟图样,时,分,秒能指向正确的时间。

学生姓名:严维锋专业年级:自动化2008级目录前言 (3)第一章系统设计 (4)第一节课题目标及总体方案 (4)第二节原理框图 (5)第三节程序和芯片的初始化 (5)第四节构建功能模块 (7)第五节 MAIN函数的局部原理分析 (8)第二章实验(测试)结果及讨论 (13)第一节 ADS1.2软件的编译,连接和运行 (13)第二节程序调试 (14)第三章结论 (14)心得体会 (15)参考文献 (16)附录 (17)源程序 (17)前言近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,其强大的控制能力和专业性在通讯、网络、工控、电子等领域发挥着越来越重要的作用。

基于LCD1602电子时钟

基于LCD1602电子时钟

信息与电子工程学院课程设计报告录目一、课程设计概述 (3)1.1 课程设计背景 (3)1.2 课程设计内容 (3)1.3 课程设计技术指标 (3)二、方案的选择及确定 (3)2.1 单片机芯片的选择 (3)2.2 显示模块的选择 (4)2.3 实时时间计算模块的选择.42.4 实时环境温度采集模块选择 (4)2.5 电路设计最终方案决定 (5)三、系统硬件设计 (5)3.1 主控模块 (5)3.2LCD显示模块设计 (6)3.3 时间计算模块设计 (6)3.4 实时环境温度检测模块 (7)3.5 报警模块 (7)3.6 设置模块 (8)3.7 电源接口部分 (8)四、系统软件设计 (8)4.1 主函数 (8)4.2 设置模块 (9)4.31602 液晶屏 (10)4.4 软件原理图 (11)五、系统调试过程 (11)5.1 软件调试 (11)5.2 硬件调试 (12)六、结论 ..................................12七、遇到的问题及解决方法和总结 (12)7.1 硬件方面 (12)7.2 软件方面 (13)7.3 总结 (13)1八、参考文献 (13)九、附录 (14)课程设计概述1.1 课程设计背景随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。

单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。

而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。

因为它有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。

而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。

1.2 课程设计内容利用单片机、时钟芯片DS1302温度传感器DS18B20 16O2液晶屏等实现日期、时间、温度的显示,即是一个电子时钟。

嵌入式课程设计——基于DS1302数字钟

嵌入式课程设计——基于DS1302数字钟

嵌入式课程设计报告题目:基于DS1302数字钟姓名:学号:班级:电子101专业:电子信息工程指导老师:提交时间: 2013-12-13组员:目录摘要................................................. - 1 -1.引言............................................... - 3 -2.硬件电路设计:..................................... - 4 - 2.1 DS1302 ........................................ - 4 - 2. 2 AT89C52 ...................................... - 6 - 2. 3 LCD1602 ...................................... - 7 -2. 4 设计方案 ..................................... - 8 -3.软件程序设计....................................... - 9 - 3.1主程序.......................................... - 9 - 3.2 LCD1602程序:................................. - 10 -3.3 DS1302应用程序:.............................. - 13 -4.课设的心得体会.................................... - 17 - 参考文献............................................ - 20 -摘要本设计选取串行接口时钟芯片 DS1302 与单片机同步通信构成数字时钟电路并用LCD1602显示。

课程设计---基于LCD的电子时钟设计

课程设计---基于LCD的电子时钟设计

课程设计报告题目基于LCD的电子时钟设计专业、学号授课班号学生姓名指导教师完成时间课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:基于LCD的电子时钟设计Ⅱ、课程设计(论文)工作内容一、课程设计目标1、培养综合运用知识和独立开展实践创新的能力;2、掌握嵌入式系统设计基本原理、培养嵌入式系统设计能力;二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、使用实验箱上的S3C44BOX芯片系统和LCD作为硬件基础;3、使用ADS1.2及H-JTAG对源程序进行编译、仿真、调试,下载到芯片中实现LCD电子时钟功能。

三、课程设计预期效果1、完成实验环境搭建:学习LCD与ARM的LCD的控制器的接口原理;掌握内置LCD控制器驱动编写方法;2、设计完成电子时钟源程序;3、源程序编译、调试通过,下载到实验箱中,实现电子时钟功能,并在LCD上显示类似的时钟界面,动态显示当前的时间,包括:年、月、日、时、分、秒,时针,分针、秒针必须为动态实时指示当前的时间。

学生姓名:专业年级:目录前言 (2)第一章系统设计 (3)第一节课题目标及总体方案 (3)第二节硬件平台简介 (3)一、 S3C44B0X简介 (3)二、S3C44B0X与LCD连接 (5)第二节软件系统设计 (5)一、μC/OS-II系统模块设计 (5)二、LCD初始化模块设计 (5)三、时钟应用系统模块设计 (5)第二章实验结果及讨论 (7)第一节ADS1.2集成开发环境简介 (7)第二节调试结果与分析 (9)第三章结论 (10)心得体会 (11)参考文献 (12)附录 (13)源程序 (13)前言随着科技的发展,嵌入式系统广泛应用于工业控制和商业管理领域,在多媒体手机、袖珍电脑、掌上电脑、车载导航器等方面的应用,更是极大地促进了嵌入式技术深入到生活和工作各个方面。

嵌入式系统主要由嵌入式处理器、相关支撑硬件及嵌入式软件系统组成;本文介绍基于ARM7的嵌入式微处理器S3C44BOX和LCD显示器的电子时钟的设计,实现电子时钟的功能,并在LCD 上显示类似的时钟界面;动态显示当前的时间,包括:年、月、日、时、分、秒,时针。

基于单片机的LCD数字电子钟

基于单片机的LCD数字电子钟

长春工业大学智能仪表综合训练设计说明书题目:基于单片机的LCD数字电子钟学生姓名:学号:专业:测控技术与仪器班级:指导教师:摘要数字电子钟是采用电子电路实现对年、月、日、时、分、秒数字显示的计时装置,由于数字集成电路的发展和石英晶体震荡器的广泛应用,使得数字电子钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,成为人们日常生活中不可缺少的必需品。

本文介绍了基于单片机的多功能数字电子钟设计。

系统以STC89C52RC为核心,具有时间和日期的显示及设置功能。

硬件电路包括STC89C52RC单片机小系统电路、数字显示电路、时钟日期电路几部分模块。

再通过C语言编程对各模块进行调试,最后达到设计要求的效果。

这种实现方法的优点是电路简单,性能可靠,实时性好,时间和日期精度高,操作简单,编程容易。

关键词:STC89C52RC单片机;LCD1602液晶显示器;时间设置;日期设置目录第1章前言 (4)1.1课题研究的现实性意义 (4)1.2国内外研究现状 (4)1.3课题基本要求 (5)第2章总体方案设计 (6)2.1方案原理 (6)2.2 硬件选择 (6)2.2.1单片机选择 (6)2.2.2显示器选择 (6)2.2.3晶振的选择 (7)第3章硬件设计 (8)3.1键盘电路 (8)3.2复位电路 (8)3.3晶振电路 (9)3.4 LCD显示电路 (10)第4章软件设计 (11)4.1 Protel 99SE (11)4.2程序主流程图 (11)4.3初始化流程图 (12)4.4延时中断子程序 (12)4.5时间设置子程序 (13)总结 (14)参考文献 (15)附录A:数字电子钟硬件原理图 (16)附录B :C语言源程序 (17)第1章前言1.1课题研究的现实性意义20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

基于单片机的LCD电子时钟设计

基于单片机的LCD电子时钟设计

基于单片机的LCD电子时钟设计随着科技的不断发展,单片机已经成为现代电子设备中的重要组成部分。

其中,LCD电子时钟的设计与应用更是受到广泛。

基于单片机的LCD电子时钟设计具有精度高、稳定性好、体积小、耗电量低等优点,被广泛应用于家居、办公、交通运输等领域。

一、设计原理基于单片机的LCD电子时钟设计主要由单片机、时钟电路和LCD显示模块组成。

其中,单片机作为主控制器,负责读取时钟信号并控制LCD显示模块。

时钟电路则产生一个高精度的实时时钟信号,LCD显示模块则负责将时间信息显示出来。

二、硬件设计1、单片机选择:单片机是整个系统的核心,负责读取时钟信号、处理数据并控制LCD显示模块。

常见的单片机型号包括STM32、PIC、AVR等。

根据实际需求,选择合适的单片机型号。

2、时钟电路:时钟电路是整个系统的核心部分,它产生高精度的实时时钟信号。

常见的时钟电路包括石英晶体振荡器、GPS模块等。

根据实际需求,选择合适的时钟电路。

3、LCD显示模块:LCD显示模块负责将时间信息显示出来。

常见的LCD显示模块包括字符型LCD和图形型LCD。

根据实际需求,选择合适的LCD显示模块。

三、软件设计软件设计是整个系统的重要组成部分,它需要实现读取时钟信号、处理数据并控制LCD显示模块的功能。

具体的软件设计流程如下:1、初始化:初始化单片机、时钟电路和LCD显示模块。

2、读取时钟信号:通过时钟电路读取实时时钟信号。

3、处理数据:对读取的时钟信号进行处理,提取出年、月、日、时、分、秒等信息。

4、控制LCD显示模块:将处理后的时间信息通过LCD显示模块显示出来。

5、循环执行:重复执行上述步骤,实现LCD电子时钟的实时更新。

四、调试与优化完成硬件和软件设计后,需要对系统进行调试和优化。

具体的调试和优化步骤如下:1、通电测试:将系统通电,检查各部分是否正常工作。

2、精度测试:检查时钟电路的精度是否满足要求。

3、LCD显示测试:检查LCD显示模块是否能正确显示时间信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录前言 (1)第一章课题目标及总体方案 (2)第二章系统设计 (3)1、系统结构原理 (3)2、硬件组成与设计 (4)3、软件组成与设计 (4)第三章实验结果 (5)心得体会 (5)参考文献 (5)附录 (6)前言嵌入式系统反映了当代最新的技术水平。

嵌入式系统不仅和一般的PC机上的应用系统不同,就是针对不同的具体应用而设计的嵌入式系统之间差别也很大。

嵌入式系统一般功能单一,简单而且兼容性方面要求不高,但是在大小和成本方面限制较多。

在本实验中以arm7处理器S3C44B0X和液晶显示屏LRH9J515XA STN/BW为基础,设计实现了带农历的实时时钟电路。

当有外部中断产生时,串口与S3C44B0X进行通信,实现更改时钟时间,且应用公历转农历的算法,实现将农历时间实时显示在LCD上。

另外还具有闹铃、星期提示功能,基本上能够满足人们的需求。

关键字:arm7 S3C44B0X LCD 农历串口第一章课题目标及总体方案一、目的●了解实时时钟的硬件控制原理及设计方法。

●掌握S3C44B0X处理器的RTC模块程序设计方法。

●初步掌握液晶显示屏的使用及其电路设计方法。

●掌握S3C44B0X处理器的LCD控制器的使用。

●通过实验掌握液晶显示文本和图形的方法以及程序设计的方法。

二、设备1. 硬件:Embest EDUKIT —Ⅱ/Ⅲ实验平台,Embest ARM标准/增强型仿真器套件,PC机。

2. 软件:Embest IDE Pro 2004集成开发环境,Windows98/2000/NT/XP操作系统。

三、内容通过运用S3C44B0X的RTC模块、串口模块和LCD模块,编写应用程序,在LCD上实时显示当前时间及农历时间。

四、研究方法1. 将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务。

2. 连接PC和Embest EDUKIT —Ⅱ/Ⅲ实验箱,进行整个实验环境搭建。

第二章系统设计1、系统结构原理图本实验电子时钟的设计主要是将RTC模块中的时间传到LCD上进行实时显示;此外,通过串口与PC机通信,设置RTC模块中当前时间及报警时间,并把当前公历时间转换为农历时间一起在LCD上进行显示,其结构框图如右图所示:PC 串口RTC模块LCD显示2、硬件组成与设计2.1 实时时钟RTC模块S3C44B0X实时时钟单元是处理器集成的片内外设,由开发板上的后备电池供电,可以在系统电源关闭的情况下运行,RTC发送8位BCD码数据到CPU。

传送的数据包括秒、分、时、星期、日期、月份和年份。

RTC单元时钟源频率由外部32.768 kHz晶振提供,可以实现闹钟(报警)功能及时间片中断、置0计数功能。

2.2 串口通信模块S3C44B0X串行通信单元UART提供2个独立的异步串行通信口,皆可工作于中断和DMA模式。

最高波特率达115200b/s。

每个UART单元包含一个16字节FIFO,用于数据接收和发送。

此外,每个UART模块还包含可编程波特率、红外发送/接收、1个或2个停止位、5/6/7/8位数据宽度和奇偶校验。

通过初始化好串口,与RTC进行通信,来设置RTC当前时间及报警时间。

2.3 液晶显示LCD模块S3C44B0X处理器集成了LCD控制器,支持4位单扫描、4位双扫描和8位单扫描工作方式。

处理器使用内部RAM区作为显示缓存,并支持屏幕水平和垂直滚动显示。

数据的传送采用DMA(直接内存访问)方式,以达到最小延迟。

根据实际硬件水平和垂直像素点数、传送数据位数、时间线和帧速率方式等进行编程,以支持多种类型的显示屏。

LCD控制器主要液晶屏显示数据的传送、时钟和各种信号的产生与控制功能。

3、软件组成与设计3.1 读写RTC模块S3C44B0X内部集成了RTC模块,通过读取RTC模块中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON 和BCDYEAR的值得到当前的相应的时间值。

还可以往这些寄存器里写值以设置当前的时间值。

3.2 串口通信UART模块采用S3C44B0X的UART模块,利用PC机进行当前时钟时间和时钟报警时间的设置。

其通信协议如下:首先S3C44B0X发送字符串命令询问是否要设置报警时间值,若回复'y'或'Y',则从PC机上的键盘上发送报警时间值传递给报警寄存器ALMYEAR、ALMMON、ALMDAY、ALMHOUR、ALMMIN、ALMSEC;然后,S3C44B0X发送命令询问是否要重新设置当着时间,若回复'y'或'Y',则发送新的时间值到BCDYEAR、BCDMON、BCDDAY、BCDHOUR、BCDMIN、BCDSEC,从而实现对报警时间及当前时钟时间的设置。

程序流程图如下:3.3 农历显示设计S3C44B0X中RTC模块中没有提供农历的时间信息,因此采用公历转农历的方式来显示农历信息。

公历转农历的算法是:首先建立公历年对应的农历数据,将其存入数组中,然后查找数组,实现公历到农历的转换并在LCD上显示。

公历转农历算法框图如下所示:3.4 液晶屏LCD显示设计使用液晶屏显示最基本的是像素控制数据的使用。

像素控制数据的存放与传送形式决定了显示的效果。

图形显示可以直接使用像素控制函数实现。

把像素控制数据按一定形式存入即可实现字符显示。

本项目通过调用字符显示函数,将读取的实时时钟显示在LCD屏幕上。

第三章实验结果心得体会通过本次的实验操作,不仅使我深刻体会打了嵌入式系统的广阔的应用前景,而且也是我对课本知识的一次较深的回顾与体悟。

温故而知新,只有通过自己动手操作才能掌握真正的技术。

在有限的课时内我们掌握的知识也是相当有限的,我们对嵌入式系统的硬件和软件的基本原理,特点有了更深的认识。

这些知识对于本次实验是不够的。

我自己查找了许多资料,同时也参考了过去的课题,取长补短。

经过不断的努力,在老师和同学们的帮助之下,我顺利的完成了课程设计,对嵌入式系统的硬件/软件有了更深的了解,也深入掌握了嵌入式系统设计的基本方法,达到了预期的目的。

不仅这一次,以后我要更加努力的学习嵌入式系统,以期能够有更大的进步。

参考文献1. 林志琦ARM微控制器与液晶屏接口的研究[J]. 长春大学学报,2010,20(2):71-74.2. 耿辉.S3C44B0X数据手册,2006.3. 田泽ARM7嵌入式开发实验与实践北京:北京航空航天大学出版社20104. 郑丽丽, 谢磊, 李清宝. 一种公历到农历日期转换算法的实现[ J]. 微计算机信息, 2005, 21( 2): 74- 76.5. 石熊基于ARM9的带农历实时时钟LCD显示设计[ D] 陕西西安电子科技大学20116.EL-ARM-830 实验系统的资源介绍,2000.附录1.电路原理图S3C44B0X处理器的LCD控制器框图2.主要程序代码/******************************************************************** ************************ File:lcd.c* Author: embest* Desc:LCD control and display functions* History:********************************************************************* ************************/#include "lcd.h"#include "bmp.h"#include "44b.h"#define XWIDTH 6#define LCD_STN256_COLOR#define ASCII6x8UINT32T g_unLcdActiveBuffer[LCD_YSIZE][LCD_XSIZE/4]; volatile extern int data[]={0x2012,0x12,0x17,0x2,0x12,0x30,0x00}; volatile extern char *f_szdate[8] = {"","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Satu rday"};extern UINT8T g_ucAscii8x16[];extern const UINT8T g_ucHZK16[];void lcd_init(void) //LCD初始化函数{rDITHMODE = 0x12210;rDP1_2 = 0xa5a5;rDP4_7 = 0xba5da65;rDP3_5 = 0xa5a5f;rDP2_3 = 0xd6b;rDP5_7 = 0xeb7b5ed;rDP3_4 = 0x7dbe;rDP4_5 = 0x7ebdf;rDP6_7 = 0x7fdfbfe;rLCDCON1 =(0x0)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_C OLOR<<12);rLCDCON2 = (LINEVAL)|(HOZVAL_COLOR<<10)|(10<<21);rLCDCON3 = 0;rLCDSADDR1 = (0x3<<27) | ( ((unsignedint)g_unLcdActiveBuffer>>22)<<21 ) | M5D((unsignedint)g_unLcdActiveBuffer>>1);rLCDSADDR2 = M5D((((unsignedint)g_unLcdActiveBuffer+(SCR_XSIZE*LCD_YSIZE))>>1)) | (MVAL<<21);rLCDSADDR3 = (LCD_XSIZE/2) |( ((SCR_XSIZE-LCD_XSIZE)/2)<<9 );rREDLUT =0xfdb96420; // 1111 1101 1011 1001 0110 0100 0010 0000rGREENLUT=0xfdb96420; // 1111 1101 1011 1001 0110 0100 0010 0000rBLUELUT =0xfb40; // 1111 1011 0100 0000rLCDCON1=(0x1)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<1 0)|(CLKVAL_COLOR<<12);rPDATE=rPDATE&0x0e;lcd_clr();}void lcd_clr(void){UINT32T i;UINT32T *pDisp = (UINT32T*)g_unLcdActiveBuffer;for (i = 0; i < (SCR_XSIZE * SCR_YSIZE / 4); i++){*pDisp++ = ALLWHITE;}}void lcd_disp_ascii8x16(UINT16T x0, UINT16T y0, UINT8T ForeColor, UINT8T * s) //字符串显示函数{UINT16T i,j,k,x,y,xx;UINT8T qm;UINT32T ulOffset;INT8T ywbuf[16],temp[2];for( i = 0; i < strlen((const char *)s); i++ ){if( (UINT8T)*(s+i) >= 161 ){temp[0] = *(s + i);temp[1] = '\0';return;}else{qm = *(s+i);ulOffset = (UINT32T)(qm) * 16; //Here to be changed tomorrowfor( j = 0; j < 16; j ++ ){ywbuf[j] = g_ucAscii8x16[ulOffset + j];}for( y = 0; y < 16; y++ ){for( x = 0; x < 8; x++ ){k = x % 8;if( ywbuf[y] & (0x80 >> k) ){xx = x0 + x + i*8;LCD_PutPixel(xx, y + y0, (UINT8T)ForeColor);}}}}}}void lcd_disp_hz16(UINT16T x0, UINT16T y0, UINT8T ForeColor, UINT8T *s) //汉字显示函数{UINT16T i,j,k,x,y,xx;UINT8T qm,wm;UINT32T ulOffset;INT8T hzbuf[32],temp[2];for( i = 0; i < strlen((const char*)s); i++ ){if( ((UINT8T)(*(s+i))) < 161 ){temp[0] = *(s+i);temp[1] = '\0';break;}else{qm = *(s+i) - 161;wm = *(s + i + 1) - 161;ulOffset = (UINT32T)(qm * 94 + wm) * 32;for( j = 0; j < 32; j ++ ){hzbuf[j] = g_ucHZK16[ulOffset + j];}for( y = 0; y < 16; y++ ){for( x = 0; x < 16; x++ ){k = x % 8;if( hzbuf[y * 2 + x / 8] & (0x80 >> k) ){xx = x0 + x + i * 8;LCD_PutPixel( xx, y + y0, (UINT8T)ForeColor);}}}i++;}}}void rtc_init(void) //时钟模块RTC初始化函数{rRTCCON = 0x01; // R/W enable, 1/32768, Normal(merge), No reset// set the default data for RTCrBCDYEAR = data[0];rBCDMON = data[1];rBCDDAY = data[2]; // SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7rBCDDATE = data[3];rBCDHOUR = data[4];rBCDMIN = data[5];rBCDSEC = data[6];// set the test data for RTCrALMYEAR = 0x12;rALMMON = 0x12;rALMDAY = 0x17;rALMHOUR = 0x12;rALMMIN = 0x32 ;rALMSEC = 0x00+1;rRTCCON = 0x0; // R/W disable, 1/32768, Normal(merge), No reset}void rtc_read(void) //读当前时间函数{while(1){// read the data from RTC registersif(rBCDYEAR == 0x99)data[0] = 0x1999;elsedata[0] = 0x2000 + rBCDYEAR;data[1] = rBCDMON;data[2] = rBCDDAY;data[3] = rBCDDATE;data[4] = rBCDHOUR;data[5] = rBCDMIN;data[6] = rBCDSEC;// display the default timeuart_printf("\r Set Default Timeat %02x-%02x-%02x %s",data[0],data[1],data[2],f_szdate[data[3]]);uart_printf(" %02x:%02x:%02x\n\r",data[4],data[5],data[6]);}}int BCDToD(int a) //将BCD码转换为十进制数据{int b=0;b+=((a>>12)*1000+((a>>8)&0x0f)*100+((a&0xf0)>>4)*10+(a&0x0f) );return b;}void rtc_tick_test(void) //设置RTC时间片中断{// enable rtc_tick interruptrRTCALM = 0x7f;pISR_RTC = (unsigned int) rtc_int;rINTMSK = ~(BIT_GLOBAL|BIT_RTC);pISR_TICK = (unsigned)rtc_tick;rINTMSK = ~(BIT_GLOBAL|BIT_TICK);rTICINT = 127+(1<<7); // START}void rtc_tick(void) //RTC时间片中断函数{rI_ISPC = BIT_TICK;rtc_read();}void rtc_int(void) //RTC报警中断函数{UINT8T i;rI_ISPC = BIT_RTC;for(i=0;i<25;i++){beep(1);delay(100);beep(0);}}/******************************************************************** ************************** File:main.c* Author: embest* Desc: c main entry* History:********************************************************************* ************************/#include "lcd.h"#include "bmp.h"extern void lcd_test();void Main(void);void lcd_test(void);volatile int data[];volatile char *f_szdate[];typedef struct _hjz{ //带有年、月、日的结构体int year;int month;int day;int reserved;} hjz;unsigned int lunar200y[199] = { //与阳历对应的农历时间信息0x04AE53,0x0A5748,0x5526BD,0x0D2650,0x0D9544,0x46AAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A,/*1901-1910*/0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,0x0D6A43,0x296 D37,0x095B4B,0x749BC1,0x049754,/*1911-1920*/0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0x0957 42,0x2497B7,0x04974A,0x664B3E,/*1921-1930*/0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,0x393738,0x092E4 B,0x7C96BF,0x0C9553,0x0D4A48,/*1931-1940*/0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,0x092D42,0x2C95 B6,0x0A954A,0x7B4ABD,0x06CA51,/*1941-1950*/0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,0x052B4C,0x8A953 F,0x0E9552,0x06AA48,0x6AD53C,/*1951-1960*/0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,0x3E9335,0x0D9549, 0x75AABE,0x056A51,0x096D46,/*1961-1970*/0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,0x8D52BF,0x0B5 452,0x0B6A47,0x696D3C,0x095B50,/*1971-1980*/0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA 3D,0x0AB651,0x093746,0x5497BB,/*1981-1990*/0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,0x05AC53,0x0AB64 7,0x5936BC,0x092E50,0x0C9645,/*1991-2000*/0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x02 5D52,0x092D47,0x5C95BA,0x0A954E,/*2001-2010*/0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,0x0A5B48,0x652B BC,0x052B50,0x0A9345,0x474AB9,/*2011-2020*/0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,0x0A4E51,0x0D26 46,0x5E933A,0x0D534D,0x05AA43,/*2021-2030*/0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,0x6D25BC,0x0D2 54F,0x0D5244,0x5DAA38,0x0B5A4C,/*2031-2040*/0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0x5B52 BA,0x06D24E,0x0ADA42,0x355B37,/*2041-2050*/0x09374B,0x8497C1,0x049753,0x064B48,0x66A53C,0x0EA54F,0x06B244,0 x4AB638,0x0AAE4C,0x092E42,/*2051-2060*/0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,0x55AABA,0x056 A4E,0x0A6D43,0x452EB7,0x052D4B,/*2061-2070*/0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54F,0x055A45,0x4A5D3 8,0x0A5B4C,0x052B42,0x3A93B6,/*2071-2080*/0x069349,0x7729BD,0x06AA51,0x0AD546,0x54DABA,0x04B64E,0x0A57 43,0x452738,0x0D264A,0x8E933E,/*2081-2090*/0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,0x4A4EB9,0x0A4 D4C,0x0D1541,0x2D92B5 /*2091-2099*/};int monthTotal[13] = {0,31,59,90,120,151,181,212,243,273,304,334,365}; hjz toLunar(hjz solar){ //将阳历转换为农历函数int year = solar.year,month = solar.month,day = solar.day;int bySpring,bySolar,daysPerMonth;int index,flag;hjz lunar;if( ((lunar200y[year-1901] & 0x0060) >> 5) == 1)bySpring = (lunar200y[year-1901] & 0x001F) - 1;elsebySpring = (lunar200y[year-1901] & 0x001F) - 1 + 31;bySolar = monthTotal[month-1] + day - 1;if( (!(year % 4)) && (month > 2))bySolar++;if (bySolar >= bySpring) {//阳历日在春节后(含春节那天)bySolar -= bySpring;month = 1;index = 1;flag = 0;if( ( lunar200y[year - 1901] & (0x80000 >> (index-1)) ) ==0)daysPerMonth = 29;elsedaysPerMonth = 30;while(bySolar >= daysPerMonth) {bySolar -= daysPerMonth;index++;if(month == ((lunar200y[year - 1901] & 0xF00000) >> 20) ) {flag = ~flag;if(flag == 0)month++;}elsemonth++;if( ( lunar200y[year - 1901] & (0x80000 >> (index-1)) ) ==0)daysPerMonth=29;elsedaysPerMonth=30;}day = bySolar + 1;}else {//阳历日在春节前bySpring -= bySolar;year--;month = 12;if ( ((lunar200y[year - 1901] & 0xF00000) >> 20) == 0)index = 12;elseindex = 13;flag = 0;if( ( lunar200y[year - 1901] & (0x80000 >> (index-1)) ) ==0)daysPerMonth = 29;elsedaysPerMonth = 30;while(bySpring > daysPerMonth) {bySpring -= daysPerMonth;index--;if(flag == 0)month--;if(month == ((lunar200y[year - 1901] & 0xF00000) >> 20))flag = ~flag;if( ( lunar200y[year - 1901] & (0x80000 >> (index-1)) )==0)daysPerMonth = 29;elsedaysPerMonth = 30;}day = daysPerMonth - bySpring + 1;}lunar.day = day;lunar.month = month;lunar.year = year;if(month == ((lunar200y[year - 1901] & 0xF00000) >> 20)) lunar.reserved = 1;elselunar.reserved = 0;return lunar;}void Main(void){sys_init(); /* Initial 44B0X's Interrupt,Port and UART */ uart_printf("\n\rLCD display Test Example(please look at LCD screen)\n");lcd_show();while(1);}void lcd_show(void){lcd_init();rtc_init();while (1){lcd_clr();rtc_tick_test();chardate[]={BCDToD(data[0])/1000+48,BCDToD(data[0])/100%10+48,BCDToD(data[0])/10%10+48,BCDToD(data[0])%10+48,'-', BCDToD(data[1])/10%10+48,BCDToD(data[1])%10+48,'-',BCDToD(data[2])/10%10+48,BCDToD(data[2])%10+48,' ','\0'};chartime[]={BCDToD(data[4])/10%10+48,BCDToD(data[4])%10+48,':', BCDToD(data[5])/10%10+48,BCDToD(data[5])%10+48,':',BCDToD(data[6])/10%10+48,BCDToD(data[6])%10+48,'\0'};hjz solar={BCDToD(data[0]),BCDToD(data[1]),BCDToD(data[2])};hjz lunar=toLunar(solar);char Lunardate[]={(lunar.year)/1000+48,(lunar.year)/100%10+48,(lunar.year)/10%10+48,(lunar.year)%10+48,'-',(lunar.month)/10%10+48,(lunar.month)%10+48,'-',(lunar.day)/10%10+48,(lunar.day)%10+48,' ','\0'};lcd_disp_hz16(20,10,BLUE,"LCD电子时钟实验");lcd_disp_hz16(90,35,BLUE,"北京时间:");//lcd_disp_ascii8x16(10,24,GREEN-55,"ShenZhen Embest Info&Tech Co.,LTD");lcd_disp_ascii8x16(90,60,BLUE,date);lcd_disp_ascii8x16(180,60,BLUE,f_szdate[data[3]]);lcd_disp_ascii8x16(90,85,BLUE,time);lcd_disp_hz16(90,110,BLUE,"农历");lcd_disp_ascii8x16(90,135,BLUE,Lunardate);LCD_D_ON;delay(3000);}}31。

相关文档
最新文档