⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 measure.c

📁 基于单片机nec系统的一些单相电度表电量测量程序
💻 C
字号:
#include "main.h"
void energy_add(void)
{
	unsigned char  temp_pulse,cs;
 	temp_pulse=bcd_to_hex(meter_para.pulse_constant[1]);
 	if(real_energy.pulse>=temp_pulse)
  {
   	real_energy.pulse-=temp_pulse;
   	bcdadd(real_energy.electric.energy,4);   
   	kwh_flag++;
   	if(kwh_flag>=100)//1kwh back energy
    {
			down_save=0;
			kwh_flag-=100;
			cs=Calibration_cs(real_energy.electric.energy,sizeof(struct real_energy));      
			real_energy.cs=cs;
			DI();
			Write_EEPROM(OFFSET_OF(EEPROM_DATA,eprom_real_energy),sizeof(struct real_energy), &real_energy.electric.energy[0]);
			Write_EEPROM(OFFSET_OF(EEPROM_DATA,eprom_back_real_energy),sizeof(struct real_energy), &real_energy.electric.energy[0]);
			EI();
    }
  }
}


unsigned char bcd_to_hex(unsigned char value)
{
 	unsigned char result;
 	result=((value&0xf0)>>4)*10+(value&0x0f);
 	return  result;
}

unsigned char hex_to_bcd(unsigned char value)
{
 	unsigned char result;
 	result=((value/10))*16+(value%10);
 	return  result;
}

void bcdadd(unsigned char *value,unsigned char length)
{
 	unsigned char temp,i;
 	for(i=0;i<length;i++)
 	{
  	temp=++*value;
  	if((temp&0x0f)>=0x0A)
  	{
   		*value+=0x6;
    	temp=*value;
   		if((temp&0xf0)>=0xA0)
     	{
       	*value+=0x60;
        value++;
     	}
   	else
      break;
  	}
  	else
    	break;
 	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -