智能电表;51单片机;V9881D;精确测量_第1页
智能电表;51单片机;V9881D;精确测量_第2页
智能电表;51单片机;V9881D;精确测量_第3页
智能电表;51单片机;V9881D;精确测量_第4页
智能电表;51单片机;V9881D;精确测量_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

绪论设计背景伴随我国经济的飞速发展,电力已经成为国家的不可或缺的能源。然而目前的用电管理方式太过落后,始终采用先装表用电然后抄表付费的传统作业模式,并且绝大部分的电表都是分散的。但是这种管理方式对用户和管理人员来说,十分不方便,而且有一定的弊端。为了适应现代智能电网的发展要求,保证用户安全、方便、合理的用电,必须改进传统的电表和用电方式,使之符合现代智能电网的发展。很长一段时间来,我国主要生产感应式机械交流电表,虽然近几年开始生产使用简单的数字式电能表,但抄表绝大部分仍采用人工的方式。我们的社会正在逐渐步入信息化,网络化时代,电力系统也逐渐变得更加智能化,人工抄表对电力系统智能化管理的阻碍逐渐显现。对电力系统而言,除了用电终端还没实现与网络对接外,发电、输电、配电等。此次设计的电能表,减少了电表功耗,计量更加准确,十分简便快捷,工作效率大大提高,最大程度上满足现代智能电网的要求。传统电能表电能表的背景电能表在我国电工仪表行业中占很大比重。伴随电力系统的发展,电能表经历了很多阶段:从感应电能表到脉冲电能表再到纯电子式电能表。感应电能表:电能表的金属圆盘在磁场中会感应出电流,与磁场相互作用就会产生力,正是这个力驱动电表工作。感应电能表:工作元件与感应电能表的很相似,不过其电能脉冲转换是由光电传感器达成,脉冲转换后通过电子电路处理,最终可以得到电能数据。纯电子式电能表:电能计量全部由电子电路完成,所以电子式电能表的共同特点是都使用到乘法器。管理智能化要求访问电能表的电参数逐渐增多,还需要与电能表实现双向实时通讯,数字乘法器型电能表的核心是微处理器,因此其功能扩展容易,和配电自动化系统集成也就容易。在本世纪初,工商业用表的主流逐渐成为电子式电能表,不再是感应式电表。智能电表加强了用电管理智能化的能力。目前复费率表技术发展迅速,预付费技术也日渐完善,尤其是IC卡和非接触式卡等技术的使用,大大提高了预付费表的安全性和可靠性。电能表的发展方向随着国家城乡电网改造,电工仪表行业有了一个飞速的发展,但是改造完成后,电工仪器仪表行业发展逐渐平稳,进入发展低潮,但发展没有停止。在高新技术尤其是电子信息技术快速发展下,要求电表不仅仅能完成电量的简单计量,还能实现管理、自动抄表等若干功能。电能表发展的主流将会是纯电子式,测量精度高、功能多样化、费率多样化、网络化、抄表自动化等,而且在未来,这种发展趋势会越来越明显。智能电能表智能电表的概念智能电表,顾名思义就是把传统电表智能化,除了能够实现简单的计量外,还能实现电功率、电能等电参数的准确实时计量,与上位机实时通讯,用电管理等功能。智能电表技术主要应用微机技术、通讯技术等技术,把智能芯片作为核心。智能电能表的一般结构硬件部分主要由数据采集电路,电能计量芯及相关电路,单片机及相关电路,通信接口电路。数据采集电路实现模拟信号和数字信号的转换。单片机及其外围电路实现程序和数据的存储并完成相关的程序、数据运算和处理。人与仪表的相互“交流”,主要通过液晶显示屏,上位机等。通信接口电路将仪表和计算机联系在一起,实现仪表和计算机信息的实时交换。软件部分主要分为两部分,一部分主要针对键盘、单片机I/O接口、存储器和显示器等,控制协调他们正常工作,另一部分主要针对通信接口,控制协调仪表和计算机通信。比如操作键盘可以输入并存储电表的相关功能、操作方式以及工作参数;控制单片机I/O接口电路完成数据采集;控制存储器可以把电表的各种状态,测量的电能数据分时实时地存储;控制液晶显示器可以把电表的各种状态,测量的电能数据通过图形、字符、数字等形式显示给用户。控制通信接口接收和分析来自通信总线的各种程序操作码,并根据计算机的远程命令,通过通信接口将电表的工作状态和测量的电能数据等输出到上位机,或者完成计算机要求的相应的动作。智能电表的主要特点1.测量精度高,2.可以间接测量难以测量的参数,如无功功率、功率因数等。3.具有简单的控制功能,如过负荷控制。4.具有按键查询功能,通过按键可以查询显示电量参数,设定仪表的处置参数。5.具有通信接口,可以对智能电表远程控制,使其具有自动抄表功能,还可以与计算机或其他仪表组合使用,构成功能多样的测量系统。系统方案设计系统设计的基本思路通过电压、电流采样电路,将模拟信号输入计量芯片V9881D,电能计量芯片V9881D经过一系列的操作,输出相应的脉冲。单片机STC89C51可以测量瞬时有功功率,完成对功率、电能及其他电参量的精确测量,设定时间参数后,还可以实现分时计量和存储等功能。单片机STC89C51还可以上位机实时通讯,完成电量信息和控制指令的交互。具体设计任务测量相关的电参量,即采集电压信号和电流信号输入到计量芯片V9811D中。设计出系统结构框图,完成系统硬件电路的设计,具体包括电压、电流采样等计量电路的设计,计量芯片和单片机的接口电路设计,单片机外围电路的设计以及数据存储模块、时钟模块、显示模块、电源模块和通信接口电路的设计。电能测量原理在物理上,电能就是电源流向负载的能量流。通过在一定时间内用户消耗的电能的速度可以被称为瞬时功率,在数学上也可以被看作是瞬时电压和电流瞬时值的乘积,所有这些“即时”的电能消耗全部加在一起就是电能消耗的总数。因此,该产品的有功功率的电压和电流的瞬时值的积分时间的表达式如下:设在t时刻I的表达式为:得平均有功功率P为一个T内的电能W为总能量就是三个分相能量相加的和值:在现实电网中,电压电流信号是由50Hz频率分量的正弦信号荷很多谐波信号组成的。事实上,我们可以清楚地察觉到直流分量和高频分量的信号被包含在瞬时功率信号之内,从长远的角度来看,但凡频率不为0的频率分量和时间积分没有任何的联系,它们互不干扰。为了获得直流分量,需要对瞬时功率信号进行检测。系统结构框图系统结构图是系统硬件电路设计的基础系统结构框图本次设计的单相电能表核心芯片是V9881D计量芯片和STC89C52单片机,利用单片机定时/计数器T0端对V9881D输出的脉冲计数,再根据计量芯片V9881D的计量原理,就可以测得有功、无功等电参量。单片机利用AT24C02芯片对电参量的定时存储,利用按键进行电参量的查询,利用1602液晶显示器进行电参量的显示,利用RS232总线把电参量进行远程传送,传送到电脑上位机。DS1302时钟芯片可以为电表计量存储提供时间参数,同时可以作为数字时钟。电源模块可以采用电源插座直接供电。本章小结本章首先介绍了系统设计的基本思路,通过电压、电流采样电路,将模拟信号输入计量芯片,输出相应的脉冲。单片机可以完成对功率、电能及其他电参量的精确测量,设定时间参数后,还可以实现分时计量和存储等功能。其次分析了具体的设计任务,最后研究了系统结构框图。硬件设计系统硬件电路设计本章节主要是对硬件电路进行说明,通过划分各个功能模块,选择相关的芯片。设计了V9881D外围电路,包括电压、电流采样电路的设计,计量芯片V9881D与单片机接口电路的设计,同时阐述了电能计量的一般原理和相关电路参数计算;设计了STC89C52外围电路,包括单片机最小系统以及外围相关模块的电路设计。计量芯片V9881DV9811D的特点是高性能、低功耗,他由集成模拟前端、电能计量模块、增强型内核、WDT、Flash、RTC、SRAM和LCD驱动等功能模块组成。V9881D的主要特点5V电源供电,电压输入范围:2.5V~5.5V。低功耗设计:全速工作时,芯片典型工作电流:5.5mA。休眠时,芯片典型工作电流:10μA。基准电压:1.185V(10ppm/°C),外部电容漏电时产生中断支持灵活的防窃电应用支持LQFP-100/64、TQFP-48和SSOP-24封装工作温度:-40~+85°C储存温度:-40~+125°C引脚分布图电压采集通道设计在电路理论方面上说,电压采集通道电路要首先保证输入计量芯片ADE7757电压通道中的电压信号处于芯片的工作范围内,所以电压采集通道可以采用电阻分压电路来实现。通常电能表工作的环境是不定的,而且电能表元件参数也会存在一定的误差,因此在分压电路中,设计一个电阻调整网络,这样便可以使电压信号大小在一定范围内改变,从而可以校验计量芯片ADE7757输出脉冲的频率,调整电能表的精确度,所以分压电路又有校验的作用。如图,改变跳线J就可以短接R,从而调整整个电阻网络的总电阻,有调整和校验的作用。电压采集通道电流采集通道设计电流采集通道电路相当于一个PGA可编程差动放大电路,外围电路的目的是抗混频滤波,图中的R3C5和R4C7组成了两个一阶低通滤波器,把电流通道中的高频成分滤除。因此为了减少误差,抗混频滤波器选取的电容器和电阻器必须为精密的。电流通道单片机外围电路设计及器件选择单片机STC89C52概述STC89C52是生产于宏晶科技公司,它运行的速度快,抗干扰的能力强,功耗低,和传统单片机相比较,是新一代的单片机。而且在多了很多新功能与特性的同时,他的指令代码等也可以和传统的8051单片机完全兼容。不仅如此,它的两种工作机器周期,包括12时钟/机器周期和6时钟/机器周期,并且使用者可以任选以上两周中期其一来配合自己的实际使用。该单片机提供的应用程序的存储空间足足有8K字节,同时还具有512字节的RAM。I/O口多为通用的,一共有32个。该型号的单片机可以编程的环境也很广泛,包括在系统中完成编程的,也还可以在应用中完成编程。因此对它编程通过串口RxD和TxD即P3.0和P3.1端口即可完成,也就省去了专门编程使用的编程器,当然也是不需要特别的专业的仿真器,这样就加快了下载用户程序的速度,只需短短几秒便可以完成。他的一个16位定时器\计数器,便是他与传统的单片机的差距了,传统8051单片机并没有16位的定时计数器,所以STC89C52一共存在3个16位定时器\计数器,即定时器T0、T1、T2。它外部有4路可以由下降沿或低电平触发的外部中断,它还具有通用的异步串行口(UART),如果使用定时器软件,就可实现多个通用的异步串行口。STC89C52RC单片机的正常工作模式加上掉电模式还有空闲模式。这就是该单片机的三种工作模式。其中正常工作模式的功耗是很低的,掉电模式的功耗更低,功耗通常小于0.1μA,单片机在这种模式下工作,如果一旦出现了外部中断,就会被立即唤醒,当中断返回之后,就会继续执行原程序,因此这种模式通常在水表、电表、气表等由电池供电的系统及便携设备中使用。空闲模式的功耗通常为2mA。下图即是STC89C52单片机的引脚配置,STC89C52的引脚配置图STC89C52RC主要引脚功能说明如下表所示,STC89C52RC主要引脚功能说明

