大学生宿舍限电自动控制器

发布时间:2018-12-04 19:01:19   来源:文档文库   
字号:

本科学生毕业论文(设计)


湖南科技学院本科毕业论文(设计)诚信声明

本人郑重声明:所呈交的本科毕业论文(设计),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。

本科毕业论文(设计)作者签名:


毕业论文(设计)任务书

湖南科技学院本科毕业论文(设计)任务书

注:本任务书一式三份,由指导教师填写,经教研室审批后一份下达给学生,一份交指导教师,一份留系里存档。


湖南科技学院本科毕业论文(设计)开题报告书

注:此表由学生本人填写,一式三份,一份留系里存档,指导老师和本人各保存一份

湖南科技学院毕业论文(设计)中期检查表

注:此表用于指导教师在学生毕业论文(设计)初稿完成后对学生执行任务书情况进行中期检查时用,由指导教师填写。

湖南科技学院毕业设计(论文)指导过程记录表

注:本表与毕业论文一起装订存档。


湖南科技学院本科毕业论文(设计)评审表

说明:评定成绩分为优秀、良好、中等、及格、不及格五个等级,实评总分90—100分记为优秀,80—89分记为良好,70—79分记为中等,60—69分记为及格,60分以下记为不及格。

说明:评定成绩分为优秀、良好、中等、及格、不及格五个等级,实评总分90—100分记为优秀,80—89分记为良好,70—79分记为中等,60—69分记为及格,60分以下记为不及格。


湖南科技学院本科毕业论文(设计)答辩记录表


目录

目录 1

2

Abstract 3

第一章 限电控制器概述 4

1.1 课题的背景 4

1.2 课题研究的意义 4

1.3 课题研究的目的 4

第二章 方案论证及系统设计 6

2.1 有功功率测量方案论证 6

2.2 系统设计 8

第三章 系统硬件介绍 9

3.1 单片机介绍 9

3.1.1 单片机简介 9

3.1.2 单片机编程语言介绍 10

3.1.3 系统选择 12

3.1.4 AT89C51引脚功能介绍 13

3.1.5 定时器01使用 15

3.2 ADE7755原理介绍 17

3.2.1 AD7755简介 17

3.2.2 ADE7755的有功功率测量原理 19

第四章 硬件设计 22

4.1单片机最小系统 22

4.2 供电电路图设计 23

4.3 继电器接口电路 24

4.4 键盘电路设计 24

4.5 显示电路设计 26

4.6 电量采集电路硬件设计 27

第五章 软件设计 28

5.1 Keil C51简介 28

5.2 各个模块程序介绍 30

5.2.1 键盘子程序设计 30

5.2.2 显示子程序 30

5.2.3 定时器1子程序 32

5.2.4 频率子程序 32

第六章 全文总结与展望 34

6.1 结论 34

6.2 设计完善 34

6.3 展望 35

致谢 36

参考文献 37

附录一:电路图 38

附录二:各模块流程图 39

附录三:参考程序 41


大学生限电自动控制器

前大学生宿舍已普遍实行公寓化管理,如何科学合理地对学生进行电能管理是一个亟待解决目的问题。

本文设计了一种采用ADI公司的电能计量芯片ADE7755的自动限电控制系统,通过对用电情况的监视,查处异常用电,从而有效地限制了学生使用热得快、电炉子、白炽灯等易引起火灾的用电器。该系统监测到宿舍用电超过限定功率即自动停电且发出报警声,并能通过数码管显示当前电流,电压,功率值。

关键词功率测量 AT89C51单片机 ADE7755 LED显示


College Students' dormitory power automatic controller

Abstract

Currently with the popularization of the apartments management ,how to manage the electric power reasonably becomes a very important topic to studied.

In this paper, a design using ADI's chip ADE7755 Energy Metering automatic power control system, through the use of electricity in the surveillance, investigation and handling of unusual power, thus effectively limiting the students to use the heat faster, electric sub, incandescent, etc. easy to use electrical fire. Monitoring the system to the hostel for more than limited use of electricity blackouts and power that is automatically sent alarm sound, and can display the current digital tube current, voltage, power values.

Keywords: power measurement AT89C51 MCU ADE7755 LED display

绪论

第一章 限电控制器概述

1.1 课题的背景

随着人们生活水平的提高,以及微电子,自动控制和计算机等技术的飞速发展和广泛应用,人们对住宅的安全性能的要求也越来越高,智能住宅的安全防范系统也应运而生。而在当今智能化住宅小区蓬勃发展的时候,却忽视了同样需要智能化管理的一块巨大市场——大学校园。随着物质生活的富裕,和计划生育的实施,当代的大学生是在家长的溺爱和应试教育的模式下成长起来的一代,大多缺乏独立生活的能力,和对生活常识的了解,对能源的节约意识也不够强。所以公寓寝室经常发生诸如能源浪费,火灾等事件,给学校造成了巨大的损失,也给学生的生命财产带来了巨大的威胁。

高校后勤社会化是社会主义市场经济发展的必然趋势,是我国高等教育跨越性发展的前提,是科教兴国战略的客观需要。而在高校的各项后勤工作中,学生公寓的管理和服务是后勤工作不可或缺的重要组成部分,因此必然成为改革中的重要内容。但学生公寓等后勤设施不完善、管理水平有待提高,仍然是制约高等教育发展的一个关键因素。

1.2 课题研究的意义

为此,为进一步规范加强学生公寓的管理,健全防火安全长效机制。在完善规章制度,健全组织机构的同时,利用先进的科技手段,发展智能化管理系统。坚决杜绝违章用电,特别是学生公寓内的违章用电问题,做好学生公寓的防火防盗工作。充分依靠技术手段完善管理缺陷,实现管理智能化。通过硬件系统的构建,实现放火防盗等功能。借助信息技术手段,建设学生生活网络和公寓管理服务网络,用计算机进行科学的管理和服务,体现高效管理,实施高效服务。

教育部近年来曾两次下发文件,要求“学生公寓内要设立火灾预警监视系统、恶性用电识别装置,通过技术防范设施防止火灾发生”。据京华时报报道,北京市高校秋季学生公寓安全检查也于20061010日正式启动。其中,检查重点为学生公寓安全,尤其是用电安全。但要真正做到用电安全,必须在平时对学生公寓的用电进行控制。

1.3 课题研究的目的


第二章 方案论证及系统设计

2.1 有功功率测量方案论证

对于交流功率,有:

其中瞬时功率

其中有功功率

其中无功功率

其中视在功率

所以

有功功率测量方案分感应式电能测量和电子式测量功率。

