基于单片机的电能表设计.docx

上传人:b****6 文档编号:15270778 上传时间:2023-07-03 格式:DOCX 页数:30 大小:19.17KB
下载 相关 举报
基于单片机的电能表设计.docx_第1页
第1页 / 共30页
基于单片机的电能表设计.docx_第2页
第2页 / 共30页
基于单片机的电能表设计.docx_第3页
第3页 / 共30页
基于单片机的电能表设计.docx_第4页
第4页 / 共30页
基于单片机的电能表设计.docx_第5页
第5页 / 共30页
基于单片机的电能表设计.docx_第6页
第6页 / 共30页
基于单片机的电能表设计.docx_第7页
第7页 / 共30页
基于单片机的电能表设计.docx_第8页
第8页 / 共30页
基于单片机的电能表设计.docx_第9页
第9页 / 共30页
基于单片机的电能表设计.docx_第10页
第10页 / 共30页
基于单片机的电能表设计.docx_第11页
第11页 / 共30页
基于单片机的电能表设计.docx_第12页
第12页 / 共30页
基于单片机的电能表设计.docx_第13页
第13页 / 共30页
基于单片机的电能表设计.docx_第14页
第14页 / 共30页
基于单片机的电能表设计.docx_第15页
第15页 / 共30页
基于单片机的电能表设计.docx_第16页
第16页 / 共30页
基于单片机的电能表设计.docx_第17页
第17页 / 共30页
基于单片机的电能表设计.docx_第18页
第18页 / 共30页
基于单片机的电能表设计.docx_第19页
第19页 / 共30页
基于单片机的电能表设计.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的电能表设计.docx

《基于单片机的电能表设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电能表设计.docx(30页珍藏版)》请在冰点文库上搜索。

基于单片机的电能表设计.docx

基于单片机的电能表设计

#include"Lcd12864.h"

#include"Ds1302.h"

#include"Eeprom.h"

#include"Rs485.h"

#include"Att7026.h"

sfrT2MOD=0x0c9;//定时器控制字定义

sfrWDT_CONTR=0xE1;//看门狗控制字定义

//Ds1302模块变量

idatauchartime[7]={0};//保存从Ds1302寄存器读出的数据

idatauchartime1[7][2];//保存经过转换的数据,形式为十位、个位

//Ds1302模块变量

uchartao=0;//复费率套数

//****************rs485数据定义

ucharrs485_status=0;

ucharrs485_addr=0;

ucharrs485_data=0xff;

uchari=0;//本模块的循环变量

uchartime2[7]={0};//时间数组

ucharcharge[3]={0};//充值数据存储空间

ucharcontrol=99;//初始化控制字

ucharmima[3]={0};//密码是六个0

ucharaddr[6]={0x99,0x99,0x99,0x99,0x99,0x99};//地址初始化

//*****************rs485数据定义

ucharerr_num=0;

ucharp_key=0;

ucharcrc_key=0;//循环控制

//定时器的参数

uinttimer2_i=0;

uinttimer0_i=0;

ucharmonth;

ucharday;

sbitRelay=P1^2;

//报警位

sbitB_alarm=P1^7;

sbitled=P1^6;

ucharhour;

longpower=0;

longpower1=0;

floatprice=0;

floatyu_e=0;

voidDelay3s(void)//延时3s

{

unsignedchara,b,c;

for(c=167;c>0;c--)

for(b=171;b>0;b--)

for(a=48;a>0;a--);

}

//显示错误信息

Disp_Err(uchardat)//dat为错误代码

{

Clear_Lcd();

Disp_Ch(5,40,E_ch);

Disp_Ch(5,48,R_ch);

Disp_Ch(5,56,R_ch);

Disp_Ch(5,64,FENGEFU_ch);

Disp_Ch(5,72,SHUZI[dat]);

}

//Rs485部分数据转换函数,

ucharBcd_To_Int(ucharc)

{

uchartemp;

temp=c/16;

temp=temp*10+c%16;

returntemp;

}

//从DS1302中的寄存器中读取数值;私有

voidGet_Ds1302()

{

uchari;

ucharaddr=0x81;

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

{

time[i]=Read_Ds1302(addr);

addr=addr+2;

}

}

//获得转换后的ds1302时间信息;私有

voidGet_time1()

{

uchari;

uchartemp;

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

{

temp=time[i];

time1[i][1]=temp%16;

time1[i][0]=(time[i]&0xf0)/16;

}

}

/*******************Lcd和Ds1302之间的联合函数**************/

//参数为0,则为实时数据,否则就是存储数据

voidDisp_Date(uchari)

