基于51单片机智能电表的设计与制作_第1页
基于51单片机智能电表的设计与制作_第2页
基于51单片机智能电表的设计与制作_第3页
基于51单片机智能电表的设计与制作_第4页
基于51单片机智能电表的设计与制作_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

湖南商务职业技术学院毕业设计

目录

1产品功能分析.........................................................................................................1

2设计方案遴选.........................................................................................................1

2.1单片机的选择..............................................................................................1

2.2显示电路的选择............................................................................................1

2.3系统框图设计..............................................................................................2

3产品硬件设计.........................................................................................................4

3.1STC89C52RC单片机核心电路设计.............................................................4

3.2LCD1602液晶显示功能的实现...................................................................4

4产品软件设计.........................................................................................................5

4.1按键扫描程序流程图设计..........................................................................5

4.2主程序流程图设计......................................................................................5

5产品设计技术标准.................................................................................................7

附录1元器件清单...................................................................................................8

附录2电路原理图...................................................................................................9

附录3PCB设计图..................................................................................................10

附录4产品实物图.................................................................................................11

附录5程序代码.....................................................................................................12

参考资料.....................................................................................................................23

湖南商务职业技术学院毕业设计

基于51单片机智能电表的设计与制作

1产品功能分析

智能电表主要集中在通过集成电路测量力量并连续处理数据的单个计算机

上,实时监测数据,直观的显示电压,电流。电力的使用是透明的,可以实时

读取,可以提高意识,实现低碳循环。

2设计方案遴选

2.1单片机的选择

第一种方案是采用STM32F103RCT6来控制,STM32F103RCT6是增强型的32

位处理器,有256K字节的FLASH存储器,48K字节的SRAM,有比较多的I/O口,

芯片上带有模数转换器,定时器较多,它的连通性比较强。

第二种方案是采用STC89C52来控制,51系列单片机起步较早,发展到现在

技术相对成熟,有许许多多成功的应用例子,所以STC89C52适合很多地方使用,

兼容很多的单片机,能够媲美很多的单片机设计。STC89C52与市场上很多的单

片机比较,这一款单片机具备很多的优势,比如价格便宜,开发较为方便等等。

2.2显示电路的选择

方案1:LCD1602液晶屏

LCD1602的屏幕由几个矩阵字符位组成,每个字符位可以显示一个字符。液

晶位之间有一个点距离,同一行之间有一个点距离来分隔两个相邻的字符。该

设计使用户更容易查看数据。这个模块的特点是它可以显示各种类型。该模块

允许显示三种类型的信息,如数字、字符和符号。

方案2:采用电子管显示

LED数码管是由几个LED封装在一起。有静态显示和动态显示两种驱动模式。

数码管价格便宜,易于编程,但只能显示单个数字和字母,系统采用液晶LCD1602

显示数据。

2

湖南商务职业技术学院毕业设计

2.3系统框图设计

系统框图如图2-1所示。

电能计量模块电源电路

DS18B20温度采集

单片机处理单LCD1602显示

继电器控制电路

蜂鸣器报警

按键电路设置电路

图2-1系统框图

3

湖南商务职业技术学院毕业设计

3产品硬件设计

3.1STC89C52RC单片机核心电路设计

STC89C52RCmcu是采用宏技术的新一代高速/低耗电/超强抗干扰mcu。升级

的mcu8051,可以选择6个时钟周期/机器和12个时钟周期/机器。命令代码和

以前的8051是完全可以兼容的。工作电压:5.5v~3.3v(mcu5v)/3.8v~2

.0v(mcu3v)。工作频率范围为0~40mhz,相当于一般8051的0~80mhz,

实际工作频率为48mhz,它的应用空间为8kb。它有EEPROM功能,它还有看门

狗功能。3个计时器/计数器共计16位。通用异步串行端口(UART),计时器软件

也可以实现多种UART。工作温度范围:工业级:-40~+85℃/商业级:0~75℃。

3.2LCD1602液晶显示功能的实现

智能计数器显示程序只需要计算所需的位数,即可确定需要照亮的相应段

和位。

LCD1602有16个引脚,其中RS、RW的值控制单片机对它的读写:

读busy(DB7),以及读取位址计数器

1

0(DB0—DB6)的值

10写入数据寄存器(显示各字符等)

11从数据寄存器读取数据

LCD1602液晶显示器在执行程序指令之前必须执行模块指示位的占用信号,

并且只有当其占用指示位处于低功率时才能执行指令。

4

湖南商务职业技术学院毕业设计

4产品软件设计

4.1按键扫描程序流程图设计

智能电表中的键盘组是用电脑芯片编程进行扫描的。一般来说,密钥验证

程序是不断重复的,即每个主要程序周期都伴随着密钥验证。在扫描程序中,

如果按下一个键,程序将扫描延迟一段时间后,如果仍按下该键,则认为该键

已按下。如果有按键确定被按下时,但不知道是哪个,然后程序就按照行列扫

描的方式来确定是哪个键被按下,在根据相应的程序,并执行对应的功能。而

它的按键的扫描程序流程图如图4-1所示。

开始

延时程序

N

检测有键按下?

Y

延时10MS

N

检测有键按下?

YN

键按是否释放?

Y

执行相应的

程序

图4-1按键扫描程序流程图

4.2主程序流程图设计

主程序流程图如图4-2所示。

5

湖南商务职业技术学院毕业设计

开始

电能模块初始化

Lcd1602初始化

DS18B20初始化

LCD1602显示当前信息

是否按下按键

按键设置

否否

上限下限

继电器断开

是是

蜂鸣器报警

图4-2主程序流程图

返回

6

湖南商务职业技术学院毕业设计

5产品设计技术标准

[1]J-STD-001E电气与电子组件的焊接要求

[2]IPC-A-610D(中文版),IPC-A-610E电子组件的可接受性要求

[3]IPC-7711/21电子组件和电路板的返工&返修

[4]GB/T11457-2006信息技术软件工程术语;

[5]GB/T8566-2007信息技术软件生存周期过程标准;

[6]GB/T8567-2006计算机软件文档编制规范。

7

湖南商务职业技术学院毕业设计

附录1元器件清单

8

湖南商务职业技术学院毕业设计

附录2电路原理图

9

湖南商务职业技术学院毕业设计

附录3PCB设计图

10

湖南商务职业技术学院毕业设计

附录4产品实物图

11

湖南商务职业技术学院毕业设计

附录5程序代码

#include"common.h"

#include"uart.h"

#include"lcd1602.h"

#include"DS18B20_One.h"

#include"eeprom52.h"

#include"CRC.h"

////按键引脚

sbitKEY1=P1^0;

sbitKEY2=P1^1;

sbitKEY3=P1^2;

sbitKEY4=P1^3;

sbitRelay=P3^6;//继电器

sbitbeep=P2^0;//蜂鸣器

unsignedcharInformation_bits[6]={0xF8,0x04,0x00,0x00,0x00,0x05};//信息位

unsignedshortCRC16_VAL=0;//CRC值

unsignedcharSend_Cmd[8]={0};//发送缓存

unsignedcharReceive[COM_RX1_Lenth];//接收缓存

unsignedintVoltage=0;//电压

unsignedlongCurrent=0;//电流

unsignedlongPower=0;//功率

unsignedintVoltageMax=240;//电压上限

unsignedlongCurrentMax=6000,PowerMax=20000;//电流功率上限

bitrefresh=0;//刷新标志

bitjinji=0;

unsignedcharsetn=0;

ucharcheck=111;//校验

voidsava_data()//存储数据zc

{

SectorErase(0x2000);//清除扇区

//存储电压报警值,16bit

byte_write(0x2001,(VoltageMax>>0)&0xff);

12

湖南商务职业技术学院毕业设计

byte_write(0x2002,(VoltageMax>>8)&0xff);

//存储电流报警值,32bit

byte_write(0x2003,(CurrentMax>>0)&0xff);

byte_write(0x2004,(CurrentMax>>8)&0xff);

byte_write(0x2005,(CurrentMax>>16)&0xff);

byte_write(0x2006,(CurrentMax>>24)&0xff);

//存储功率报警值,32bit

byte_write(0x2007,(PowerMax>>0)&0xff);

byte_write(0x2008,(PowerMax>>8)&0xff);

byte_write(0x2009,(PowerMax>>16)&0xff);

byte_write(0x200A,(PowerMax>>24)&0xff);

byte_write(0x200B,TempMax);

byte_write(0x200C,check);

}

voidread_data()//读取数据

{

check=byte_read(0x200C);

if(check!=111)//检测单片机是不是第一次上电,如果是则先将数据先存储

一遍再读取

{

check=111;

sava_data();//存储

}

VoltageMax=byte_read(0x2002)<<8|byte_read(0x2001);//电压上限

//读取电流上限

CurrentMax=byte_read(0x2006)<<24;

CurrentMax|=byte_read(0x2005)<<16;

CurrentMax|=byte_read(0x2004)<<8;

CurrentMax|=byte_read(0x2003);

//读取功率上限

PowerMax=byte_read(0x200A)<<24;

PowerMax|=byte_read(0x2009)<<16;

PowerMax|=byte_read(0x2008)<<8;

PowerMax|=byte_read(0x2007);

}

voidGet_PZEM_004T_Data()//发送读取字节

{

CRC16_VAL=CRC16(Information_bits,6);//获取CRC

//////信息码

13

湖南商务职业技术学院毕业设计

Send_Cmd[0]=Information_bits[0];

Send_Cmd[1]=Information_bits[1];

Send_Cmd[2]=Information_bits[2];

Send_Cmd[3]=Information_bits[3];

Send_Cmd[4]=Information_bits[4];

Send_Cmd[5]=Information_bits[5];

//////CRC码

Send_Cmd[6]=(CRC16_VAL>>8)&0xFF;//高字节位

Send_Cmd[7]=(CRC16_VAL>>0)&0xFF;//低字节位

uart_send(Send_Cmd,8);//串口发送

}

voidTime0_Init()//定时器0

{

TMOD|=0x01;

TH0=0x4C;//50ms

TL0=0x00;

ET0=1;

TR0=1;

EA=1;

}

voiddisplay()//显示数据

{//显示电压

lcd_write_char(2,0,Voltage%10000/1000+0x30);

lcd_write_char(3,0,Voltage%1000/100+0x30);

lcd_write_char(4,0,Voltage%100/10+0x30);

//显示电流

lcd_write_char(8,0,Current%1000000/100000+0x30);

lcd_write_char(9,0,Current%100000/10000+0x30);

lcd_write_char(10,0,Current%10000/1000+0x30);

lcd_write_char(12,0,Current%1000/100+0x30);

lcd_write_char(13,0,Current%100/10+0x30);

lcd_write_char(14,0,Current%10+0x30);

//显示功率

lcd_write_char(2,1,Power%1000000/100000+0x30);

lcd_write_char(3,1,Power%100000/10000+0x30);

lcd_write_char(4,1,Power%10000/1000+0x30);

lcd_write_char(5,1,Power%1000/100+0x30);

lcd_write_char(6,1,Power%100/10+0x30);

lcd_write_char(8,1,Power%10+0x30);

14

湖南商务职业技术学院毕业设计

}

voiddisplaySetValue()//显示设置值

{

if(setn==1)

{

lcd_write_char(6,1,VoltageMax%1000/100+48);

lcd_write_char(7,1,VoltageMax%100/10+48);

lcd_write_char(8,1,VoltageMax%10+48);

}

if(setn==2)

{

lcd_write_char(4,1,CurrentMax%1000000/100000+0x30);

lcd_write_char(5,1,CurrentMax%100000/10000+0x30);

lcd_write_char(6,1,CurrentMax%10000/1000+0x30);

lcd_write_char(8,1,CurrentMax%1000/100+0x30);

lcd_write_char(9,1,CurrentMax%100/10+0x30);

lcd_write_char(10,1,CurrentMax%10+0x30);

}

if(setn==3)

{

lcd_write_char(4,1,PowerMax%1000000/100000+0x30);

lcd_write_char(5,1,PowerMax%100000/10000+0x30);

lcd_write_char(6,1,PowerMax%10000/1000+0x30);

lcd_write_char(7,1,PowerMax%1000/100+0x30);

lcd_write_char(8,1,PowerMax%100/10+0x30);

lcd_write_char(10,1,PowerMax%10+0x30);

}

if(setn==4)

{

lcd_write_char(7,1,TempMax/10+48);

lcd_write_char(8,1,TempMax%10+48);

}

}

voidbaojing()//报警

{

if((Voltage/10)>=VoltageMax||Current>=CurrentMax||

Power>=PowerMax||temperature>=TempMax||jinji==1)//电压电流功率温度超限,

蜂鸣器报警,关闭继电器模拟断电

{

beep=0;

15

湖南商务职业技术学院毕业设计

Relay=1;

}

else

{

beep=1;

Relay=0;

}

}

voidkeyscan()//按键扫描

{

if(KEY1==0)//设置键按下

{

delay_ms(10);//消抖

if(KEY1==0)

{

setn++;

if(setn>4)//按下次数超过4次。退出设置

{

setn=0;

lcd_write_str(0,0,"U:000VI000.000A");

lcd_write_str(0,1,"P:00000.0WT:00C");

}

if(setn==1)//设置电压界面

{

lcd_write_str(0,0,"settheVoltage");

lcd_write_str(0,1,"000V");

displaySetValue();

}

if(setn==2)//设置电流界面

{

lcd_write_str(0,0,"settheCurrent");

lcd_write_str(0,1,"000.000A");

displaySetValue();

}

if(setn==3)//设置功率界面

{

lcd_write_str(0,0,"setthePower");

lcd_write_str(0,1,"00000.0W");

displaySetValue();

16

湖南商务职业技术学院毕业设计

}

if(setn==4)//设置温度界面

{

lcd_write_str(0,0,"settheTemp");

lcd_write_str(0,1,"00C");

displaySetValue();

}

while(KEY1==0);

}

}

if(KEY2==0)//加键按下

{

delay_ms(10);

if(KEY2==0)

{

while(KEY2==0);

if(setn==1)

{

if(VoltageMax<260)VoltageMax++;//电压

每次加1

displaySetValue();//显示

}

if(setn==2)

{

if(CurrentMax<

999999)CurrentMax+=1000;//电压每次加1000,相当于加1A

displaySetValue();//显示

}

if(setn==3)

{

if(PowerMax<230000)PowerMax+=100;//功

率每次加100,相当于加10W

displaySetValue();//显示

}

if(setn==4)

{

if(TempMax<99)TempMax++;//温度每次

加1

17

湖南商务职业技术学院毕业设计

displaySetValue();//显示

}

sava_data();//保存数据

delay_ms(50);

}

}

if(KEY3==0)//减键按下

{

delay_ms(10);

if(KEY3==0)

{

while(KEY3==0);

if(setn==1)

{

if(VoltageMax>80)VoltageMax--;//最小到

80V

displaySetValue();

}

if(setn==2)

{

if(CurrentMax>=1000)CurrentMax-=1000;//

最小到0A

displaySetValue();

}

if(setn==3)

{

if(PowerMax>=100)PowerMax-=100;//最小

到0W

displaySetValue();

}

if(setn==4)

{

if(TempMax>0)TempMax--;//最小到0

displaySetValue();

}

sava_data();//保存数据

delay_ms(50);

18

湖南商务职业技术学院毕业设计

}

}

if(KEY4==0)//紧急按键

{

delay_ms(10);

if(KEY4==0)

{

jinji=~jinji;

baojing();

while(KEY4==0);

}

}

}

voidmain()

{

unsignedcharlen;

read_data();

delay_ms(1000);

delay_ms(1000);

lcd_init();//1602初始化

Time0_Init();

uart_init(9600);//串口初始化,波特率9600

lcd_write_str(0,0,"U:000VI000.000A");

lcd_write_str(0,1,"P:00000.0WT:00C");

Relay=0;

while(1)

{

keyscan();//按键扫描

if(refresh==1&&setn==0)//刷新

{

refresh=0;

Get_PZEM_004T_Data();//发送读取字节

len=uart_recv(Receive,100);//有数据返回,接收串口数

if(len>0)

{

if(Receive[1]==0x04)

{

Voltage=Receive[3]<<8|

Receive[4];//计算电压值

///////计算电流值

19

湖南商务职业技术学院毕业设计

Current=Receive[7]<<24;

Current|=Receive[8]<<16;

Current|=Receive[5]<<8;

Current|=Receive[6];

///////计算功率值

Power=Receive[11]<<24;

Power|=Receive[12]<<16;

Power|=Receive[9]<<8;

Power|=Receive[10];

}

}

display();//显示

baojing();

}

}

}

voidtimer1_str()interrupt1

{

staticucharcount=0;

TH0=0x4C;//50ms

TL0=0x00;

if(count++>=20)//1秒时间到

{

count=0;

refresh=1;

}

}#include"common.h"

voiddelay_ms(ucharms)//延时毫秒函数

{

#ifMAIN_Fosc==12000000L

unsignedchari,j;

do

{

i=2;

j=239;

do

{

while(--j);

}

while(--i);

20

温馨提示

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

评论

0/150

提交评论