电子式测量功率是采用乘法器来实现电功率测量的,被测电压和电流通过电压变换器和电流变换器转换后送至乘法器,乘法器完成电压和电流瞬时值相乘,输出一个与平均功率成正比的直流电压,再用模拟电路或微处理系统进行处理。

这里主要论述电子式有功功率测量方案:

方案一:用四象限模拟乘法器。功率P=UI,所以可以用模拟乘法器测量功率,基本原理如图。设ZL是负载,经过RC滤波器后,其平均值代表有功功率。

2.1所示,这种方法是用纯模拟器件进行处理,他的特点是成本高,容易受干扰,精度不如意做高。

2.1 纯模拟电路处理电路

方案二: 直接对电压,电流进行ADC采样,用软件计算有功功率。这种方法是用两路ADC分别对电压和电流进行量化,其中:

N是一个周期内的采样点数,T为电压电流的周期,为采样间隔时间,是电压和电流采样点的离散值。

单相有功功率的平均值是:

单相功率因数的计算:

这种方法是用微处理器直接对电压,电流进行ADC采样,特点是ADC硬件成本高,因为要做大量运算对微处理器性能要求比较高,精度也不容易做高。

方案三:用专用电能计量芯片。

ADI公司的ADE7755专用电能计量芯片。ADE7755是用于电能计量设备上的芯片,它将有功功率的信息以频率的形式输出。在50/60Hz输入信号时都能满足IEC687/1036标准规定的测试精度要求,在10001的输入动态范围内,测试误差小于0.1%

ADE7755特点:

(1)50/60Hz输入信号时都能满足IEC687/1036标准规定的测试精度要求,在10001的输入动态范围内,测试误差小于0.1%
(2)具有负功率或错线指示功能;
(3)片内带有抗混叠滤波器;
(4)带有电源电压检测功能,电源电压降低到80VDD时,芯片自动复位;
(5)2.5V片内高精度参考电压源,绝对偏差小于4%,温漂小于20ppm/℃;

(6)5V单电源工作,正常工作时芯片功耗30mW
(7)工作温度范围-4085℃的特点;

(8)成本<1美元。

根据上面优缺点分析采用第三种方案。

2.2 系统设计

系统设计的思想是用专用电能计量芯片对系统功率进行测试,用单片机对系统功率进行实时监控,但一段时间内的功率平均值超过设定值时,控制继电器切断电路,当人工处理后重新接通电路,对用户供电。

系统示意图如图2.2所示:

2.2 系统硬件示意图


第三章 系统硬件介绍

3.1 单片机介绍

3.1.1 单片机简介

1.单片机概述

单片微机Single-Chip Microcomputer简称单片机,也有的叫做微处理Micro-Processor简写μP或微控制器Micro-Controller 简写μC,通常统称微型处理部件Micro Controller Unit简写MCU。一般的说,单片机就是在一块硅片上集成CPURAMROM定时器/计数器、和多种I/O的完整的数字处理系统。二十世纪,微电子、IC集成电路行业发展迅速,其中单片机行业的发展最引人注目。单片机功能强、价格便宜、使用灵活,在计算机应用领域中发挥着极其重要的作用。从INTEL公司于1971年生产第一颗单片机Intel-4004开始,开创了电子应用的“智能化”新时代。单片机以其高性价比和灵活性,牢固树立了其在嵌入式微控制系统中的“霸主”地位,在PC机以286386PentiumP高速更新换代的同时,单片机却“始终如一”保持旺盛的生命力。例如,MCS-51系列单片机已有十多年的生命期,如今仍保持着上升的态势就充分证明了这一点。

2.单片机的结构与组成

目前,单片机的系统结构有两种类型:一种是将程序和数据存储器分开使用, 即哈佛Harvard结构,当前的单片机大都是这种结构。另一种是采用和PC机的冯.诺依曼Von Neumann类似的原理,对程序和数据存储器不作逻辑上的区分,用来存放用户程序,可分为EPROMOTPROMFLASH等类。

EPROM型内存编程后其内容可用紫外线擦除,用户可反复使用,故特别适用于开发过程,但EPROM型单片机价格很高。具有ROM型(掩膜型)内存的单片机价格最低,它适用于大批量生产。由于ROM型单片机的代码只能由生产厂商在制造芯片时写入,故用户要更改程序代码就十分不便,在产品未成熟时选用ROM型单片机风险较高。OTP型(一次可编程)单片机介于EPROMROM型单片机之间,它允许用户自己对其编程,但只能写入一次。OTP型单片机生产多少完全可由用户自己掌握,不存在ROM型有最小起订量和掩膜费问题,另外,该类单片机价格已同掩膜型十分接近,故特别受中小批量客户的欢迎。Flash型(闪速型)单片机允许用户使用编程工具或在线快速修改程序代码,且可反复使用,故一推出就受到广大用户的欢迎。Flash型单片机,即可用于开发过程,也可用于批量生产,随着制造工艺的改进,Flash型单片机价格不断下降,使用越来越普遍,它已是现代单片机的发展趋势。 随机内存RAM:用来存放程序运行时的工作变量和数据,由于RAM的制作工艺复杂,价格比ROM高得多,所以单片机的内部RAM非常宝贵,通常仅有几十到几百个字节。RAM的内容是易失性(也有的称易挥发性)的,掉电后会丢失。最近出现了EEPROMFLASH型的数据存储器,方便用户存放不经常改变的数据及其它重要信息。单片机通常还有特殊寄存器和通用寄存器,它们是单片机中存取速度最快的内存,但通常存储空间很小。

