基于LPC922单片机和I2C总线的低功耗万年历的设计
2010-02-25张攀峰
张攀峰
(陕西科技大学电气与信息工程学院, 陕西 西安 710021)
0 引言
万年历是实现时、分、秒等数字显示的计时装置,广泛用于家庭、车站、机场、码头、办公室等公共场所,成为人们日常生活中不可或缺的必需品.由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们的生产、生活带来了极大的方便,而且大大扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备,甚至各种定时电器装置的自动启用等,都是以钟表数字化为基础的.因此,研究万年历及扩大其应用有着非常现实的意义.为此,我们设计出了基于LPC922单片机的低功耗万年历,经验证完全实现了万年历的基本功能,而且功耗仅为μΑ级,满足了实际需要.
1 硬件设计
1.1 总体设计
众所周知,万年历是实现时、分、秒等数字显示的计时装置,数字式万年历的设计主要从万年历功能的实现和降低功耗两个方面进行.万年历功能的实现通过一般的单片机就可以方便地实现,而对于低功耗的设计则要结合整个系统的硬件和软件来考虑.在硬件方面,我们选用了低功耗的单片机LPC922,结合具有I2C总线接口的时钟芯片FM3104及LCD驱动器PCF8576,其硬件框图如图1所示.软件上系统实现间断性工作,在大部分时间系统处于掉电模式之下,看门狗会产生定时中断唤醒CPU.
图1 低功耗万年历系统框图
图2 I2C总线配置
1.2 I2C总线相关介绍
NXP半导体公司(原Philips半导体)于20多年前发明了一种简单的双向二线制串行通信总线,这个总线被称为Inter-IC或者I2C总线.目前I2C总线已经成为嵌入式应用的标准解决方案,被广泛应用于各式各样基于微控器的专业、消费与电信产品中,作为控制、诊断与电源管理的总线.多个符合I2C总线标准的器件都可以通过同一条I2C总线进行通信,而不需要额外的地址译码器.由于I2C是一种两线式串行总线,因此简单的操作特性是其成为业界标准的关键因素[1].
I2C总线只需要由两根信号线组成,一根是串行数据线SDA,另一根是串行时钟线SCL.在系统中,I2C总线的典型接法如图2所示,其中Master和Slave分别代表主、从机,Rp是为了保证具有I2C总线器件的SDA和SCL漏极开路的上拉电阻,注意连接时Master和Slave需要共地.关于I2C总线的信号及时序定义、数据传送的起始与停止、数据传送的格式等详见参考文献[2、3].
1.3 LPC922单片机介绍
LPC900系列单片机是NXP(原PHILIPS)半导体公司推出的基于80C51内核的Flash单片机[4,5],它采用先进的2-CLOCK技术,执行指令速度是传统80C51的6倍,主要集成了字节方式的I2C总线、SPI接口、UART通信接口、实时时钟、E2PROM、A/D转换器等一系列有特色的功能部件,有可配置的片内振荡器及其频率范围和RC振荡器选项(通过用户可编程Flash配置位选择),选择RC振荡器(出厂时校准到±1%)时不需要外接振荡器件,振荡器选项支持的频率范围为20 kHz~18 MHz(最大),可选择RC振荡器选项并且其频率可进行很好的调节.操作电压范围为2.4~3.6 V,I/O口可承受5 V(可上拉或驱动到5.5 V),P89LPC922有8个I/O口(P0.3~P0.7、P1.4、P1.6、P1.7),各口驱动电流可达20 mA,软件开发方便,支持ISP/ICP/IAP等多种编程方式,应用广泛.ICP编程方式仅需5根口线:VDD、VSS、RESET、P0.4(PDA)、P0.5(PCL),其引脚图如图3所示.
图3 P89LPC922 ICP编程相关引脚图
1.4 电源电路的设计
电源芯片选用SP6201,SP6201是CMOS LDO器件,适用于要求高精度、操作方便的场合,其中D2的作用是防止输入负向电压(利用二极管的单向导电性),发光二极管D1为电源指示灯, C1,C2起到抗干扰作用,C1滤除低频,C2滤除高频.+5 V电源由USB接口提供,经过电源芯片SP6201转换为3.3 V电源,整个系统由3.3 V电源供电.选择低的电源电压3.3 V,这样能够充分保证单片机和外围器件的低电压低功耗的特性,其电路如图4所示.
图4 电源电路图
1.5 单片机控制电路的设计
系统设计时,采用LPC922的内部晶振,单片机内部自动复位,3.3 V电源供电,其电路图如图5所示.
图5 单片机控制电路
图6 实时时钟电路
1.6 时钟电路设计
FM3104外接32.768 kHz晶振,0.1 F电容作为后备电池,I2C总线的器件SDA和SCL管脚都是漏极开路(或集电极开路)输出的结构.因此实际使用时SDA和SCL两根信号线都必须加上拉电阻Rp(Pull-up Resistor),上拉电阻一般取值3~10 kΩ,此处选用10 kΩ的上拉电阻,其电路如图6所示.
1.7 显示电路的设计
PCF8576为带有I2C总线接口的字符式LCD驱动/控制器,它有4个背极输出和40 个显示段输出,因此,最多可驱动160个LCD显示段.PCF8576可以级联以适应驱动较大规模的LCD显示器,通过I2C总线接口除了可以与具有I2C总线接口的MCU相连外,通过I2C总线的模拟,也可以通过MCU的通用I/O口与之相连.PCF8576内部设置的显示RAM及子地址的自动增量和显示方式自动切换使其通讯控制量减少到最小,显示电路如图7所示.
图7 显示电路的设计
2 软件设计
2.1 系统软件开发环境
本设计采用Keil C51μVision2集成开发环境,它是基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立和管理、编译、连接、目标代码的生成到软件仿真及硬件仿真等一系列完整的开发流程.在μVision2的仿真功能中,软件仿真模式下,无需任何单片机硬件即可完成用户程序的仿真调试,极大地提高了用户程序的开发效率;硬件仿真模式下,用户可以将程序下载到自己的单片机系统板上,完成实时仿真.另外,其C编译工具在产生代码的准确性和效率方面已经达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想.
图8 系统主程序流程图
2.2 程序设计语言
单片机的程序设计可以使用汇编语言,也可以使用C51语言,这两种编程语言各有优势.C51语言编程越来越成熟,并成为了行业编程语言的趋势,因此本设计选用C51程序设计语言.系统的主程序包括对P89LPC922、FM3104和PCF8576的初始化、按键值的获取以及显示模式的选择,SetFocus,DispState为状态标志位,通过键盘设置改变其状态,从而实现万年历工作状态的切换.CPU平时处于掉电状态,看门狗定时唤醒CPU.系统主程序流程图如图8所示[6].
3 结束语
本系统以LPC922单片机和I2C总线为核心,通过硬件和软件编程来实现万年历和低功耗的功能,该系统结构简单、实现方便,经有关部门测试,该系统计时准确,整个系统的功耗做到μA级别,在实际中有很高的实用价值.
[1] I2C总线概要(产品应用手册)[R] .广州周立功单片机发展有限公司,2006:11.
[2] 何立民. I2C总线应用系统设计[M] .北京:北京航空航天大学出版社,1995:78-91.
[3] 周立功.LPC900系列Flash单片机应用技术[M] .北京:北京航空航天大学出版社,2005:33-42.
[4] 李朝青.单片机原理及接口技术[M] .北京:北京航空航天大学出版社,2005:43-72.
[5] 李 军.51系列单片机高级实例开发指南[M] .北京:北京航空航天大学出版社,2004:36-47.
[6] 潭浩强.C语言程序设计(第二版)[M] .北京:清华大学出版社,1999:26-59.