引脚号名称功能40引脚VCC电源电压20引脚VSS接地39~32引脚P0端口(P0.0~P0.7)通用I/O口1~8引脚P1端口(P1.0~P1.7)21~28引脚P2端口(P2.0~P2.7)21~28引脚P3端口(P3.0~P3.7)9引脚RST复位输入30引脚ALE地址锁存控制信号19引脚XTAL1振荡器反相放大器和内部时钟发生电路的输入端18引脚XTAL2振荡器反相放大器的输入端P1.0和P1.1端口除了作为一般的准双向I/O口使用外,还可以作为外部计数输入端口,从而为定时器/计数器服务。下表便是其引脚的复用功能。

引脚号功能特性P1.0T2(定时器/计数器2外部计数输入),时钟输出

P1.1T2EX(定时器/计数器2捕获/重装触发和方向控制)

P3口除作为一般I/O口外,还有许多复用功能,其引脚复用功能具体参见下表,

引脚号复用功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0的外部输入)P3.5T1(定时器1的外部输入)P3.6(外部数据存储器写选通)P3.7(外部数据存储器读选通)单片机控制电路最小系统单片机控制电路最小系统如图所示,单片机控制电路最小系统复位电路单片机具有系统上电复位和在系统运行过程中,通过人工按钮复位,这两种复位的方式。由于系统在实际运行过程中,人工按钮复位是最通用的,这就是本设计中采用该上电按钮复位的原因。晶振电路单片机晶振电路单片机内部存在这一个反相放大器,其输入端为XTAL1,输出端为XTAL2,该反相放大器可以用作构成内部振荡器。本次设计中,内部时钟接法是本次单片机的晶振电路的接法,具体接线如上图所示。LCD显示器模块设计LCD显示器工作原理简介LCD液晶显示器是一种应用非常广泛的显示器,分为字段显示和字符显示两种。因此在便携式仪表和低功耗的高档仪器仪表广泛采用LCD液晶显示器。其字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。芯片1602简介芯片1602的引脚图如下图所示芯片1602管脚图芯片1602引脚功能说明引脚号名称功能1脚VSS地电源2脚VDD5V正电源3脚VL液晶显示器对比度调整端4脚RS寄存器选择端5脚R/W读写信号线6脚E端使能端7~14脚D0~D78位双向数据线15脚背光源正极16脚背光源负极当RS和R/W接不同电平时,芯片会有不同的操作,具体操作如表所示,RSR/W功能低电平低电平写入指令或者显示地址低电平高电平读忙信号高电平低电平写入数据数据存储模块设计芯片24C02简介24C02芯片由CATALYST公司生产的,他的内部含有8位字节多达256个,同时24C02芯片操作简单,他在实际使用中的优点还是非常明显的,比如与400KHzI2C总线完美兼容,工作电压范围大,从1.8到6.0伏都可以,由于CMOS技术,其功耗很低,具有写保护功能,芯片的管脚图如下图所示,芯片24C02的管脚图各管脚功能存储模块电路设计图存储模块电路图如下图所示,存储模块电路图