3.中央处理器(CPU

是单片机的核心单元,通常由算术逻辑运算部件ALU和控制部件构成。CPU就象人的大脑一样,决定了单片机的运算能力和处理速度。 并行输入/输出I/O:通常为独立的双向口,任何口既可以用作输入方式,又可以作输出方式,通过软件编程来设定。现代的单片机的I/O口也有不同的功能 ,有的内部具有上拉或下拉电阻,有的是漏极开路输出,有的能提供足够的电流可 以直接驱动外部设备。I/O是单片机的重要资源,也是衡量单片机功能的重要指针之一。串口输入/输出口:用于单片机和串行设备或其它单片机的通信。串行通信有同步和异步之分,这可以用硬件或通用串行收发器件来实现。不同的单片机可能提供不同标准的串行通信接口,如UARTSPIMicro Wire等。

4.定时器/计数器(T/C

单片机内部用于精确定时或对外部事件(输入信号如脉冲)进行计数,有的单片机内部有多个定时/计数器。

5.系统时钟

通常需要外接石英晶体或其它振荡源来提供时钟信号输入,也有的使用内部RC振荡器。

以上是单片机的基本构成,现代的单片机又加入了许多新的功能部件,如模拟/数字转换器A/D、数字/模拟转换器D/A、温度传感器、液晶LCD驱动电路、电压监控、看门狗WDT电路、低压检测LVD电路等等

3.1.2 单片机编程语言介绍

对于51系列单片机,现有四种语言支持,即汇编、PL/MCBASIC

BASIC通常附在PC机上,是初学编程的第一种语言。一个新变量名定义之后可在程序中作变量使用,非常易学,根据解释的行可以找到错误而不是当程序执行完才能显现出来。BASIC由于逐行解释自然很慢,每一行必须在执行时转换成机器代码,需要花费许多时间不能做到实时性。BASIC为简化使用变量,所有变量都用浮点值。BASIC是用于要求编程简单而对编程效率和运行速度要求不高的场合。

PL/MIntel8080微处理器开始为其系列产品开发的编程语言。它很像PASCAL,是一种结构化语言,但它使用关键词去定义结构。PL/M编译器好像汇编器一样可产生紧凑代码。PL/M总的来说是“高级汇编语言”,可详细控制着代码的生成。但对51系列,PL/M不支持复杂的算术运算、浮点变量而无丰富的库函数支持。学习PL/M无异于学习一种新语言。

C语言是一种源于编写UNIX操作系统的语言,它是一种结构化语言,可产生压缩代码。C语言结构是以括号{ }而不是子和特殊符号的语言。C可以进行许多机器级函数控制而不用汇编语言。与汇编相比,有如下优点:对单片机的指令系统不要求了解,仅要求对51的内存结构有初步了解寄存器分配、不同内存的寻址及数据类型等细节可由 编译器管理程序有规范的结构,可分为不同的函数。这种方式可使程序结构化将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性编程及程序调试时间显著缩短,从而提高效率提供的库包含许多标准子程序,具有较强的数据处理能将已编好程序可容易的植入新程序,因为它具有方便的模块化编程技术 C语言作为一种非常方便的语言而得到广泛的支持,C语言程序本 身并不依赖于机器硬件系统,基本上不做修改就可根据单片机不同较快地移植过来。

51的汇编语言非常像其它汇编语言。指令系统比第一代微处理器要强一些。51的不同存储区域使得其复杂一些。尽管懂得汇编语言不是你的目的,看懂一些可帮助你了解影响任何语言效率的51特殊规定。例如,懂得汇编语言指令就可以使用在片内RAM作变量的优势,因为片外变量需要几条指令才能设置累加器和数据指针进行存取。要求使用浮点和启用函数时只有具备汇编编程经验才能

避免生成庞大的、效率低的程序,这需要考虑简单的算术运算或先算好的查表法。

最好的单片机编程者应是由汇编转用C而不是原来用过标准C语言的人。

由此来看,单片机有着微处理器所不具备的功能,它可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。

3.1.3 系统选择

本系统以MCS-51单片机成员中的AT89C51为控制核心。AT89C51是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4k bytes的可系统编程的Flash只读程序内存,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序内存既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89C51单片机可为您提供许多高性价比的应用场合,它灵活应用于各种控制领域。

主要性能参数:

1)与MCS-51产品指令系统完全兼容

24K字节在系统编程(ISPFlash闪速内存

31000次擦写周期

44.0-5.5V的工作电压范围

5)全静态工作模式:0Hz—33MHz

6)三级程序加密锁

72568字体内部RAM

832个可编程I/O口线

9316位定时/计数器

105个中断源

11)全双工串行UART通道

12)低功耗空闲和掉电模式

13)中断可从空闲模唤醒系统

14)看门狗(WDT)及双数据指针

15)掉电标识和快速编程特性

16)灵活的在系统编程(ISP—字节或页写模式)

其内部结构结构如图3.1所示:

word/media/image32_1.png

3.1 单片机内部结构图

3.1.4 AT89C51引脚功能介绍

1.电源引脚VccGND Vcc:电源电压,GND(10):接地端。

2.时钟电路引脚XTALlXTAL2

XTAL2(18):接外部晶体和微调电容的一端。在内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体的固有频率。要检查单片机的振荡电路是否正确工作,可用示波器查看XTAL2端是否有脉冲信号输出。

XTAL1(19):接外部晶体的微调电容的另一端。在片内它是振荡电路反相放大器的输入端。若需采用外部时钟电路时,该引脚输入外部时钟脉冲如图3.23.3所示:

3.2 AT89S51单片机晶振接法 3.3 外部时钟电路

3.控制信号引脚RST

RES(8)RST是复位信号输入端,高电平有效。当此输入端保持两个机器周期(24个时钟振荡周期)的高电平时,可以完成复位操作。

4.IO(输入/输出) P0 P1 P2 P3

标准51单片机,如80518031AT89C51AT89S51P89C51等有4IO(输入/输出)口,分别为:

P0(39—32)P0口是一个漏极开路的8位双向埠。作为漏极八路的输出端口,每次能驱动8LsTTL负载。当P0口作为输入口使用时,其先向锁存器(地址80H)写入全1,此时P0口的全部引脚悬空,叫作为高阻抗输入。

P1(1—8)P1口是一个带上拉电阻的8位准双向I/O端口每一位能驱动(吸收成输出电流)4LSTTL负载。

P1口作为输入口使用时,应先向P1口锁存器(地址90H)写入全1,上拉电阻接成高电平。

P2(21—28)P2口是一个带内部上接电阻的8位准双向埠。P2口的每一位能驱动4LSTTL负载。

P3(21—28) P3口是一个带内部上接电阻的8位准双向埠。P3口的每一位能驱动(吸收或输出电流)4LSTTL负载。P3口与其它的I/O埠有很大区别,它除作为般准双向IO口外,每个引脚还具有专门的功能,见表2-1

2-1 端口引脚功能

P1口也是一个准双向口,作通用I/O口使用。其电路结构见图3.4

3.4 P1口作通用I/O口使用图

输出驱动部分内部有上拉负载电阻与电源相连。实质上拉电阻是两个场效应管(FET)并在一起,FET为负载管,其电阻固定;另一个FET可工作在导通或截止两种状态,使其总电阻值变化近为0或阻值很大两种情况。当阻值近似为0时,可将引脚快速上拉至全高电平,当阻值很大时,P1口为高阻输入状态。

P1口输出高电平时,能向外提供拉电流负载,所以不必再接上拉电阻。在埠用作输入时,也必须先向对应的锁存器写入“1”,使FET截止。由于片内负载电阻较大,约20k—40k,所以不会对输入的数据产生影响。

3.1.5 定时器01使用

定时和计数功能由特殊功能寄存器TMOD的控制位C/T 进行选择。这两个定时/计数器有4 种操作模式,通过TMODM1M0选择两个定时/计数器的模式012都相同。模式3不同如下所述模式

