基于lpc lcd显示时钟_第1页
基于lpc lcd显示时钟_第2页
基于lpc lcd显示时钟_第3页
基于lpc lcd显示时钟_第4页
基于lpc lcd显示时钟_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、ARM基于LPC2124 RTC LCD显示电子时钟ARM电子时钟目录第一章 设计任务和要求4一、课设目的4二、辅助设备4三、实验内容4第二章 主要芯片及应用软件简介4一、RTC简介41.1RTC41.2硬件结构4二、 LPC2124简介51.1LPC2124管脚51.2LPC2124 RTC5三、芯片LM016L简介63.1液晶显示原理63.2引脚功能说明6四、 Proteus简介84.1软件特点84.2与Keil联调9Keilc与Proteus连接调试9五、 Keil简介95.1Keil开发基本常识95.2软件优点10第三章 时钟软件设计11一、 软件流程图11二、 软件详情11第四章 硬

2、件设计13一、 电路效果图13二、 晶振电路13三、 显示电路14第五章 心得体会15附录16第1章 设计任务和要求一、课设目的l 了解时钟的硬件控制原理及设计方法l 掌握RTC模块程序设计方法二、辅助设备l Proteus模拟ARM7芯片设计l Keil编译C语言,连接生成Hex文件 三、实验内容l 使用PROTEUS 仿真,选用ARM7 LPC2124 芯片和LCD显示屏,导入Hex文件,然后进行软件仿真调试。应用现有的仿真工具和嵌入式软件开发平台,规范、科学地完成一个小型LCD显示电路的设计与实现。第2章 主要芯片及应用软件简介一、RTC简介1.1RTC实时时钟的缩写是RTC(Real_

3、Time Clock)。RTC 是集成电路,通常称为时钟芯片。实时时钟芯片是日常生活中应用最为广泛的消费类电子产品之一。它为人们提供精确的实时时间,或者为电子系统提供精确的时间基准,目前实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源。有些时钟芯片为了在主电源掉电时,还可以工作,需要外加电池供电。1.2硬件结构晶振晶振一般叫做晶体谐振器,是一种机电器件,晶振是石英振荡器的简称,英文名为Crystal是用电损耗很小的石英晶体经精密切割磨削并镀上电极焊上引线做成。晶振的作用:提供基准频率。RTC的晶振:任何实时时钟的核心都是晶振,晶振频率为32768 Hz 。它为分频计数器提供精确的与低功耗的实

4、基信号。它可以用于产生秒、分、时、日等信息。为了确保时钟长期的准确性,晶振必须正常工作,不能够收到干扰。RTC的晶振又分为:外部晶振和内置晶振。RTC的晶振频率为什么是32768Hz? RTC时间是以振荡频率来计算的。故它不是一个时间器而是一个计数器。而一般的计数器都是16位的。又因为时间的准确性很重要,故震荡次数越低,时间的准确性越低。所以必定是个高次数。215 = 32768 。 32768 Hz = 215 即分频15次后为1Hz,周期 = 1s。 经过工程师的经验总结32768 Hz,时钟最准确。 规范和统一。2、 LPC2124简介1.1LPC2124管脚1.2LPC2124 RTC

5、当选择正常或空闲模式时,实时时钟(RTC)提供一套用于测量时间的计数器。RTC消耗的功率非常低,这使其适合于由电池供电的,CPU不连续工作(空闲模式)的系统。 特性 l 对时间段进行测量以实现一个日历或时钟 󰁺 l 超低功耗设计,支持电池供电系统 󰁺 l 提供秒、分、小时、日、月、年和星期 l 可编程基准时钟分频器允许调节RTC以适应不同的晶振频率三、芯片LM016L简介3.1液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶

6、显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。LM016L LCD相关参数主要参数显示容量:16×2个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95×4.35(W×H)mm3.2引脚功能说明LM016LLCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3-1所示:表3-1 引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶

7、显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读

8、忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。LCD指令说明及时序LM016L液晶模块内部的控制器共有11条控制指令,如表3-2所示:表3-2 控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生

9、存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容LM016L液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置。 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,

10、低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址。 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。4、 Pro

11、teus简介Proteus是目前最先进的单片机CPU和外围电路仿真工具之一。本文介绍了单片机仿真软件Proteus的特点,并结合实时时钟电路的实例详细介绍了使用Proteus进行电路设计与仿真的过程及方法,旨在为单片机爱好者和技术人员提供了一个很好的学习平台。ProteusISIS是英国Lacenterelec-tronics公司开发的电路分析与实物仿真软件,应用范围十分广泛,涉及PCB制版、Spice电路仿真、单片机仿真以及对ARM7/LPC2000的仿真。Proteus主要由ARESISIS两大模块构成,ARES主要用于印刷电路板(PCB)的设计及其电路仿真,ISIS主要用于原理图的设计并