{

if(i==0)

{

Get_Ds1302();

}

Get_time1();

Disp_Zn(0,0,RI_zh);

Disp_Zn(0,16,QI_zh);

Disp_Ch(0,32,MAOHAO_ch);

//日期信息

Disp_Ch(0,40,SHUZI[2]);

Disp_Ch(0,48,SHUZI[0]);

Disp_Ch(0,56,SHUZI[time1[6][0]]);

Disp_Ch(0,64,SHUZI[time1[6][1]]);

Disp_Ch(0,72,FENGEFU_ch);

Disp_Ch(0,80,SHUZI[time1[4][0]]);

Disp_Ch(0,88,SHUZI[time1[4][1]]);

Disp_Ch(0,96,FENGEFU_ch);

Disp_Ch(0,104,SHUZI[time1[3][0]]);

Disp_Ch(0,112,SHUZI[time1[3][1]]);

}

//参数为0,则为实时数据,否则就是存储数据

voidDisp_Time(i)

{

if(i==0)

{

Get_Ds1302();

}

Get_time1();

Disp_Zn(2,0,SHI_zh);

Disp_Zn(2,16,JIAN_zh);

Disp_Ch(2,32,MAOHAO_ch);

//时间信息

Disp_Ch(2,40,SHUZI[time1[2][0]]);

Disp_Ch(2,48,SHUZI[time1[2][1]]);

Disp_Ch(2,56,FENGEFU_ch);

Disp_Ch(2,64,FENGEFU_ch);

Disp_Ch(2,72,SHUZI[time1[1][0]]);

Disp_Ch(2,80,SHUZI[time1[1][1]]);

Disp_Ch(2,88,FENGEFU_ch);

Disp_Ch(2,96,FENGEFU_ch);

Disp_Ch(2,104,SHUZI[time1[0][0]]);

Disp_Ch(2,112,SHUZI[time1[0][1]]);

}

/*******************Lcd和Ds1302之间的联合函数**************/

/*******************Eeprom和Ds1302之间的联合函数**************/

//保存故障时间

Save_Err_Time()

{

uchari,j;

EEPROM_WP=0;

j=E_Read_Byte(0x01);//获得以前的故障次数

j=j%8;

Get_Ds1302();

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

{

E_Write_Byte(0x31+8*j+i,time[i]);

}

E_Write_Byte(0x01,j+1);

EEPROM_WP=1;

}

/*******************Eeprom和Ds1302之间的联合函数**************/

/*******************Eeprom和Lcd12864之间的联合函数**************/

//显示故障日期及时间,i从0-7

Disp_Err_Time(uchari)

{

ucharj;

EEPROM_WP=0;

for(j=0;j<7;j++)

{

time[j]=E_Read_Byte(0x31+8*i+j);

}

Disp_Date

(1);

Disp_Time

(1);

EEPROM_WP=1;

}

//显示余额不足函数

Disp_Yu_E_Err()

{

Clear_Lcd();

Disp_Zn(0,0,YU_zh);

Disp_Zn(0,16,E_zh);

Disp_Ch(0,32,MAOHAO_ch);

Disp_Ch(0,40,SHUZI[E_Read_Byte(0x02)/16]);

Disp_Ch(0,48,SHUZI[E_Read_Byte(0x02)%16]);

Disp_Ch(0,56,SHUZI[E_Read_Byte(0x03)/16]);

Disp_Ch(0,64,SHUZI[E_Read_Byte(0x03)%16]);

Disp_Ch(0,72,POINT_ch);

Disp_Ch(0,80,SHUZI[E_Read_Byte(0x04)/16]);

Disp_Ch(0,88,SHUZI[E_Read_Byte(0x04)%16]);

Disp_Zn(0,96,YUAN_zh);

Disp_Zn(2,0,YU_zh);

Disp_Zn(2,16,E_zh);

Disp_Zn(2,32,BU_zh);

Disp_Zn(2,48,ZU_zh);

}

/*******************Eeprom和Lcd12864之间的联合函数**************/

voidDisp_Crc()