模式0

将定时器设置成模式0时类似8048定时器,即8位计数器带32分频的预分频器。

3.5所示为模式0工作方式。此模式下定时器寄存器配置为13位元寄存器,当计数从全为1翻转为全为0时定时器中断标志位TFn置位。当TRn=1 同时GATE=0 INTn=1 时定时器计数置位GATE 时允许由外部输入。INTn控制定时器,这样可实现脉宽测量,TRnTCON 寄存器内的控制位图3

模式0的操作对于定时器0及定时器1都是相同的两个不同的GATE位,TMOD.7 TMOD.3分别分配给定时器0及定时器1

3.5 定时器/计数器/0/1的模式013定时器/计数器

模式1模式1 除了使用了THnTLn全部16位元外其它与模式0相同。

模式2此模式下定时器寄存器作为可自动重装的8位计数器TLn如图3.6所示,TLn的溢出不仅置位TFn而且将THn内容重新装入TLnTHn内容由软件预置重装时,THn内容不变。模式2的操作对于定时器0及定时器1是相同的。

3.6 定时器寄存器

模式3

在模式3中定时器1停止计数效果与将TR1 设置为0相同.此模式下定时器0 TL0 TH0 作为两个独立的8 位计数器图3.7为模式3时的定时器0逻辑TL0占用定时器0 的控制位C/TGATETR0INT0 TF0TH0 限定为定时器功能计数器周期占用定时器1 TR1 TF1此时TH0控制定时器1中断。

模式3可用于需要一个额外的8位定时器的场合定时器0工作于模式380C51看似有3个定时器/计数器当定时器0工作于模式3时定时器1可通过开关进入/退出模式3它仍可用作串行端口的波特率发生器或者应用于任何不要求中断的场合。

3.7 定时器/计数器/0/1的模式3:双8位计数器

3.2 ADE7755原理介绍

3.2.1 AD7755简介

我国与发达国家一样,随着电力供应市场化的逐步深入和计算机网络的快速普及和发展,为了缓解电力供应紧张的现状,正在大力推广分时电价,双费率电子电能表成为电能表新的发展趋势和需求热点。仅上海市自2001年起,五年内需要600万台复费率电能表。

国外电能表正在向大电流、大动态的需求方向发展。美国模拟器件公司开发出一种体积小巧、动态范围可达10001的新型电能测量集成电路ADE7758,该IC内嵌了高精度的模数转换器和固定模式的数字处理信号处理器(DSP),具有数字积分、数字滤波和具有众多实用电能监测、计量功能,正成为新一代高性能全数字电能表的理想芯片。

截止到200210月,AD775X系列全数字电能测量处理芯片在全世界的销量已超过5000万片。ADE7755是具单相电能测量IC芯片,是美国ADI公司20038月推出的专用电能测量IC新产品。

ADE775X系列电能测量专用集成电路芯片的推出,不仅简化了 电力测量新应用模块的设计难度,可做到全电子或真正固体化、静止化,以有利于提高性能,降低成本;还可以利用现有的电话线、专线、高频无线电调制解调器、光缆、低压配电线载波等技术手段完成自动抄读表、分时电价、实时电价、多功能计量、预付费等扩充应用功能。使电能计量具有高精度、高可靠性、免维护和双向通讯功能,适应电力市场化下的电力公司提供新的增值服务。

ADE7755是美国AD公司生产的一种高准确度电能测量集成电路,其技术指标超过IEC1036规定的准确度要求。AD7755+5V单电源供电,低功耗的CMOS芯片;具有量程宽(负载能力高达4-6Ib)、精度高(1%500%Ib范围内,误差小于0.3%),内部具有掉电、上电自动复位电路等优点。当发生短路、开路、旁路的情况时,除了具有输出指示外,还能以原精度继续计量。只有在ADC和基准源中使用模拟电路,所有的其他信号处理(相乘和滤波)都使用了数字电路,有效的去除尖脉冲等干扰信号,使得ADE7755在恶劣的环境下仍能保持极高的准确度和长期稳定性。引脚FlF2以较低频率形式输出有功功率平均值,能直接驱动机电式计度器或与微处理器接口。引脚CF以较高频率形式输出有功功率瞬时值,用于校验或与微处理器接口。逻辑输出REVP用来指示负功率或错线。电流通道中的可编程增益放大器(PGA)使仪表能使用小阻值的分流电阻。芯片内部包含一个对电源引脚的监控电路,在上升到4V之前,ADE7755一直保持在复位状态,当下降到4V以下,ADE7755被复位,此时FlF2CF都没有输出。无论电流通道的HPF是接通的还是断开的,ADE7755内部相位匹配电路使得电压和电流通道的相位始终是匹配的。另外,其内部的空载阐值特性保证了ADE7755在空载时没有潜动。其内部结构如图3.8所示,各引脚功能如表3-1

3.8 AD7755内部结构图

3-1 AD7755引脚功能表

3.2.2 ADE7755的有功功率测量原理

2.1节可知负载两端的瞬时功率为:

从上式可以看出,瞬时功率包含直流分量和交流分量两部分。在绝大多数场合特别是民用仪表关心的是负载上消耗的有功功率,有功功率P定义为瞬时功率在一个周期内的平均值,即

为了得到有功功率分量(即直流分量),只要对瞬时功率信号进行低通滤波即可。图3.9给出了瞬时功率信号如何通过对瞬时功率信号进行低通滤波来获得有功功率,这个设计方案也能正确计算非正弦电流和电压波形在不同功率因数情况下的有功功率。所有信号处理都是由数字电路完成的。因此具有良好的温度和时间稳定性。

3.9 信号处理框图

ADE7755的低频输出是通过对上述有功功率信号的累计产生的,即在两个输出脉冲之间通过长时间的累加,因此输出频率正比于平均有功功率。由于乘积后的LPF不是理想的滤波器,因此LPF输出的瞬时有功功率信号还包含了相当大的瞬时功率信息,即。这个信号通过数字一频率转换器,随时间被积分(累加),进而产生输出频率。如果CF以较高的频率输出,是因为在对瞬时功率进行累加完成频率转换过程中,采用较短的累加时间,这就意味着减弱了对成分的平均作用,于是部分瞬时功率信号成分通过了频率转换器。当CF用于带微处理器的电能计量场合,CF应该进行平均后再计算功率。图3.10ADE7755与电能测量微控制器的接口。

3.10 ADE7755MCU的接口

上图所示,频率输出CF端连接到MCU的端口,MCU在内部定时器设定的积分时间内对CF输出的脉冲计数,平均功率正比于平均频率,由下式确定:

在一个积分周期内消耗的电能为:

电能=平均功率积分时间=脉冲个数/积分时间积分时间=脉冲个数

用作仪表校准时,积分时间应在1020秒,以便能累计足够数量的脉冲,求得正确的平均频率。在正常运行时,积分时间可以减小到12秒,这取决于显示器更新速率的需要。


第四章 硬件设计

限电控制器的硬件包括AT89C51单片机、ADE7755、分压分流电路、电源电路、LED显示电路等。如图4.1所示。

4.1 硬件系统图

以下介绍限电控制器的电路设计

4.1单片机最小系统

单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对51系列单片机来说,最小系统包括:单片机、晶振电路、复位电路。

前面已经提到单片机选用AT89C51。单片机及外围电路如图4.2

4.2 单片机及外围电路

对于AT89C51单片机,其最小系统只需要电源、上电复位电路、时钟电路就能工作。由于我们的程序存储器(ROM)采用内部Flash存储单元,所以单片机上的EA接高。

时钟电路的晶振采用12M的晶振,它由晶振、C8C9和单片机内部的OSC电路组成,为单片机提供12MHz的时钟信号源。

微处理器系统在开始工作时必须对微处理器内部的寄存器等进行复位,使各个寄存器的值设为预定状态才能顺利开始工作。复位电路的好坏决定着单片机能否正常工作。复位电路基本功能是在系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经过一定的延时才撤销复位信号,主要是防止由于电源开关或插头分合过程中引起的抖动。复位电路可以使用专用复位芯片,也可以用电阻电容搭建。本文从可靠性和成本考虑最终选用电阻电容来搭建复位电路。对于51内核的单片机,RST是复位信号输入端,高电平有效。当此输入端保持两个机器周期(24个时钟振荡周期)的高电平时,可以完成复位操作。RC5为上电复位电路。当单片机加电时由于RC充电的效果,使得复位脚保持一会高电平使单片机内部寄存器彻底复位。

4.2 供电电路图设计

本设计采用对市电220V电压进行变压、整流、滤波、稳压的方法获得系统所需的电源。系统需要两种电压信号,一种是+12V,一种是+5V。其中+12V电压为继电器控制电路供电。+5v电源分为两路,一路为模拟电源,为ADE7755供电,另一路数字电源为微控制器电路供电。

+5V电源电路中,经变压器变压后的电压范围为8-30V。在这里选用12V。即使市电电压由220V降低到146V,仍能正常工作。

电源电路由变压器、整流桥、三端稳压集成电路7805,以及滤波环节组成,其原理图参见图4.3所示。

4.3 电源电路

4.3 继电器接口电路

继电器在本设计中的作用是当剩余电量小于断电限度值时,继电器断开供电卡回路,停止供电。本设计采用上海贝斯特公司的BST-902型磁保持继电器。BST-902型大功率双稳态磁保持继电器的触点的开、合状态平时由永久磁钢速产生的磁力所保持,当继电器的触点需要开与合的状态转换时(即接通或切断负载),只需用正()直流脉冲电压激励线圈,则继电器在瞬间就完成了开与合的状态转换。之后,线圈不需继续通电,仅依靠永久磁钢的磁力就能维持继电器的状态不变。磁保持继电器具有如下特点:

(1)线圈功耗、温升低,不足同功率的普通电磁继电器的10%

(2)触点压力大,接通电阻小,电接触稳定性好;

(3)结构紧凑、合理、体积小、耐振动、冲击、动作可靠;

(4)触点切断功率大,能长期大负载工作,但转换频率不宜太高。

继电器驱动电路采用开关三极管8050,如图4.4所示。

4.4 继电器驱动电路

4.4 键盘电路设计

键盘是标准的输入设备,实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描,如8279, CH451, LMC9768等,还有就是用软件实现键盘扫描。使用现成的芯片可以节省CPU的开销,但增加了成本,而用软件实现具有较强的灵活性,也只需要很少的CPU开销,可以节省开发成本。本文便使用软件实现键盘的扫描。

常见的键盘可分为独立按键式键盘和行列扫描式键盘。独立按键式键盘应用在需要少量按键的情况,按键和单片机的I/O口线直接连接。而行列扫描式键盘用在按键需求较多的情形下。考虑到血压计面向大多数人群,需操作简单,所以采用独立按键式键盘。

独立式键盘电路如图4.5所示。其中P10P11P12P1351单片机的IO

4.5 按键电路图

理论上当按键按下或弹起时,可以相应的产生低电平或高电平,但实际并非如此。键盘按键一般都采用触点式按键开关。当按键被按下或释放时,按键触点的弹性会产生抖动现象。即当按键按下时,触点不会迅速可靠地接通,当按键释放时,触点也不会立即断开,而是要经过一段时间的抖动刁才能稳定下来,按键材料不同,抖动时间也各不相同。

按键抖动可能导致单片机将一次按键操作识别为多次操作,一般采用硬件电路或软件程序来消除。

4.6 按键抖动示意图

一次完整的按键过程,如图4.6所示,包含以下几个阶段:

1.等待阶段:此时按键尚未按下,处于空闲阶段;

2.闭合抖动阶段:此时键刚刚按下,但信号处于抖动状态,系统在检测时应消抖延时,约5ms20ms

3.有效闭合阶段:此时抖动己经结束,一个有效按键动作己经产生,系统应该在此时执行按键功能,或将按键编码记录下来,待键弹起时再执行其功能;

4.释放抖动阶段:许多时候编程人员并不在此时消抖延时,但最好也执行一次消抖延时,以防止误操作;

5.有效释放阶段:若设计要求在按键抬起时才执行功能,则应当在此时进行按键功能的处理。

按键击键的类型有多种划分方式:

按击键时间分:短击和长击;

按击键次数分:单击和连击;

按特殊功能分:双击或组合键等。

功能分析如下:

1.短击,用户快速按下单个按键,然后立即释放;

2.长击,用户长时间按下一个按键。如某些重要的功能键,复位,为防止用户误操作;

3.连击,实现连续操作效果,如连续加1或减1

4.复合按键,用户同时按下两个或多个按键,实现某些特殊功能;

5.无键按下,当用户在一定时间内未按任何按键,执行某些特殊的操作,如自动进入待机态或节能态。

4.5 显示电路设计

显示电路采用7LED数码管显示,47LED数码管采用扫描形式进行,其阴极并联起来接到单片机P0口上,阳极分别用P24根线通过4PNP型三极管控制。如图4.7所示。

4.7 显示电路

4.6 电量采集电路硬件设计

电量采集电路如图4.8所示。

4.8 电量采集电路

AD7755外围元器件的选择,为了使通道VI(电流通道)的动态范围最大,选用阻值为0.01欧的分流器。选择分流器时,有几个重要问题应该考虑。第一,要使分流器的功耗最低。第二,如果功耗过高会给芯片散热带来困难。虽然分流器是采用低温度系数的锰铜合金材料制成的,但是在高温下对重负载仍会产生明显的误差,所以不宜选用阻值太大的分流器。第三,应该考虑电能表对相电压短路造成损害具有的防护能力。由于分流器的阻值非常小,所以外部短路对分流器的影响也非常小。因此分流器总是应该做得尽量小,但这样必然抵消通道的信号范围。因此本设计权衡利弊将分流器的阻值选为0.01欧。


第五章 软件设计

奇偶脉冲发生器的软件采用C语言设计。

5.1 Keil C51简介

1.对于8051单片机,现有四种语言支持,即汇编、FIMCBASIC

C是一种源于编写UNIX操作系统的语言,它是一种结构化语言,可产生紧凑代码。C结构是以括号()而不是字和特殊符号的语言。C可以进行许多机器级函数控制而不用汇编语言。与汇编相比,有如下优点:

1)对单片机的指令系统不要求了解,仅要求对8051的存贮器结构有初步了解

2)寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;

3)程序有规范的结构,可分为不同的函数,这种方式可使程序结构化;

4)具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;

5)关键字及运算函数可用近似人的思维过程方式使用;

6)编程及程序调试时间显著缩短,从而提高效率;

7)提供的库包含许多标准子程序,具有较强的数据处理能力;

8)已编好程序可容易地植入新程序,因为它具有方便的模块化编程技术.

8051系列单片机作为工业标准地位,从1985年开始就有8051单片机的C语言编译器。简称C51

C51程序结构与一般C语言没有什么差别.一个C51程序大体上是一个函数定义的集合,在这个集合中有仅有一个名为main的函数(主函数).主函数是程序的入口,主函数中的所有语句执行完毕,则程序执行结束。C5l提供的数据结构是以数据类型的形式出现的,C51的数据类型如下所示:

我们最常用的Keil C5l编译器具体支持的数据类型有:位型(bit)、无符号字符(unsigned char)、有符号字符(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长型(unsigned long)、有符号长型(signed long)、浮点(float)和指针类型等。

2.C51数据的存贮类型与805l存贮器结构:

KeilC51编译器完全支持8051单片机的硬件结构,可完全访问8051硬件系统的所有部分.该编译器通过将变量、常量定义成不同的存贮类型(dataNataidatapdataxdatacode)的方法,将它们定位在不同的存贮区中。

存贮类型与8051单片机实际存贮空间的对应关系如表5-1所示。

5-1 存贮类型与存贮空间的对应关系

当使用存贮类型dataNata定义常量和变量时,C5l编译器会将它们定位在片内数据存贮区中(片内RAM),这个存贮区根据8051单片机CPU的型号不同,其长度分别为64128256512字节.以今天的标准来看,这个存贮区不很大,但它能快速收发各种数据.外部数据存贮器从物理上讲属于单片机的一个组成部分,但用这种存贮器存放数据,在使用前必须将它们移到片内数据存贮区中.片内数据存贮区是存放临时性传递变量或使用频率较高的变量的理想场所.

为了能直接访问这些特殊功能寄存器SFRKeil C51提供了一种自主形式的定义方法,这种定义方法与标准C语言不兼容,只适用于对8051系列单片机进行C编程。

这种定义的方法是引入关键字“sfr”,语法如下:

sfr sfr_name =’ int constant ‘

例:

sfr SCON0x98 *串口控制寄存器地址98H *

sfr TMOD0x89 *定时/计数器模式控制寄存器地址89H *

在典型的8051应用问题中,经常需要单独访问SFR中的位,C51的扩充功能使之成为可能。特殊位(sbit)的定义,像SFR一样不与标推C兼容,使用关键字“sbit”可以访问。

位寻址对象。例:

sbit CYPSW^7 *定义CY位为PSW7地址为0xD7*

sbit beepP3.^6 *定义位变量beepI/O P3.6 *

5.2 各个模块程序介绍

5.2.1 键盘子程序设计

本设计硬件电路的输入采用4个按键,具体程序为:

Unsigned char getkey(void)

{

uchar keytmp;

P1=0xff;

keytmp=~(P1) & 0xff;

if(keytmp==0)

{km=0; kp=0;} //no key is ON

else //any key is ON

{

if(km==0)

km=1; // 置按键抖动标志

else //按键已去抖

{if(kp==0) //按键没有处理,下面是按键处理代码

// 置按键处理标志

{kp=1;

return(keytmp);

}

}

}

return 0;

}

5.2.2 显示子程序

code uchar dis[10]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};//-------LED码表------0----1----2----3----4-----5----6---7----8----9----

uchar disbuff[4]; //显示缓冲区

/******************************************************

显示驱动

******************************************************/

void display_num(float diasplay_buffer)

{point=0;

if( diasplay_buffer<=1 )

{x=diasplay_buffer*1000;

point=1;

}

else

{while(diasplay_buffer>=1.0)

{diasplay_buffer/=10;

point++;

}

x=10000*diasplay_buffer+0.5;

}

}

……

//***********************显示扫描********************

disbuff[0]=dis[x/1000]; //显示千位

disbuff[1]=dis[((x%1000)/100)]; //显示百位

disbuff[2]=dis[(((x%1000)%100)/10)]; //显示十位

disbuff[3]=dis[(((x%1000)%100)%10)]; //显示个位

if(point!=4)disbuff[point-1]&=0xdf; //显示小数点

P2=0xff;//关掉所有显示

count_flash++;

if(flash<4) //flash=4,LED 不闪,非调整状态

{if(count_flash<20)

off=1;

else off=0;

}

switch(count_up)

{case 1: P0=disbuff[0];P23=0;

if(flash==0)

P23|=off; //打开或关闭数码管显示

break;

case 2: P0=disbuff[1];P22=0;

if(flash==1)

P22|=off;

//打开或关闭数码管显示

break;

case 3: P0=disbuff[2];P21=0;

if(flash==2)

P21|=off; //打开或关闭数码管显示

break;

case 4: P0=disbuff[3];

count_up=0;

P20=0;

if(flash==3)

P20|=off; //打开或关闭数码管显示

break;

}

if(count_flash==40) count_flash=0;

/***********************显示扫描 OVER********************/

5.2.3 定时器1子程序

采用定时器1的中断,进行按键扫描,数码管扫描

T1定时器的初始化过程为:

IE=0; IP=0; //disable all interrupt and lower priority

TMOD=0x11; //timer 0 is set to mode2,auto_reloading,timer1,mode 1

TH1=0xe5; TL1=0xa0; //timer1 parameters for 10ms

TR1=1; //timer0 interrupt most important

ET1=1;

EA=1; //enable interrupt function

中断服务程序

void Timer1ISR(void) interrupt 3 using 1

{

unsigned char keytmp,point1;

TH1=0xef; TL1=0x10; //计数器重装 10ms中断一次

count_up++;

数码管扫描显示

按键扫描处理

}

5.2.4 频率子程序

ADE7755是将功率转换为频率,单片机要进行测量频率。频率测量的思路是将ADE7755输出的频率信号通过光电耦合器接到单片机的外部中断int0,单片机的外部中断int0设为下降沿中断。当一个脉冲的下降沿到来单片机int0中断,内部定时器开始对内部1MHz的时钟进行计数,当下一个脉冲的下降沿到来时单片机int0中断,停止计数,计算两个下降沿之间的脉冲个数,即ADE7755输出的频率信号的周期。再计算出ADE7755输出的频率信号的频率及对应的功率。

硬件初始化程序

void int0_init(void)

{TH0=0;

TL0=0;

EA=1;

TMOD=0x11;

//IT0=1;

IT0=1;

IE0=0;

ET0=1;

}

定时器0中断

void time0(void) interrupt 1 using 2

{

L_time0++;

}

外部中断0

void int0(void) interrupt 0 using 3

{

if(!flag)

{

p3_2=1;

TR0=0;

flag=1;

}

}

频率、功率计算

float fre_start(void)

{

uint x;

ulong new_data;

EX0=1;

TR0=1;

IE0=0;

if(L_time0>100) t=0;

if(flag)

{

EX0=1;

x=256*TH0+TL0;

new_data=L_time0*65536+x;

t=10*1000000/(float)new_data;// 功率=ADE7755输出频率x10

TH0=0; TL0=0;

L_time0=0;

TR0=1; IE0=0; EX0=1; flag=0;

}

return(t);

}


第六章 全文总结与展望

高校学生宿舍限电自动控制器是为了适应大学校园的用电安全管理而构建的特殊的安全防范系统,通过对学生用电需求的分析,设计出了一套适合高校学生宿舍的用电控制系统。

6.1 结论

本系统设计的主要目的是对校园安防系统实施的一个探索,通过对学生公寓智能化的改造(下位机的设计),配合以后扩展的其它设计模块完成整个校园内部远程自动抄表系统、远程安防控制以及数据库管理系统等构成完整的综合安防系统。同时,在设计过程中,考虑到学生公寓的切实需要,在硬件及软件设计方面,尽量采用具有针对性的设计,节约成本,使得设计出的模型能够在应用方面更加实惠

在查阅大量资料和相关实验的基础上,经过三个多月来对本课题的不懈努力,基本上达到了预期的要求。通过对系统的硬件和软件的设计和调试,可得到如下结论:

1)学生公寓限电自动控制器的设计和报警器的架构设计基本正确、可行,其主要功能基本得以实现。该系统监测到宿舍用电超过限定功率即自动停电且发出报警声,并能通过数码管显示当前电流,电压,功率值。系统能有效地限制了学生使用热得快、电炉子、白炽灯等易引起火灾的用电器。

2)本系统结构简单、可靠性高、成本低,针对性强,对于高校用电控制系统的建立具有很强的实用价值和广阔的市场发展情景。

6.2 设计完善

由于校园综合安防系统设计的复杂性以及作者知识和研究条件的局限性,本

文只针对安防,节能等功能的下位机进行了设计和研究,尚有以下问题需要做进

一步的深入研究:

1)利用互联网技术对限电控制系统的功能加以改善。互联网技术的发展为建设学生宿舍限电控制系统提供了有利的平台,可以通过互联网更加快捷、高效和准确的进行信息的传输、处理和分析。对于网络技术在综合安防系统中的应用还需要加以深入讨论,同时也可以结合电话线的传输,实现双网传输,保证传输的畅通。

2)对上位机的控制软件、人机界面、以及数据库建立和管理系统的深入具体研究,最终成为一个完整的学生宿舍限电控制系统。

3)由于经验等方面的限制,系统在硬件和软件方面还存在一些缺陷,需要进一步加以改进和完善。

6.3 展望

社会在进步,科学技术也在日新月异的发展。本课题是基于学生宿舍限电自动控制系统的实验性研究,在学生公寓智能化改造方面开发的一个尝试,离最后的实用化、产品化还有相当的距离。随着微电子技术、通信技术、自动控制技术和传感器技术发展,以及智能化建筑应用的不断完善,相信建立一个高校学生宿舍的限制自动控制系统,还将会得到更大的发展空间。


致谢

通过本次毕业设计,我在徐晓老师的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,并对当前电子领域的研究状况和发展方向有了一定的了解,单片机领域这对我今后进一步学习计算机方面的知识有极大的帮助。另外,此次毕业设计还获得了同学的大力支持。在此,我忠心感徐晓老师以及我的同学的指导和帮助。在未来的工作和学习中,我将以更好的成绩来回报各位领导和老师。


参考文献

[1]刘福启、韩宝华.电子制作2005年合定本[M].北京:电子制作杂志社,2005

[2]阉石.数字电子技术基础[M].北京:高等教育出版社,2004

[3]谢嘉奎.电子线路线性部分(第四版)[M].北京:高等教育出版社,2004

[4]刘乐善、刘学清.微型计算机接口技术及应用[M].武汉:华中科技大学出版社,2005

[5]薛永毅.新型电源电路应用实例[M].北京:电子工业出版社,2001

[6]高峰.单片机微型计算机原理与接口技术[M].北京:科学出版社,2003

[7]Jean J.Labrosse、邵贝贝.嵌入式实时操作系统uC/OS-[M].北京:北京航空航天大学出版社,2003

[8]何立民.单片机高级教程-应用与设计[M].北京:北京航空航天大学出版社,2000

[9]胡汉才.单片机原理及接口技术[M].北京:清华大学出版社,1996

[10]沙占友、孟志永、王彦.单片机外围电路设计[M].北京:电子工业出版社, 2006

[11]刘高.单片机实用技术[M].北京:清华大学出版社,2004

[12]白雪峰、张宇.应用单片机实现交流电量参数的测量[N].东北林业大学学报,2005

[13]杨文龙编.单片机原理及应用[M].西安:西安电子科技大学出版社,2000

[14]马忠梅等.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,1997

[15]冯建华.单片机应用系统设计与产品开发[M].北京:人民邮电出版社,2004


附录一:电路图.PCB

附录二:各模块流程图

1主程序流程图

2定时器0中断流程图

3外部中断0流程图

4定时器1中断流程图

附录三:参考程序

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

sbit P17 = P1^7;

sbit P20=P2^0;

sbit P21=P2^1;

sbit P22=P2^2;

sbit P23=P2^3;

sbit p3_2=P3^2;

sbit P37=P3^7;

sbit P36=P3^6;

bit km=0; //按键已去抖动标志

bit kp=0; //按键已处理标志

bit key4=0;

bit off;

uchar flash=4; //LED闪动位 4为不闪动

uchar count_up=0; //扫描计数

uchar count_flash=0; //闪动计数

uint limit_power=100; //限制电量

float buff; //当前电量

int x;uchar point=0;

uchar L_time0;

bit flag;

float t,ss[10];

float now_powe;

code uchar dis[10]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};

//-------LED码表------0----1----2----3----4-----5----6---7----8----9----

uchar disbuff[4]; //显示缓冲区

/******************************************************

显示驱动

******************************************************/

void display_num(float diasplay_buffer)

{ point=0;

if( diasplay_buffer<=1 )

{

x=diasplay_buffer*1000;

point=1;

}

else

{

while(diasplay_buffer>=1.0)

{

diasplay_buffer/=10;

point++;

}

x=10000*diasplay_buffer+0.5;

}

}

/******************************************************

定时器1中断,用于按键扫描,数码管扫描

******************************************************/

void Timer1ISR(void) interrupt 3 using 1

{

unsigned char keytmp,point1;

TH1=0xef; TL1=0x10; // 30ms中断一次

point1=point;

count_up++;

//***********************显示扫描********************

disbuff[0]=dis[x/1000]; //显示千位

disbuff[1]=dis[((x%1000)/100)]; //显示百位

disbuff[2]=dis[(((x%1000)%100)/10)]; //显示十位

disbuff[3]=dis[(((x%1000)%100)%10)]; //显示个位

if(point!=4)disbuff[point-1]&=0xdf; //显示小数点

P2=0xff;//关掉所有显示

count_flash++;

if(flash<4) //flash=4,LED 不闪,非调整状态

{if(count_flash<20)

off=1;

else off=0;

}

switch(count_up)

{case 1: P0=disbuff[0];P23=0;

if(flash==0)

P23|=off; //打开或关闭数码管显示

break;

case 2: P0=disbuff[1];P22=0;

if(flash==1)

P22|=off;

//打开或关闭数码管显示

break;

case 3: P0=disbuff[2];P21=0;

if(flash==2)

P21|=off; //打开或关闭数码管显示

break;

case 4: P0=disbuff[3];

count_up=0;

P20=0;

if(flash==3)

P20|=off; //打开或关闭数码管显示

break;

}

if(count_flash==40) count_flash=0;

/***********************显示扫描 OVER********************/

/***********************键盘扫描*************************/

if(count_up==0)

{P1=0xff;

keytmp=~(P1) & 0x0f;

if(keytmp==0)

{ km=0; kp=0; } //no key is ON

else //any key is ON

{ if(km==0)

km=1; // 置按键抖动标志

else //按键已去抖

{ if(kp==0) //按键没有处理,下面是按键处理代码

// 置按键处理标志

{ kp=1;

if(keytmp==1&&key4) //第一个按键按下

{

if(flash==0) flash=5;

flash--;

if(flash==4)

{

switch(point1)

{

case 1:buff=(float)x/1000;

break;

case 2:buff=(float)x/100;

break;

case 3:buff=(float)x/10;

break;

case 4:buff=x;

break;

}

display_num(buff);

}

}

if(keytmp==2) //2个按键按下

{

switch(flash)

{

case 0:x+=1000;

break;

case 1:x+=100;

break;

case 2:x+=10;

break;

case 3:x+=1;

break;

case 4:

break;

}

}

if(keytmp==4) //3个按键按下

{

switch(flash)

{

case 0:x-=1000;

break;

case 1:x-=100;

break;

case 2:x-=10;

break;

case 3:x--;

break;

case 4:

break;

}

}

if(keytmp==8) //4个按键按下

{

key4=!key4; //key4==0,显示当前电量;==1显示设定数值

if(key4)

display_num(buff);

else flash=4;

}

}

}

}

}

}

//-----------------频率测量----------------------

void int0_init(void)

{TH0=0;

TL0=0;

EA=1;

TMOD=0x11;

//IT0=1;

IT0=1;

IE0=0;

ET0=1;

}

void time0(void) interrupt 1 using 2

{L_time0++;

}

void int0(void) interrupt 0 using 3

{ if(!flag)

{

p3_2=1;

TR0=0;

flag=1;}

}

float fre_start(void)

{uint x;

ulong new_data;

//uchar y[2];

EX0=1;

TR0=1;

IE0=0;

if(L_time0>100) t=0;

if(flag)

{

EX0=1;

x=256*TH0+TL0;

new_data=L_time0*65536+x;

t=10*10000000/(float)new_data;// 功率=ADE7755输出频率x10

TH0=0;

TL0=0;

L_time0=0;

TR0=1;

IE0=0;

EX0=1;

flag=0;

}

return(t);

}

//-----------------频率测量 over----------------------

//-----------------延时子程序----------------------

void Delayms(unsigned int ms)

//功能:延时 T=0.994*ms ms

{

unsigned int i;

for(;ms>0;ms--)

for(i=0;i<122;i++);

}

//-----------------延时 over----------------------

//-----------------系统初始化---------------------

void intsystem(void)

{

IE=0; IP=0; //disable all interrupt and lower priority

TMOD=0x11; //timer 0 is set to mode 2,auto_reloading,timer1,mode 1

TH1=0xe5; TL1=0xa0; //timer1 parameters for 30ms

TR1=1; //timer0 interrupt most important

ET1=1;

EA=1; //enable interrupt function

}

void main(void)

{

unsigned int i,j;

intsystem();

int0_init();

buff=6;

while(1)

{

for(i=0;i<10;i++)

{ss[i]=fre_start();

now_powe=(ss[0]+ss[1]+ss[2]+ss[3]+ss[4]+ss[5]+ss[6]+ss[7]+ss[8]+ss[9])/10;

}

/*

0.13x0.13==50W;

0.0587x0.0587==10W;

1Hz flash ==10W功率

P=2902x

*/

j++;

if(j==30)

{if(now_powe>buff)

{

P37=0;

P36=0;

}

else

{

P37=1;

P36=1;

}

if(!key4)

{

display_num(now_powe);

}

j=0;

}

}

}

本文来源:https://www.2haoxitong.net/k/doc/42ba7246580102020740be1e650e52ea5518ce8f.html

《大学生宿舍限电自动控制器.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式