时钟模块设计DS1302简介DS1302的管脚配置如下图所示,DS1302管脚配置图DS1302引脚功能引脚号名称功能1脚VCC2主电源8脚VCC1后备电源2/3脚X1、X2振荡源,外接32.768kHz晶振4脚GND地端5脚RST复位/片选线6脚I/O串行数据输入输出端7脚SCLK时钟输入端时钟电路设计下图为时钟电路图设计图,时钟电路图通信模块设计单片机通信方式并行数据传送,顾名思义,就是同一时间内多个数据位并行同时传送,因此提高了传输效率,传送的速度也就比较快,但是快速的传输速度是以高成本为代价,因为并行数据传送有多少数据位就需要多少根线,只有这样才能实现同一时间内多个数据位并行同时传送。并行数据传送对于长距离的数据传送来说,成本较高,它通常适用于短距离的数据传送。串行数据传送,顾名思义,数据传送按位的顺序依次进行,前一数据位传送完毕后一数据位才可以传送,因此他的传输速度比较慢,但是传输成本低,因为串行数据传送最少只需要一根传输线。串行数据传送比较适用于传输距离从几米到几千米的长距离的数据传送。综上所述,结合电表的实际使用,本次设计的智能电表的数据传送采用串行数据传送。通常,串行数据传送又称为串行通信。8051单片机的串行通信,具有四种工作方式,这些四种工作方式可以在实际使用中通过设置单片机的相应端口根据实际使用情况,任意选择。RS232串行口标准简介RS232是由美国电子工业协会于1962年指定的一种串行通信接口标准。通信设备双方只有同时遵守这一标准,双方才可以进行通信,它是异步串行通信中应用最广泛的总线标准。这一标准规定了在串行通信中通信设备之间连接电路的电气特性,约定了他们之间的通信格式,以及其他通信约定。接口电路设计通信模块电路图设计如图所示,通信模块电路图本章小结本章我首先介绍了系统硬件电路,计量芯片V9881D,其次设计了电流采集通道,电压采集通道,单片机外围电路设计及器件选择,LCD显示器模块设计,显示电路设计,数据存储模块设计,最后介绍了时钟模块设计,通信模块设计。软件设计系统软件程序流程图本次软件设计的主要思路采用的是嵌套的方法,在主程序中嵌套各种中断程序,避免程序冗杂,影响程序正常运行。首先设计系统软件的主程序,它是系统软件部分的基础,它可以启动系统软件各个功能部分,完成初始化。中断程序是针对各种事件的处理,例如按键处理、数据通信等。主程序设计框图主程序流程图如图所示系统主程序流程图功率计量流程图由于本次设计中的计量芯片仪表参数是6400imp/Kmh,因此16个脉冲相当于16/6400=0.0025kwh的电量或0.0025*3600000=9000J的电量。时间t由两部分num0和num1记录,将TH0的初值设置为56,则每(256-56)*1us=200us产生一次中断。这时num自动加1,当计满16个脉冲后,将num的值赋给num0,num1则为计满16个脉冲那一刻TH0的值。因此有时间t=(num0*200+(num1-56))us。所以功率P=电量/时间=9000*1000000/(num0*200+(num1-56))。其流程图如图所示:功率计量流程图按键查询流程图中断程序流程图如图所示:中断程序流程图本章小结本章我首先介绍了主程序设计框图,其次设计了功率计量流程图,最后完成了按键查询流程图。结论经过一个多月的紧张工作,我在老师和同学的帮助下,基本上完成了智能电表的设计。但是本次设计由于时间紧张,自己水平能力有限以及各种外部条件的限制,并没有达到自己预想的水平。硬件部分设计主要包括电压、电流等数据采集输入、输出电路的设计,电能计量芯片及相关电路的设计,单片机及外围相关电路的设计,比如存储模块、时钟模块、显示模块、电源模块、通信模块等各个功能模块的电路设计。软件部分的流程图设计,主要包括主程序设计框图,功率计量流程图,按键查询流程图。但是本次设计总体还是有可借鉴之处,比如本次设计选取的计量芯片是V9811D是一款高性能、低功耗的单相电能计量SoC芯片,可提供提供各种数据,测量精度±1°C电池电压/外部电压可为单相多功能电能表提供单芯片解决方案。总之这次设计的收获还是比较大的,通过这次设计我充分了解了传统电表的发展以及弊端,知道了智能电表的概念以及其未来的巨大优势。通过查阅相关资料,认识了专门的电能计量芯片V9811D。同时加深了本科所学知识的理解,比如单片机的知识,微机原理的知识等。这是自己第一次真正意义上做设计写论文,大大增强了我的自主学习能力,自己不懂知识自己到图书管查阅资料,或到网上搜索,为今后的学习生活打下了良好基础。不管最后自己的毕业论文成绩如何,我相信这都是我大学最后美好的回忆。致谢经过长时间的不断努力,为期两个月的毕业设计终于在此时此刻完成了。这时候感觉整个人都轻松了很多,并且感到一定的成就感。毕业设计能够直接体现我们的实践能力,并且它会涉及到很多方面的知识。这次设计,让我在设计方面的技能和知识的到了一定的提高,并提高了我在单片机方面的知识水平。同时我也培养了正确设计的方法和想法,以及独立解决实际应用中遇到的问题的工作能力。本次设计还提高了我获取资料和分析问题的能力,同时也提高了我在设计计算、原理图绘制、c语言、书面表达等方面的能力,为我以后进入社会工作打下良好的基础。在这里要特别感谢我的指导老师,虽然在毕业设计的期间,我们很少见面,我们都知道现在科技发达,通过毕业交流群来进行交流完全可以。每当有新的关于毕业设计的消息,她都会第一时间通过群来告诉我们,而且每当问她问题时她都耐心的回答我们,因为有了她的指导我才能按时完成我的毕业设计;同时也要感谢同学们的帮助,有时候遇到不懂的东西,通常是先找同学们讨论,没有结果才问老师。最后要我要再次感谢这四年对我培养的所有老师,很难说再见,但是又不得不说再,你们是我最好的朋友,谢谢你们。参考文献[1]赵伟,庞海波.电能表的发展历史[J].电测与仪表,1999,8(2):9-11.[2]谭绍琼.浅谈电能计量装置的发展[J].机械管理开发,2007,6(5):3-8.[3]王毅.电能计量装置介绍[J].电力自动化设备,2007,5(11):6-10.[4]郑文,赵伟.电能自动抄表技术及相关思考[J].电测与仪表,2011,3(4):12-14.[5]黄伟.电能计量技术[M].北京:中国电力出版社,2004.65-76.[6]阎士琦.电能计量装置接线分析200例[M].北京:中国电力出版社,2008.34-36.[7]李全利,仲伟峰,徐军.单片机原理及应用[M].北京:清华大学出版社,2006.77-91.[8]刘乐善.微型计算机接口技术原理及应用[M].武汉:华中科技大学出版社,2005.66-89.[9]谢瑞和.串行技术大全[M].北京:清华大学出版社,2003.122-139.[10]陈龙三.8051单片机C语言控制与应用[M].北京:清华大学出版社,1999.34-57.[11]张培仁.基于C语言编程:MCS-51单片机原理及应用[M].北京:清华大学出版社,2003.54-67.[12]谭浩强.C语言程序设计.北京:清华大学出版社,2000:45-123.[13]Stiqer.Ruth.Meter-readingmethodschangeslowly[J].GasUtilitymanage,2004,48(4):26-28.[14]Lucn,Zhangbu-han,LuYi-min.Automaticmeterreadingsystemsolutionanditsrealization[J].ElectricpowerAutomationEquipment,2003,23(6):68-70[15]Satanic.D.Influenceofthetransmissionmediumqualityontheautomaticmeterreadingsystemcapacity[J].ElectricPowerAutomationEquipment,2003,23(6):68-70.附录1单片机控制电路附录2程序源文件#include<reg52.h> #include<intrins.h>#include<stdio.h>#defineucharunsignedchar#defineuintunsignedintsfrT2MOD=0xc9;//T2MOD在reg52.h中没有定义,这里进sbitd1=P2^6;sbitscl=P2^1;sbitsda=P2^0;sbitRS=P2^2;sbitRW=P2^3;sbitE=P2^4;sbitBF=P0^7;sbitfmq=P2^7;sbitSCLK=P1^6;sbitDATA=P3^6;sbitRST=P3^7;sbitkey=P3^2;sbitkey1=P3^3;sbitjdq=P1^3;floatnum=0.0,num0=0.0,num1=0.0,eng=0.00,pow=0.00;xdatauchari=0,j=0;bitflag=1;ucharcodestring[]={"POW"};ucharcodestring1[]={"ENG"};ucharstring2[10];ucharstring3[10];ucharcodedigit[10]={"0123456789"};//定义字符数组显示数字uchara1;voiddelaynus(unsignedcharn){unsignedchari;for(i=0;i<n;i++);}voiddelay1ms(){unsignedchari,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}voiddelaynms(unsignedcharn){unsignedchari;for(i=0;i<n;i++)delay1ms();}voiddelay(unsignedintn);voidWrite_com(unsignedchardictate);bitBusyTest(void);voidWriteAddress(unsignedcharx){Write_com(x|0x80);}voidWrite_com(unsignedchardictate){while(BusyTest()==1);RS=0;RW=0;E=0;_nop_();_nop_();P0=dictate;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;}voidWriteData(unsignedchary){while(BusyTest()==1);RS=1;RW=0;E=0;P0=y;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;}voidLcdInt(void){delay(15);Write_com(0x38);delay(5);Write_com(0x38);delay(5);Write_com(0x38);delay(5);Write_com(0x0c);delay(5);Write_com(0x06);delay(5);Write_com(0x01);delay(5);}/*****************************************************函数功能:向1302写一个字节数据入口参数:x***************************************************/voidWrite1302(unsignedchardat){unsignedchari;SCLK=0;//拉低SCLK,为脉冲上升沿写入数据做好准备delaynus(2);//稍微等待,使硬件做好准备for(i=0;i<8;i++)//连续写8个二进制位数据{DATA=dat&0x01;//取出dat的第0位数据写入1302低位在前,高位在后delaynus(2);//稍微等待,使硬件做好准备SCLK=1;//上升沿写入数据delaynus(2);//稍微等待,使硬件做好准备SCLK=0;//重新拉低SCLK,形成脉冲dat>>=1;//将dat的各数据位右移1位,准备写入下一个数据位}}/*****************************************************函数功能:根据命令字,向1302写一个字节数据入口参数:Cmd,储存命令字;dat,储存待写的数据***************************************************/voidWriteSet1302(unsignedcharCmd,unsignedchardat){RST=0;//禁止数据传递SCLK=0;//确保写数居前SCLK被拉低RST=1;//启动数据传输delaynus(2);//稍微等待,使硬件做好准备Write1302(Cmd);//写入命令字Write1302(dat);//写数据SCLK=1;//将时钟电平置于高电平状态RST=0;//禁止数据传递}/*****************************************************函数功能:从1302读一个字节数据入口参数:x***************************************************/unsignedcharRead1302(void){unsignedchari,dat;delaynus(2);//稍微等待,使硬件做好准备for(i=0;i<8;i++)//连续读8个二进制位数据{dat>>=1;if(DATA==1)//如果读出的数据是1dat|=0x80;//将1取出,写在dat的最高位SCLK=1;//将SCLK置于高电平,为下降沿读出delaynus(2);//稍微等待SCLK=0;//拉低SCLK,形成脉冲下降沿delaynus(2);//稍微等待}returndat;//将读出的数据返回}/*****************************************************函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmd***************************************************/unsignedcharReadSet1302(unsignedcharCmd){unsignedchardat;RST=0;//拉低RSTSCLK=0;//确保写数居前SCLK被拉低RST=1;//启动数据传输Write1302(Cmd);//写入命令字dat=Read1302();//读出数据SCLK=1;//将时钟电平置于已知状态RST=0;//禁止数据传递returndat;//将读出的数据返回}/*****************************************************函数功能:1302进行初始化设置***************************************************/voidInit_DS1302(void){WriteSet1302(0x8E,0x00);//根据写状态寄存器命令字,写入不保护指令WriteSet1302(0x80,((00/10)<<4|(0%10)));//根据写秒寄存器命令字,写入秒的初始值WriteSet1302(0x82,((00/10)<<4|(0%10)));//根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,((00/10)<<4|(0%10)));//根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,((00/10)<<4|(0%10)));//根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,((00/10)<<4|(0%10)));//根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,((00/10)<<4|(0%10)));//根据写年寄存器命令字,写入年的初始值WriteSet1302(0x8E,0x80);//根据写状态寄存器命令字,写入保护指令}voidDisplaySecond(unsignedcharx){unsignedchari,j;//j,k分别储存十位和个位i=x/10;//取十位j=x%10;//取个位WriteAddress(0x49);//写显示地址,将在第2行第7列开始显示WriteData(digit[i]);//将百位数字的字符常量写入LCDWriteData(digit[j]);//将十位数字的字符常量写入LCDdelaynms(50);//延时1ms给硬件一点反应时间}/*****************************************************函数功能:显示分钟入口参数:x***************************************************/voidDisplayMinute(unsignedcharx){unsignedchari,j;//j,k十位和个位i=x/10;//取十位j=x%10;//取个位WriteAddress(0x46);//写显示地址,将在第2行第7列开始显示WriteData(digit[i]);//将百位数字的字符常量写入LCDWriteData(digit[j]);//将十位数字的字符常量写入LCDdelaynms(50);//延时1ms给硬件一点反应时间}/*****************************************************函数功能:显示小时入口参数:x***************************************************/voidDisplayHour(unsignedcharx){unsignedchari,j;//j,k十位和个位i=x/10;//取十位j=x%10;//取个位WriteAddress(0x43);//写显示地址,将在第2行第7列开始显示WriteData(digit[i]);//将百位数字的字符常量写入LCDWriteData(digit[j]);//将十位数字的字符常量写入LCDdelaynms(50);//延时1ms给硬件一点反应时间}/*****************************************************函数功能:显示日入口参数:x***************************************************/voidDisplayDay(unsignedcharx){unsignedchari,j;//j,k十位和个位i=x/10;//取十位j=x%10;//取个位WriteAddress(0x0c);//写显示地址,将在第2行第7列开始显示WriteData(digit[i]);//将十位数字的字符常量写入LCDWriteData(digit[j]);//将个位数字的字符常量写入LCDdelaynms(50);//延时1ms给硬件一点反应时间}/*****************************************************函数功能:显示月入口参数:x***************************************************/voidDisplayMonth(unsignedcharx){unsignedchari,j;//j,k分别储存十位和个位i=x/10;//取十位j=x%10;//取个位WriteAddress(0x09);//写显示地址,将在第2行第7列开始显示WriteData(digit[i]);//将十位位数字的字符常量写入LCDWriteData(digit[j]);//将个位数字的字符常量写入LCDdelaynms(50);//延时1ms给硬件一点反应时间}/*****************************************************函数功能:显示年入口参数:x***************************************************/voidDisplayYear(unsignedcharx){unsignedchari,j;//j,k分别储存十位和个位i=x/10;//取十位j=x%10;//取个位WriteAddress(0x06);//写显示地址,将在第2行第7列开始显示WriteData(digit[i]);//将十位位数字的字符常量写入LCDWriteData(digit[j]);//将个位数字的字符常量写入LCDdelaynms(50);//延时1ms给硬件一点反应时间}voiddelay(unsignedintn){unsignedinti,y;for(i=0;i<n;i++)for(y=115;y>0;y--);}bitBusyTest(void){bitresult;RS=0;RW=1;E=1;_nop_();_nop_();_nop_();_nop_();result=BF;E=0;returnresult;}voidmain(void){intm1,m2;jdq=0;LcdInt();delay(10);TMOD=0x16;TH1=(65536-200)/256;TL1=(65536-200)%256;TH0=(65536-16)/256;TL0=(65536-16)%256;TR0=1;TR1=1;EA=1;ET0=1;ET1=1;/*外部中断定义*/EX0=1;EX1=1;IT0=1;IT1=1;T2CON=0x34;//定义串口收发模式RCAP2H=0xff;RCAP2L=0xdc;//RCAP2H一定给0XFF,RCAP2L的值:把fosc/baud/32的值换成16进制,用10000h-这个值,后面2个数SCON=0x50;//方式1,10位异步收发,8位数据,无奇偶校验位TR2=1;Init_DS1302();//将1302初始化while(1){WriteData(a+48);WriteData('.');WriteData(c+48);WriteData(d+48);*/i=0;while(m1--){WriteData(string2[i]);i++;delay(100);}WriteAddress(0x40);i=0;while(string[i]!='\0'){WriteData(string[i]);i++;delay(100);}WriteAddress(0x45);delay(5);i=0;while(m2--){WriteData(string3[i]);i++;delay(100);}}for(i=0;i<5;i++){SBUF=string2[i];while(!TI);TI=0;delay(13);}SBUF='!';while(!TI);TI=0;delay(10);}}voidt0()interrupt1{eng+=16.0/3200;num0=num;num1=TL1;TH0=(65536-16)/256;TL0=(65536-16)%256;if(num0==0&&num1==0)pow=0;else{pow=1*18000*1000000/(num0*200+(num1-65336));num=0;}d1=0;del

温馨提示

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

评论

0/150

提交评论