12、仿真。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。 4.1软件特点实现了单片机仿真和SPI CE电路仿真相结合。具有模拟电路仿真,数字电路仿真。单片机及其外围电路组成的系统的仿真。有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。2.支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、805l系列。AVR系列、ARM系列、PICl2系列、PICl6系列、PICl8系列、Z80系列、HCl1系列以及各种外围芯片。3.提供软件调试功能。该软件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,同时支持第三

13、方的软件编译和调试环境,如Keil C5l uVision2等软件。4.具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。本文介绍Proteus ISIS软件的工作环境和一些基本操作。4.2与Keil联调Keilc与Proteus连接调试1.假若Keil与Proteus均已正确安装在C:Program Files的目录里; 2.安装Keil与Proteus的连接插件vdmagdi.exe;3.进入Keil Vision2开发集成环境,创建一个新项目(Project),并为该项目选定合适的单片机CPU器件(如:NXP公司的LPC2124)。并为该

14、项目加入Keil源程序。5、 Keil简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(Vision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半

15、功倍。5.1Keil开发基本常识该课设使用的是keil公司13年发布的Keil Keil Vision5系统概述Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil的优势。下面详细介绍Keil C51开发系统各部分功能和使用。Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,Vision与Ishell分别是C51 for Windows 和for Dos 的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇

16、编源文件。然后分别由C51及C51编译器编译生成目标文件(.obj)。目标文件可由LIB51 创建生成库文件,也可以与库文件一起经L51 连接定位生成绝对目标文件(.abs)。abs文件由OH51 转换成标准的hex 文件,以供调试器dScope51 或tScope51 使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。使用独立的Keil仿真器时,注意事项*仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。*仿真器上的复位按钮只复位仿真芯片,不复位目标系统。* 仿真芯片的31脚(/EA)已接至高电平,所以

17、仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。5.2软件优点Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。第3章 时钟软件设计RTCIni() 初始化实时时钟1、 软件流程图SendTimeRtc()读取RTC的时间的时分秒值显示循环输出DisText(

18、)显示函数WrDat()写数据输出在LCD 2、 软件详情DisText()函数显示文本函数输出在LCD上void DisText(uint8 addr,uint8 *p)WrOp(addr);while(*p !='0')WrDat(*(p+);SendTimeRtc()函数读取RTC的时间值,并将读出的时分秒值由串口发送到上位机显示void SendTimeRtc(void) uint32 times; uint8 bak; times=CTIME0; /读取完整时钟寄存器0 bak=(times>>16)&0x1F; /取得时的值 send_buf0=

19、bak/10+'0' send_buf1=bak%10+'0' send_buf2=':' bak=(times>>8)&0x3F; /取得分的值 send_buf3=bak/10+'0' send_buf4=bak%10+'0' send_buf5=':' bak=times&0x3F; /取得秒的值 send_buf6=bak/10+'0' send_buf7=bak%10+'0' send_buf8='n' DisTe

20、xt(0xC0,send_buf);/ 第二行字符地址为:C0CF。 RTCIni()函数 初始化实时时钟。 void RTCIni(void) PREINT = Fpclk / 32768 - 1;/ 设置基准时钟分频器 PREFRAC = Fpclk - (Fpclk / 32768) * 32768; YEAR = 2004; / 初始化年 MONTH = 2; / 初始化月 DOM = 19; / 初始化日 HOUR = 8; MIN = 30; SEC = 0; CIIR = 0x01; / 设置秒值的增量产生一次中断 CCR = 0x01; / 启动RTCmain() 函数读取实时

21、时钟的值,并发送到 LCD 第4章 硬件设计1、 电路效果图2、 晶振电路石英晶体连接在晶振引脚的输入和输出之间,等效为一个并联谐振回路,振荡频率是石英晶体的并联谐振频率。晶体旁边的俩个电容接地,实际上就是电容三点式电路的分压电容,接地点就是分压点。以接地点即分压点为参考点,振荡引脚的输入和输出是反相的,但从并联谐振回路即石英晶体两端来看,形成一个正反馈以保证电路持续振荡。LPC2124中自带内部晶振所以没有做外接。 3、 显示电路通过SendTimeRtc() 读取RTC的时间值,并将读出的时分秒值调用DisText()按数组调用WrDat()写数据函数 在LCD上显示时间及数据文本。第5章

22、 心得体会这次课程设计,我学到了很多东西,首先是对加深了对Keil软件的运用,并对液晶屏动态显示方面的知识有了更多了解,在以前我只是对这些软件有个大概的了解,但通过这次的实践,使我对这些软件有了更深刻的了解,在以后的学习及工作中将会起到很大的作用,这次我将自己所学的知识运用到了实践当中,使得理论有了实践的指导。由于以前没有实际做过按键控制液晶屏动态显示这方面的内容,所以在有些内容的准备上还有很多不足之处,通过在网络上的查找资料在LCD的使用指南中发现了解决办法。通过这次的课设深刻的认识到了芯片使用指南的重要作用,没有指南就没办法明确迅速的找到芯片的具体用法。这次课程设计使我受益匪浅,经过认真的

23、学习,这为今后的论文写作打下了基础。附录/* File: main.c* 功能: 运行RTC进行计时,并将所计时间值向LCD输出 */#include "config.h"#define rs (1<<8)/ 0000 0001 0000 0000 = 0x0100 #define rw (1<<9)/ 0000 0010 0000 0000 = 0x0200 #define en (1<<10)/ 0000 0100 0000 0000 = 0x0400 #define busy (1<<7)/ 0000 0000 1000

24、 0000 = 0x0080 #define rs_rw_en rs|rw|en / 0000 0111 0000 0000 = 0x0700 P8P10 #define lcd_pins 0x7FF / 将 P0.0P0.10 设置为输出 0000 0111 1111 1111uint32 IO0DIR_bak; uint32 IO0SET_bak;uint32 IO0CLR_bak;uint8 MESSAGE="XIAN TIME:"#define LED1CON 1<<23 /*P0.23口为LED2控制端 */uint8 send_buf16; / 数据

25、缓冲区 /* 名称:ChkBusy() * 功能:检查总线是否忙 */void ChkBusy()IO0DIR_bak=IO0DIR;IO0DIR=rs_rw_en;/ 0000 0111 0000 0000 P8P10 即 en, rw, rs 设置为输出, 其他为输入。 while(1)IO0CLR=(IO0CLR & rs)|rs; / 置 rs 为 0 IO0SET=(IO0SET & rw)|rw;/ 置 rw 为 1 IO0SET=(IO0SET & en)|en;/ 置 en 为 1, 禁用 LED if(!(IO0PIN & busy)break

26、; / 测试最低位数据,如果为低,总线空闲,跳出循环。 IO0CLR=(IO0CLR & en)|en;/ 置 en 为 0,使能 LCD IO0DIR=lcd_pins;/ 将 P0.0P0.10 设置为输出 0000 0111 1111 1111IO0DIR=IO0DIR_bak;/* 名称:WrOp()* 功能:写操作数函数 */void WrOp(uint8 dat)ChkBusy();IO0SET_bak=IO0SET;IO0CLR_bak=IO0CLR;IO0CLR=rs;/全部清零 IO0CLR=rw;IO0CLR=0xff;/先清零 IO0SET=dat;/再送数 IO

27、0SET=en;IO0CLR=en;IO0SET=IO0SET_bak;IO0CLR=IO0CLR_bak;/* 名称:WrDat()* 功能:写数据函数 */void WrDat(uint8 dat)ChkBusy();IO0SET_bak=IO0SET;IO0CLR_bak=IO0CLR;IO0SET=rs;IO0CLR=rw;IO0CLR=0xff;/先清零 IO0SET=dat;/再送数 IO0SET=en;IO0CLR=en;IO0SET=IO0SET_bak;IO0CLR=IO0CLR_bak;/* 名称:lcd_init()* 功能:lcd初始化函数 */void lcd_ini

28、t(void)WrOp(0x38);WrOp(0x06);/光标加1 WrOp(0x0c);/开显示 /* 名称:DisText()* 功能:显示文本函数*/void DisText(uint8 addr,uint8 *p)WrOp(addr);while(*p !='0')WrDat(*(p+);/*名称: SendTimeRtc()*功能: 读取RTC的时间值,并将读出的时分秒值由串口发送到上位机显示*/void SendTimeRtc(void) uint32 times; uint8 bak; times=CTIME0; /读取完整时钟寄存器0 bak=(times>>16)&0x1F; /取得时的值 send_buf0=bak/10+'0' send_buf1=bak%10+'0' send_buf2=':' bak=(times>>8)&0x3F; /取得分的值 send_buf3=bak/10+'0' send_buf4=bak%10+'0' send_buf5=':' bak=times

温馨提示

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

评论

0/150

提交评论