《基于单片机的智能-ic-卡电表设计硬件系统-学位论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的智能-ic-卡电表设计硬件系统-学位论文.doc(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 南 昌 工 程 学 院毕 业 设 计 (论 文)信息工程学院 系(院) 电子信息工程 专业毕业设计(论文)题目 基于单片机的智能IC卡电表设计(硬件系统)学生姓名 某某某 班 级 09电子信息工程 学 号 2009100234 指导教师 欧阳瑾完成日期 2013 年 5 月 20 日基于单片机的智能IC卡电表设计(硬件系统)The Design of Intelligent IC Card Meter Based on Single Chip Microcomputer(Hardware System)总计 毕业设计(论文) 32 页 表 格 2 个插 图 22 幅南昌工程学院本科毕业设计(
2、论文)摘 要电表是我国电工仪表行业中产量最大的产品,随着高新技术尤其是电子信息技术的快速发展,电子式、多功能、高精度、多费率、自动抄表等产品的优势突显,且已经逐步成为电表发展的主流。智能电表具有数据的保护,报警功能,断电的显示,负荷的控制,防窃电功能,远程抄表系统等功能,从计量到数据处理都采用以集成电路为核心的电子器件,从而取消了电表上长期使用的机械部件,随着智能化电表的发展,将最终取代传统电表在用户中的使用。本文主要应用IC卡单元,89C51单片机,LED显示器等各个单元来完成费率的计算,数据的显示,报警,使电表实现智能化。并根据阶梯电价计算出卡内电费剩余等情况,自动报警功能用蜂鸣器进行模拟
3、,并通过四个键盘实现显示的切换以及电价的调整功能,IC卡采用西门子公司的SLE4442卡,可实现逻辑加密,可反复读写,卡内数据保密性好。关键词:智能化电表 89C51单片机 电能计量IAbstractMeter is one of the largest product output in electrical instrumentation industry in China, with the rapid development of high and new technology especially electronic information technology, electron
4、ic, multi-function, high accuracy and rate, the advantage of automatic meter reading and other products, and has gradually become the mainstream of instrument development.smart meter data protection, alarm functions, and the display of power, load control, preventing electricity-stolen, remote meter
5、 reading system, and other functions, ranging from measurement to data processing adopts integrated circuit as the core of electronic devices, and cancelled the meters on the long-term use of mechanical parts, with the development of the intelligent electric meter, will eventually replace the tradit
6、ional electric meter used in the user. This paper application of IC card unit, 89 c51, LED displays, and other units to complete the rate calculation, data display, alarm, intelligent electric meter to realize. And according to the ladder electricity price to calculate the surplus electricity, and s
7、o on and so forth, inside of the card, to simulate the automatic alarm function with a buzzer and implementation by four keyboard display switch and electricity price adjustment function, using Siemens SLE4442 card IC card, which can realize the logical encryption, can be repeatedly read and write,
8、Kane data confidentiality. Keywords: Intelligent electric meter;89C51;Electricity measurement.III南昌工程学院本科毕业设计(论文)目 录摘 要IABSTRACTII第一章 引 言11.1智能电表应用的意义11.2智能电表的发展1第二章 总体方案设计32.1 方案比较32.2 方案选择6第三章 器件介绍和单元模块设计73.1 器件介绍73.1.1 AT89C51单片机73.1.2 ADE775873.1.3 DS1288793.1.4 LCD1602103.1.5 SLE4442123.2单元模块设计
9、123.2.1 电源模块电路123.2.2 信号采集电路143.2.3 计量模块153.2.4 时钟及LCD显示模块163.2.5 接触式IC卡模块18第四章 软件设计204.1 主要软件设计流程框图及说明204.2主要芯片读写程序设计及设计工具21第五章 仿真调试26结语28参考文献29致谢31附录 电路图32第一章 引 言电表是我国电工仪表行业中产量最大的产品。近几年,国家连续出台的多项与电表行业发展相关的政策以及房地产产业的迅速发展,为电表需求的上升及保持行业发展的相对稳定起到了一定的保障作用。 随着高新技术尤其是电子信息技术的快速发展,电子式、多功能、高精度、多费率、自动抄表等产品的优
10、势突显,且已经逐步成为电能表发展的主流,在未来几年里,这种趋势将更加明显。城乡电网改造,使电工仪器仪表行业步入了快速发展的轨道,同时也为行业企业提供了一个科技创新的平台,电工仪器仪表生产企业抓住机遇,通过对国外先进技术的兼收并蓄,并高标准、高起点自主开发了一系列高技术产品。因此研究本课题具有重要的实用意义。1.1智能电表应用的意义目前,我国已经开始大面积推广并使用智能电表,以实现对电价分时,阶梯的统计,随着我国经济的发展,用电量激增,对于电能的管理显得尤为的重要。在现代生产生活中,电能已经发展成为一种重要的能源资源,我国电力事业在改革开放的30年中,发展极为迅猛,所以相应的电能计量仪表制造业的
11、进步也必须与之相适应,这对于电力事业进行统筹规划和发展,促进我国电力事业稳定,健康的发展有着极其重要的意义。新型智能电表不仅具有传统电表的功能,还能对用户的用电情况进行管理和控制,并且相比于传统电表的机械式结构,没有机械摩擦,大大的提高了准确度和灵敏度,且易于实现自动化测量,并且可以实现远程通讯和控制,具有较高的性能价格比,适合我国国情,有广泛的引用价值。智能电表利用微机技术,通讯技术等等,减少了能量的消耗,把采集,处理集中于一体,节省成本和人力资源,提高了工作效率,适应了现代用户的需求。1.2智能电表的发展智能电表是在电子式电表的基础上发展而来,欧美发达国家于20世纪70年代研发并开始使用,
12、经过30多年的不断发展,欧美国家不断对智能电表技术进行革新,功能日趋完善。智能化电表,大体上可分为两种类型:带有微处理器的机电式和全电子式。机电式借用原感应式电表的机芯,通过光电传感器读取转盘转数来测量用户的用电量,如磁卡式电表、电卡式电表、IC卡电表等;而全电子式电表则采用电压电流隔离方式,进行AD转换,将采样值相乘并累计计算用户的用电量。机电式智能电表成本较低,主要用于单相电表,适合于居民用户使用。全电子式电表主要用于三相电计费,针对企业应用。为了实现远程自动抄表,应选择配有通信接口的智能电表,通常有RS485、RS232、CAN总线收发器或红外等几种接口形式。目前,我国的智能电表也可大致
13、分为机电一体式和全电子式两种,机电一体式即在原有机械结构的基础之上附加一定的电子元件,从而达到所需的功能要求,安装简洁,多用在老实机械表的改装,成本低。全电子式则是采用集成电路为核心,取消了老式电表的机械结构,减少了机械摩擦,使得计价更加准确,可靠性高,耗电少,体积小。在收费系统方面,目前国内上使用最为广泛的为IC卡电表收费,成本低,可靠性好,且使用寿命长,一张IC卡基本可使用10年以上,且可实现,预收费,自动断电,加密等多种功能,但是IC卡收费系统也存在很大的缺陷,用户终端仍然与整个网络脱节从经济角度来看电力部门先收费后送电不符合经济政策,可以说在一定程序上侵犯了用户的利益。随着我国提出发展
14、智能坚强电网的提出,为我国电网设施的发展提供了机遇,未来,智能仪器仪表将向着数字化,智能化,网络化,微型化的趋势发展,并进一步与微处理器,PC技术融合,使仪器仪表技术的数字化,智能化水平不断提高。1第二章 总体方案设计本电表采用分时计费原则,将电压,电流等参数进行采集,并输入微处理器,进行运算,并最终实现对于电能的准确计量和控制。因此我们可以采用单片机设计一个智能IC卡电表,采用低功耗设计,正常工作时关闭显示功能,当有IC卡插入时轮流显示当前的用户信息。系统主要功能包括:(1)预付费功能:通过IC卡实现先付费后用电。(2)电量报警功能:当电能表剩余电量低于告警电量时,通过报警指示灯和蜂鸣器告警
15、。(3)电能计量功能:配合感应电表及计量芯片实现对电能的计量。(4)保密功能:通过IC卡加密,实现IC卡与电能表的唯一对应,可以严格有效地防止伪造和复制IC卡的行为,在一定程度上便于电力部门的管理与监督。(5)自动复位功能:当电能表受到干扰程序跑飞时,通过看门狗电路实现系统自动复位。(6)数据自动存储与显示功能:用户数据自动保存在EEPROM中。通过LCD显示当前用户数据。2.1 方案比较智能电表的设计,是基于对用户电压电流信号进行采集,并通过微处理器进行核心运算,当电压电流信号通过采集以后,通过高精度的A/D采样保持,最终输入微处理器,另一方面,通过IC卡座实现对IC卡内部金额的读取,输入单
16、片机,并且要求通过功率和电费的计算,进行显示与报警。对于电力参数的测试,例如电压,电流,有功功率,无功功率,视在功率等,现在都有成熟的测量计算方法,对于电压有效值的测量,可以利用积分电路来实现,也可以利用时间采样信号,将信号值平方,去均值以后,得到平方根,通过A/D,进行采样,有功功率定义为: (2.1)其中和为电压和电流的有效值,为功率因数。而对于非正弦波形的计算,只有通过积分运算来完成。方案一:信号采集信号滤波A/D转换微处理器LCD显示报警键盘控制IC卡图2.1 方案一 在本设计方案中,核心器件为微处理器,这里我们选用是AT89C51单片机,当信号采样后通过A/D转换,送入微处理器,进行
17、数据的分析和计算,智能电表的实现必须对用户的功率进行准确的计算,在信号采集模块中,通过电压互感器和电流互感器,对用户的电压和电流信号进行采集,微处理器进行功率和电费的计算,可通过LCD显示,并可以通过键盘对分时电价进行调整,实现显示的转换和调整,并运用单片机内部时钟设计计时系统,以实现分时的控制。但是此设计有诸多缺陷,首先,在信号采集方面,由于智能电表对于功率的计算,如果单纯的使用单片机,会造成功率计算不准确,如果要提高计算的精度,对于信号的A/D转换就必须采用高精度期间,成本费用增加,其次即便使用了高精度的A/D,在功率计算,补偿方面的程序也想当麻烦,再则,由于使用分时计费系统,只用单片机内
18、部时钟信号进行粗略的计时,产生的时间误差比较大,长时间的使用下会导致计时不准确,而使得电费的计算出现比较大的误差。软件系统方面,其核心则是编写功率计算程序和A/D采样程序,并通过键盘扫描的实现显示的切换。方案二:信号采集ADE7758处理器键盘输入信号滤波LCD显示报警警时钟芯片 IC卡图2.2 方案二本方案的设计思路与方案一大致相同,选用AT89C51单片机作为微处理器,通过电压传感器,电流传感器实现对用户的电压和电流信息的采集,并在单片机中进行电价的计算,与方案一的不同之处在于,方案二中功率计算部分和A/D转换采集部分被一块电能计量芯片ADE7758进行代替,该芯片是以一款高准确度的三相电
19、能采集芯片,适用于计量各种三相,单项配置条件下的有功,无功,视在电能。可省去高精度A/D的费用的同时,也可以减少单片机内部处理功率的步骤,转而由ADE7758完成。同时,由于该智能电表采用分时计费系统,方案二中特别采用一块时钟芯片以提高对于时间的计时准确程度,以确保该电表可以准确计费,同时,由于时钟芯片本身集成有微型电池,可以在断电的情况下继续运行,保证了在智能电表断电的同时,计时系统不至于停止工作。在方案二中,由ADE7758进行功率的计算并进行校准,在该芯片中,通过每相有功增益寄存器写入数据,可对输出产生的平均功率经行改变,该芯片中在每个相位集成了一个有功偏移寄存器,该寄存器为12位寄存器
20、,用以对有功功率经行校准,由于实际电路的工作环境的复杂和多变,以及芯片本身制造工艺和各通道之间经行的干扰,都会造成误差的产生,有功功率寄存器的一个LSB相当于有功功率乘法器输出的LSB的1/16。在满刻度输出时,如果乘法器的输出为XCCCCS(838861d),LPF2输出端的1个LSB相当于在电流通道满刻度60dB计量误差的0.0075。在满刻度时,60dB(输入信号级别为满刻度信号输入的1/1000),LPF2的平均数值为838.861 (838,861/1,000)。LSB1/838.861/16100% = 测量值的0.0075% 。有功功率偏移寄存器修正分辨率为0.0075% ( 6
21、0 dB)。另外ADE7758的各相有拥有一个空载阀值,如果有功公功率的测量值低于满刻度的0.005%,则该值不会被累加,有效的避免了电表的浅动。ADE7758通过41个电能寄存器连续累加有功功率以实现对信号的积分作用,这种离散的累加作用就相当于连续时间的积分作用,平均有功功率的计算时,是有符号运算的,负电能将会在有功功率寄存器中被扣除。当有功功率为正,且达到最大值时,有功功率的数值将反转到达满刻度的负值0X800,并继续增加,当有功功率为负值,且持续减小到达最小时,会自动转为正的对大刻度0X7FFF,并继续降低。在软件系统上,该方案与方案一的区别在于,重点在对于ADE7738和DS12887
22、两块芯片的读写程序的书写,虽然在硬件的搭建上降低了难度,但是在程序书写上难度有所增加。 2.2 方案选择通过对以上两种方案的具体描述和对比,对他们各自的优缺点有了一定的了解。要完成对于电费的准确计算,并综合本次毕业设计成本及可行性进行考虑,最终选择了方案二为本次毕业设计的最终设计方案。31第三章 器件介绍和单元模块设计只有各个系统单元模块的有机结合,才可以构成一个完整的系统。下面将介绍本次设计中使用的一些特殊器件和具体的各功能模块电路组成。3.1 器件介绍3.1.1 AT89C51单片机本设计采用低功耗,高性能的AT89C51单片机, AT89系列单片机(简称89系列单片机)是ATMEL公司的
23、8位Flash单片机。这个系列单片机最吸引人的特点就是在片内含有Flash存储器, AT89C51的单片机是一种低功耗,高性能的含有4K字节快擦写可编程擦除只读存储器(EEPORM)的8位CMOS单片机,时钟频率高达24MHZ,与8086的指令系统和引脚完全兼容。芯片上的EEPROM允许在线(5V)电才擦除,点写入或采用通用的非易失存储器对程序存储器重复编程。此外, AT89C51还支持由软件选择的二种掉电工作方式。非常适用于电池供电或其他要求低功耗的场合。由于芯片内的4程序存储器可在线或用编程器重复编程,因此它有着十分广泛的用途,特别是在便携式和需要特殊信息保存的仪器和系统中显得更为有用。图
24、3.1 AT89C51和AT89C2051管脚图3.1.2 ADE7758ADE7758是一款高精度的电能计量芯片,具有高准确度,适用于三相/三线,三相/四线和其他各种三相系统,该芯片通过SPI数据串行接口和单片机进行连接,模拟电源端(AVDD)=数字电源(DVDD)=5V5%,模拟地端(AGND)=数字地(DGND) = 0 V, 使用片内基准源,CLKIN =10 MHz XTAL,温度范围为40C至+85C3。ADE7758的管脚图如下图所示:图3.2 ADE7758管脚图ADE7758通过SPI串口读写时序图:图3.3 ADE7758写时序图3.4 ADE7758读时序3.1.3 DS
25、12887DS12887为一款时钟芯片,该器件可以提供RTC/日历,闹钟,三个可屏蔽中断和一个可编程方波以及一个114字节的RAM,此RAM有电池备份,不会导致断电后时钟停止的现象,该器件把石英晶体和电池集成在了一起,少于31天的月份月末日期可自动调整,其中包括闰年补偿,该芯片还有一个精密的温度补偿电路用来监视VCC的状态,如果检测到主电源故障可自动转换到备用供电,该芯片接口支持Intel和Motorola两种模式,在本次设计中,采用的是Intel模式,具体读写时序图如下:图3.5 DS12887写时序图3.6 DS12887读时序3.1.4 LCD1602LCD1602是一款工业字符型液晶显
26、示屏,能够同时显示32个字符,内部带有80*8位的内部RAM缓冲区,可显示阿拉伯数字,引文字母大小写,常用符号和日文的片假名等,每一个字符都有一个固定的代码,在本次设计中,可以通过LCD显示万年历,分时电价,剩余金额等数据信息,可以通过键盘来切换显示。部分主要指令说明如下:表3.1 LCD1602指令码指令码功能00111000设置16*2显示,5*7点阵,8位数据接口00001DCBD=1 开显示;D=0关显示C=1显示光标;C=0不显示光标B=1光标闪烁;B=0光标不闪烁000000NSN=1当读或写一个字符后地址加一,光标加一N=0当读或写一个字符后地址减一,光标减一S=1当写一个字符,
27、整屏显示左移(N=1)或右移(N=0),以得到屏幕移动光标不移动的效果S=0当写一个字符,整屏显示不移动80H+地址码设置地址数据指针01H显示清屏:所有指针清零,所有显示清零02H显示回车:数据指针清零LCD1602读写数据时序如下图所示:图3.7 1602读数据时序图3.8 1602写数据时序3.1.5 SLE4442SLE4442是德国西门子公司的接触式加密型IC卡,接口电路简单,编程方便,保密性好,其内部用于一个256*8位的EEPROM主存储器,另其还含有一个带有PROM功能的保护存储器,可进行加密处理,工作温度范围在070,至少可擦写10万次以上,数据保存期最少为10年,工作电压为
28、5V。对IC卡操作的命令分为控制,地址,数据三个部分,传送从控制字节LSB开始,其具体命令如下面所示:表3.2 IC卡命令格式及功能字节1字节2字节3控制地址数据操作00110000输入地址无效读主存储器00111000输入地址输入数据升级主存储器00110100无效无效读保护存储器00111100输入地址输入数据写保护存储器00110001无效无效读加密存储器00111001输入地址输入数据升级加密存储器00110011输入地址输入数据比较数据校验3.2单元模块设计3.2.1 电源模块电路电源模块电路从电网220V电压作为输入,通过该电路后,输出端输出大小为5V的电压,作为单片机及其他芯片的
29、VCC电源,具体的电路图如下图所示:图3.9 电源接线图如图3.9所示为电压模块的电路图,该模块以电网220交流电作为输入,通过整流桥整流后,再经过滤波,最后通过一块78L05稳压芯片进行稳压,得到一个稳定的5V电源,78L05的输出电流可达到100mA,无需外接元件,内部本身带有热过载保护,自带内部短路电流限制。该模块的仿真电路如下图所示:图3.10 电源仿真图图3.10为该电源电路的仿真效果图,可以看到,该模块可以很好的工作得到一个稳定的5V的电源。3.2.2 信号采集电路本次设计为智能电表,所以要对用户的电压和电流都进行采样,再通过ADE7758芯片来得到一个较为准确的功率值并输入单片机
30、中,因此电流和电压的采集电路分别如下图所示:图3.11 采集电路图3.11为电流和电压的采集电路,在电流采集电路中,通过将电流互感器TA32BM串联到用户电路中,以采集用户的电流信息,TA32BM额定输入输出为5A/2.5mA,通过电流互感器将大电流转换到ADE7758可以接受的小电流范围内,然后通过滤波降低信号的干扰,最终输入芯片,在电压采集电路中,通过将电压互感器TV31B-02并联到用户的负载上,采集用户的电压信息,TV31B-02是一款电流型电压互感器,额定电流是2mA/2mA,所以要在电压互感器的缘边串联一个51K的电阻来降低互感器原边的电流值到可承受的范围,最后通过RC电路滤波后,
31、得到一个近似0.5V的电压以输入到ADE7758芯片,和前面的电流值一起,计算出用户的功率。电压互感器相当于一个内阻很小的电压源,正常运行时它的负载阻抗会很大,相当于开路状态,二次侧只有很小的电流,当二次侧短路时,负载阻抗为零,将产生很大的短路电流,会将电压互感器烧坏。因此,电压互感器二次侧严禁短路。电流互感器在正常运行时,二次电流产生的磁通势对一次电流产生的磁通势起去磁作用,励磁电流很小,铁芯中的总磁通就很小,二次绕组的感应电动势不会超过几十伏。如果二次侧开路,二次电流的去磁作用消失,其一次电流完全变为励磁电流,会引起铁芯内磁通剧增,铁芯处于高度饱和状态,加之二次绕组的匝数很多,就会在二次绕
32、组两端产生很高甚至可达数千伏的电压,不但可能损坏二次绕组的绝缘,再者,由于磁感应强度剧增,使铁芯损耗增大,严重发热,甚至可能烧坏绝缘。3.2.3 计量模块计量模块的核心是通过一块ADE7758芯片来完成,通过信号采集电路,将变换后的电压电流信号输入到该芯片,ADE7758是一款高准确度的三相电能计量芯片,带有两路脉冲输出功能和一个串行接口。ADE7758 集成了二阶模数转换器, 数字积分器,基准电路,温度传感器,以及所有进行有功,无功和视在电能计量以及有效值计量所需的信号处理元件。图3.12 ADE7758接线图图3.12为芯片ADE7758的具体接线图,ADE7758作为一款适用范围极广且功
33、能强大的电能计量芯片在本次设计中担任了重要的角色,通过DOUT管脚直接与单片机连接,通过SPI总线方式,与单片机实现数据之间相互通信,从而实现功率的计算,其中DOUT管脚与单片机的P1.4连接,SCLK与单片机的P1.3连接,DIN与单片机的P1.7连接,CS片选信号与单片机的P1.2连接。3.2.4 时钟及LCD显示模块本次设计中,该电表要实现分时计费,既必须引入时钟系统,该时钟系统必须准确,且在电表短时间断电之内,不会停止工作,因此,该模块采用了一块时钟芯片DS12887,该芯片为一款使用很广泛的时钟芯片,具体电路图如下图所示:图3.13 DS12887接线图图3.13为时钟芯片DS128
34、87的连线图,其中DS与单片机的P2.1口连接,R/W与单片机的P2.5口连接,AS与单片机的P2.4口连接,CS与单片机的2.2口连接。通过该芯片可以提供比较精确的万年历。同时智能电表的显示模块选用LCD显示,下图为LCD1602显示电路:图3.14 LCD1602接线图通过该LCD液晶显示器,显示我们需要的一些信息。上述两个模块通过与AT89C51单片机进行连接,可以实现万年历的功能,且可以保证,在智能电表短时间断电的情况下,时钟不会停止运行,继而实智能电表的分时计费系统可以准确的运行,我们用Protues仿真,电路图如下图所示:图3.15 万年历显示仿真图图3.15为万年历显示模块,上图
35、中可以通过按键对LCD显示进行调整,可以显示万年历,分时电价,余额等信息。3.2.5 接触式IC卡模块这里IC卡模块我们选用的是西门子的SLE4442加密型IC卡,SLE4442是一种具有加密逻辑电路的智能IC卡, 内含2568位EEPROM主存储器和一个32位带PROM 功能的保护存储器,其触点配置和串行接口符合ISO 7816 标准(同步传送),具备只有输入正确的3字节可编程密码(加密存储区) 后才能修改数据的特性。下图为具体模块:图3.16 SLE4442卡座第四章 软件设计本设计中,以AT89C51作为微处理器,采用C语言进行编程,配合硬件电路,共同构成了本次设计的核心部分。4.1 主
36、要软件设计流程框图及说明 开 始程序初始化N检测IC有卡?Y Y信号采集及计量LCD显示N余额为零?Y切断用户电源报 警图4.1 主程序流程图本次设计的主要流程为当IC卡插入卡座,单片机检测到IC卡并读取其金额开始计时,当按照开始设定好红灯亮起,同时,LCD显示屏强制转换到余额界面,字体开始闪烁,蜂鸣器长鸣,此时停止计费,并且开始检测键盘,当按下键盘key4后,警告解除,LCD显示界面重新返回时间界面。令一方面,在计费系统正运行时,可以通过键盘检测,切换显示界面,显示界面共有4种,分别为当前时间,3种电价,余额,共计5种界面,当按下键盘key1后,在当前时间界面和3种电价界面,可以调整时间和电
37、价,增加或者减少,分别由键盘key2,key3来控制,由此来完成时间,电价的调整。比照DS12887中去读的时间参数,选取电价开始计算余额,当余额定于30元时,蜂鸣器每一分钟鸣一次,当余额为0时,蜂鸣器长鸣。4.2主要芯片读写程序设计及设计工具本次设计采用C语言,C语言具有简洁明了的特点,在本次设计中,按照各芯片的读写操作时序,以SPI总线操作方式,分别对DS12887时钟芯片,ADE7758电能计量芯片进行读写操作,即可基本完成本次设计的主要功能,同时兼顾完成切换显示时间,电价以及查询余额,并可以调节电价。在读取DS12887时钟芯片时,按照其读写时序,当要写入数据时,先要写入地址,将CS置
38、低,SA,DS分别置高,RW置高,然后给P0口赋值,即要写入的地址,然后将AS,RW置低,再一次给P0口赋值,即要写入的数据,最后将AS,RW,CS,拉高,同理,在读取数据时,也要先写入一个地址,将AS,DS,RW置高,将CS置低,给P0口赋值地址,然后将AS,DS拉低,P0读取数据,最后DS,AS,CS,全部拉高,具体C语言函数如下:void write_ds(uchar add,uchar date)dscs=0;dsas=1;dsds=1;dsrw=1;P0=add;dsas=0;dsrw=0;P0=date;dsrw=1;dsas=1;dscs=1;uchar read_ds(ucha
39、r add) uchar ds_date;dsas=1;dsds=1;dsrw=1;dscs=0;P0=add;dsas=0;dsds=0;P0=0xff;ds_date=P0;dsds=1;dsas=1;dscs=1;return (ds_date); 同时,在读取ADE7758芯片中有功功率时,同样,按照其读时序图,先将CS拉低,选中信号,再用SCK模拟一个时钟信号输入,先向ADE7758写入一个地址,再从芯片读出数据,ADE7758和DS12887读写程序最大的不同在于,DS12887可以将8位数据一次性读出,而ADE7758只能一位一位的读取,因此,在书写读写函数的时,需要指明,读取数
40、据的位数。在CS保持低电平的时候,所有的数据传输必须全部完成,另外,除了整体器件复位以外,没有其他方法可以让ADE7758返回通信状态,所以必须传输各寄存器的LSB,复位的方法是运用软件进行复位。如前所述,在第一个字节正在向目标寄存器传送是,可以同时开始另一个字符的传送,但是第二个字节的传输过程不应该在第一个字节传送完成前至少900ns内不应该结束。当ADE7758寄存器经行读取操作访问时,读取命令个写入命令之间至少需要有1.1us的时间间隔,若果间隔过小,将会导致写入操作的最后一个字节丢失,具体位数参见芯片说明书,具体读取函数如下:unsigned long read7753(unsigne
41、d char type,unsigned char databit) unsigned char loop=0; unsigned long rtdata=0; type=type&0x7F; type=type|0x00; for(loop=0;loop8;loop+) SCK=1; _nop_(); if( type&0X80 )SDO = 1;elseSDO = 0;_nop_(); SCK=0; _nop_(); type=(type1); for(loop=0;loopdatabit;loop+) SCK=1; _nop_(); rtdata=(rtdata1); /上升沿读出数据i
42、f(SDI) rtdata+=1; _nop_(); SCK=0; _nop_(); return(rtdata); 本次设计的另一个重点就是现实程序,1602的显示程序同样按照其读写时序图完成,不同的是,1602的显示,需要在主程序的开始写一个初始化函数用以设定1602的显示方式,光标等等,在本次设计中,只涉及到1602的写程序,写数据时,同样需要先写入地址,写地址时,先将RS,EN置低,延迟后再将EN拉高,赋予地址,最后将EN拉低,写数据与读不同之处在于要将RS拉高其余同写地址时一样,具体初始化函数,写函数如下:void init()lcden=0;dula=0;wela=0;set_ti
43、me(); write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);void write_com(uchar com)rs=0;lcden=0;delay(5);lcden=1;P0=com;lcden=0;void write_date(uchar date)rs=1;lcden=0;delay(5);lcden=1;P0=date;lcden=0; 本次设计采用Keil uVision2作为编程工具,用Protues进行实物制作前的仿真,Keil作为现在主流的单片机编程工作具有操作简单,快捷的优点,同时可以与Protu
44、es联动,方便调节和仿真,另用STC-ISP V31将程序下载至单片机上运行。在本次软件设计中,最困难的地方在于对ADE7758的读写操作,ADE7758是一块应用非常广泛的电能计量芯片,第一次使用该芯片时,对于串行的读写操作了解不够深入,导致在书写程序的过程中,时序先后发生错误,不知道如何移位读取等等,后来参考一些例子以后最终调试成功。第五章 仿真调试该程序是用C语言完成,C语言具有简洁紧凑,灵活方便的特点,在调试程序的时候,软件部分大致可以分为两个部分,一部分是万年历等信息的显示部分,一部分是信号采集部分。第一部分,万年历等信息的显示部分,可以用Protues进行仿真,Protues是一款非常实用的仿真原件,通过载入程序到单片机中,利用DS12887时钟芯片构成的仿真效果图,如下图所示:图5.1 仿真演示效果图如上图所示,当路灯亮的时候,表示计价开始,图中4个键盘,通过键盘扫描程序,可以切换显示万年历,电价,余额等信息,当电价为零时,蜂鸣器长鸣,同时,绿灯熄灭,红灯亮起,LCD显示屏显示余额为零,效果如下图所示:图5.2 仿真演示效果图由于ADE7758在Protues的库里面没有,所以无法进行仿真,只有用实物进行演示。本次软件设计中比较艰难的部分在于ADE7758的读写程序以及DS12887在没有实物的情况下经行仿真,前者是因为对于SPI接口的读取