{

longtemp=220;

crc_key=crc_key%13;

switch(crc_key)

{

case0:

//输出实时信息

{

Clear_Lcd();

Disp_Date(0);

Disp_Time(0);

crc_key++;

break;

}

case1:

//输出电压信号

{

Clear_Lcd();

Disp_Zn(0,0,DIAN_zh);

Disp_Zn(0,16,YA_zh);

//Disp_Ch(0,32,U_ch);

//Disp_Ch(0,40,MAOHAO_ch);

Disp_Ch(2,0,U_ch);

Disp_Ch(2,8,SHUZI[1]);

Disp_Ch(2,16,MAOHAO_ch);

//temp=Get_Uirms(r_URmsa);

Disp_Ch(2,24,SHUZI[temp/100]);

Disp_Ch(2,32,SHUZI[(temp%100)/10]);

Disp_Ch(2,40,SHUZI[temp%10]);

Disp_Ch(4,0,U_ch);

Disp_Ch(4,8,SHUZI[2]);

Disp_Ch(4,16,MAOHAO_ch);

//temp=Get_Uirms(r_URmsb);

Disp_Ch(4,24,SHUZI[temp/100]);

Disp_Ch(4,32,SHUZI[(temp%100)/10]);

Disp_Ch(4,40,SHUZI[temp%10]);

Disp_Ch(6,0,U_ch);

Disp_Ch(6,8,SHUZI[3]);

Disp_Ch(6,16,MAOHAO_ch);

//temp=Get_Uirms(r_URmsc);

Disp_Ch(6,24,SHUZI[temp/100]);

Disp_Ch(6,32,SHUZI[(temp%100)/10]);

Disp_Ch(6,40,SHUZI[temp%10]);

crc_key++;

break;

}

case2:

//输出电流信息

{

Clear_Lcd();

Disp_Zn(0,0,DIAN_zh);

Disp_Zn(0,16,LIU_zh);

Disp_Ch(0,32,I_ch);

Disp_Ch(0,40,MAOHAO_ch);

//temp=Get_Uirms(0x2b);

Disp_Ch(0,48,SHUZI[temp/100]);

Disp_Ch(0,56,SHUZI[(temp%100)/10]);

Disp_Ch(0,64,SHUZI[temp%10]);

Disp_Ch(2,0,I_ch);

Disp_Ch(2,8,SHUZI[1]);

Disp_Ch(2,16,MAOHAO_ch);

//temp=Get_Uirms(r_IRmsa);

Disp_Ch(2,24,SHUZI[temp/100]);

Disp_Ch(2,32,SHUZI[(temp%100)/10]);

Disp_Ch(2,40,SHUZI[temp%10]);

Disp_Ch(4,0,I_ch);

Disp_Ch(4,8,SHUZI[2]);

Disp_Ch(4,16,MAOHAO_ch);

//temp=Get_Uirms(r_IRmsb);

Disp_Ch(4,24,SHUZI[temp/100]);

Disp_Ch(4,32,SHUZI[(temp%100)/10]);

Disp_Ch(4,40,SHUZI[temp%10]);

Disp_Ch(6,0,I_ch);

Disp_Ch(6,8,SHUZI[3]);

Disp_Ch(6,16,MAOHAO_ch);

//temp=Get_Uirms(r_IRmsc);

Disp_Ch(6,24,SHUZI[temp/100]);

Disp_Ch(6,32,SHUZI[(temp%100)/10]);

Disp_Ch(6,40,SHUZI[temp%10]);

crc_key++;

break;

}

case3:

//输出功率信息

{

Clear_Lcd();

Disp_Zn(0,0,GONG_zh);

Disp_Zn(0,16,LV_zh);

Disp_Ch(0,32,MAOHAO_ch);

//temp=Get_PQS(r_Pt);

Disp_Ch(0,40,SHUZI[temp/100]);

Disp_Ch(0,48,SHUZI[(temp%100)/10]);

Disp_Ch(0,56,SHUZI[temp%10]);

crc_key++;

break;

}

case4:

//输出余额信息格式为xxxx.xx元

{

Clear_Lcd();

Disp_Zn(0,0,YU_zh);

Disp_Zn(0,16,E_zh);

Disp_Ch(0,32,MAOHAO_ch);

Disp_Ch(0,40,SHUZI[E_Read_Byte(0x02)/16]);

Disp_Ch(0,48,SHUZI[E_Read_Byte(0x02)%16]);

Disp_Ch(0,56,SHUZI[E_Read_Byte(0x03)/16]);

Disp_Ch(0,64,SHUZI[E_Read_Byte(0x03)%16]);

Disp_Ch(0,72,POINT_ch);

Disp_Ch(0,80,SHUZI[E_Read_Byte(0x04)/16]);

Disp_Ch(0,88,SHUZI[E_Read_Byte(0x04)%16]);

Disp_Zn(0,96,YUAN_zh);

crc_key++;

break;

}

case5:

//输出故障信息1

{

Clear_Lcd();

Disp_Ch(5,0,SHUZI[1]);

Disp_Ch(5,40,E_ch);

Disp_Ch(5,48,R_ch);

Disp_Ch(5,56,R_ch);

Disp_Ch(5,64,FENGEFU_ch);

Disp_Ch(5,72,SHUZI[E_Read_Byte(0x30)]);

Disp_Err_Time(0);

crc_key++;

break;

}

case6:

{

Clear_Lcd();

Disp_Ch(5,0,SHUZI[2]);

Disp_Ch(5,40,E_ch);

Disp_Ch(5,48,R_ch);

Disp_Ch(5,56,R_ch);

Disp_Ch(5,64,FENGEFU_ch);

Disp_Ch(5,72,SHUZI[E_Read_Byte(0x38)]);

Disp_Err_Time

(1);

crc_key++;

break;

}

case7:

{

Clear_Lcd();

Disp_Ch(5,0,SHUZI[3]);

Disp_Ch(5,40,E_ch);

Disp_Ch(5,48,R_ch);

Disp_Ch(5,56,R_ch);

Disp_Ch(5,64,FENGEFU_ch);

Disp_Ch(5,72,SHUZI[E_Read_Byte(0x40)]);

Disp_Err_Time

(2);

crc_key++;

break;

}

case8:

{

Clear_Lcd();

Disp_Ch(5,0,SHUZI[4]);

Disp_Ch(5,40,E_ch);

Disp_Ch(5,48,R_ch);

Disp_Ch(5,56,R_ch);

Disp_Ch(5,64,FENGEFU_ch);

Disp_Ch(5,72,SHUZI[E_Read_Byte(0x50)]);

Disp_Err_Time(3);

crc_key++;

break;

}

case9:

{

Clear_Lcd();

Disp_Ch(5,0,SHUZI[5]);

Disp_Ch(5,40,E_ch);

Disp_Ch(5,48,R_ch);

Disp_Ch(5,56,R_ch);

Disp_Ch(5,64,FENGEFU_ch);

Disp_Ch(5,72,SHUZI[E_Read_Byte(0x58)]);

Disp_Err_Time(4);

crc_key++;

break;

}

case10:

{

Clear_Lcd();

Disp_Ch(5,0,SHUZI[6]);

Disp_Ch(5,40,E_ch);

Disp_Ch(5,48,R_ch);

Disp_Ch(5,56,R_ch);

Disp_Ch(5,64,FENGEFU_ch);

Disp_Ch(5,72,SHUZI[E_Read_Byte(0x60)]);

Disp_Err_Time(5);

crc_key++;

break;

}

case11:

{

Clear_Lcd();

Disp_Ch(5,0,SHUZI[7]);

Disp_Ch(5,40,E_ch);

Disp_Ch(5,48,R_ch);

Disp_Ch(5,56,R_ch);

Disp_Ch(5,64,FENGEFU_ch);

Disp_Ch(5,72,SHUZI[E_Read_Byte(0x68)]);

Disp_Err_Time(6);

crc_key++;

break;

}

case12:

{

Clear_Lcd();

Disp_Ch(5,0,SHUZI[8]);

Disp_Ch(5,40,E_ch);

Disp_Ch(5,48,R_ch);

Disp_Ch(5,56,R_ch);

Disp_Ch(5,64,FENGEFU_ch);

Disp_Ch(5,72,SHUZI[E_Read_Byte(0x70)]);

Disp_Err_Time(7);

crc_key++;

break;

}

}

Delay3s();

if(TR2==0)

TR2=1;

}

/****************************外部终中断1*********************/

voidC_Key(void)interrupt2

{

TR2=0;

Disp_Crc();

WDT_CONTR=0x3f;

}

/****************************外部终中断0*********************/

voidProgram_Key(void)interrupt0

{

if(p_key++)

{

Clear_Lcd();

Disp_Zn(5,0,BIAN_zh);

Disp_Zn(5,16,CHENG_zh);

if(p_key%2)

{

Rs485_Init();

Disp_Ch(5,32,U_ch);

Rs485_Init();

}

else

{

//Ir_Init();

Disp_Ch(5,32,I_ch);

}

}

}

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

//定时器0处理函数,

voidtimer0()interrupt1

{

TH0=0x3C;

TL0=0xB0;

if(timer0_i++==60)//3s

{

longtemp=0x70;

timer0_i=0;

//temp=Read_Spi(0x2c);//读取标志状态寄存器

if((temp&0x00000008))

{

Disp_Err(0);

B_alarm=0;//报警

err_num=err_num%8;

E_Write_Byte(30+8*err_num,0);

Save_Err_Time();

B_alarm=0;

Relay=0;//切闸

TR2=0;

ET2=0;

}

elseif((temp&0x000000007)!

=0)

{

err_num=err_num%8;

Disp_Err

(1);

E_Write_Byte(30+8*err_num,1);

Save_Err_Time();//保存故障

B_alarm=0;//报警

Relay=0;//切闸

TR2=0;//关闭循显

ET2=0;

}

elseif(E_Read_Byte

(2)==0&&E_Read_Byte(0x03)<16)//低于十元只报警不切闸

{

err_num=err_num%8;

Disp_Yu_E_Err();

E_Write_Byte(30+8*err_num,1);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2