📄 ddsy922.c
字号:
原型:void DisBufToBCD();
功能:延时1ms*i
入口参数: i 是设定延时时间
出口参数:无
********************************************************************/
void DisBufToBCD()
{
if((SentBuf[0]&0XF0)>>4)
{
DisBuf[0]=Segment[SentBuf[2]&0X0F]; /**/
DisBuf[1]=Segment[(SentBuf[2]&0XF0)>>4];
DisBuf[2]=Segment[SentBuf[1]&0X0F];
DisBuf[3]=Segment[(SentBuf[1]&0XF0)>>4];
DisBuf[4]=Segment[SentBuf[0]&0X0F];
DisBuf[5]=Segment[(SentBuf[0]&0XF0)>>4];
}
else
{
DisBuf[5]=0xff;
if(SentBuf[0]&0X0f)
{
DisBuf[0]=Segment[SentBuf[2]&0X0F]; /*Year Week*/
//DisBuf[1]=Segment[((SentBuf[2]&0XF0)>>4)+0x10];
DisBuf[1]=Segment[(SentBuf[2]&0XF0)>>4];
DisBuf[2]=Segment[SentBuf[1]&0X0F];
DisBuf[3]=Segment[(SentBuf[1]&0XF0)>>4];
DisBuf[4]=Segment[SentBuf[0]&0X0F];
}
else
{
DisBuf[4]=0xff;
if((SentBuf[1]&0XF0)>>4)
{
DisBuf[0]=Segment[SentBuf[2]&0X0F]; /*Year Week*/
DisBuf[1]=Segment[(SentBuf[2]&0XF0)>>4];
DisBuf[2]=Segment[SentBuf[1]&0X0F];
DisBuf[3]=Segment[(SentBuf[1]&0XF0)>>4];
}
else
{
DisBuf[3]=0xff;
if(SentBuf[1]&0X0F)
{
DisBuf[0]=Segment[SentBuf[2]&0X0F]; /*Year Week*/
DisBuf[1]=Segment[(SentBuf[2]&0XF0)>>4];
DisBuf[2]=Segment[SentBuf[1]&0X0F];
}
else
{
DisBuf[2]=0xff;
DisBuf[0]=Segment[SentBuf[2]&0X0F]; /*Year Week*/
DisBuf[1]=Segment[(SentBuf[2]&0XF0)>>4];
}
}
}
}
}
/********************************************************************
延时函数
原型:void Delay_T(unsigned char );
功能:延时1ms*i
入口参数: i 是设定延时时间
出口参数:无
********************************************************************/
DataToDisBuf(void)
{
if(DisMode>=6)
{DisMode=0;}
if(Flag_ReadTime)
{Flag_ReadTime=0;
wren_cmd(); //; Set write enable latch
wrsr_cmd();// ; Write 00H to status register
wren_cmd(); //; Set write enable latch
}
// Relay_Open();
_CardReady();
if(Flag_Play&&Portic)
{
switch(led_Play)
{
case 0: //g00d
DisBuf[0]=Segment[0x1a];
DisBuf[1]=Segment[0x0d];
DisBuf[2]=Segment[0x1c];
DisBuf[3]=Segment[0x1c];
DisBuf[4]=Segment[0x09];
DisBuf[5]=Segment[0x1a];
break;
case 1: //error
DisBuf[5]=Segment[0x1a];
DisBuf[4]=Segment[0x0e];
DisBuf[3]=Segment[0x1d];
DisBuf[2]=Segment[0x1d];
DisBuf[1]=Segment[0x1c];
DisBuf[0]=Segment[0x1a];
break;
case 2: //fail
DisBuf[5]=Segment[0x1a];
DisBuf[4]=Segment[0x0f];
DisBuf[3]=Segment[0x0a];
DisBuf[2]=Segment[0x01];
DisBuf[1]=Segment[0x1f];
DisBuf[0]=Segment[0x1a];
break;
case 3: //no
ec.ReceBuf[5]=0x1a;
ec.ReceBuf[4]=0x1a;
ec.ReceBuf[3]=0x20;
ec.ReceBuf[2]=0x1c;
ec.ReceBuf[1]=0x1a;
ec.ReceBuf[0]=0x1a;
break;
case 4: //full
ec.ReceBuf[5]=0x1a;
ec.ReceBuf[4]=0x0f;
ec.ReceBuf[3]=0x1e;
ec.ReceBuf[2]=0x1f;
ec.ReceBuf[1]=0x1f;
ec.ReceBuf[0]=0x1a;
break;
case 5: //cb
ec.ReceBuf[5]=0x1a;
ec.ReceBuf[4]=0x1a;
ec.ReceBuf[3]=0x0c;
ec.ReceBuf[2]=0x0b;
ec.ReceBuf[1]=0x1a;
ec.ReceBuf[0]=0x1a;
break;
case 6: //qc
ec.ReceBuf[5]=0x1a;
ec.ReceBuf[4]=0x1a;
ec.ReceBuf[3]=0x21;
ec.ReceBuf[2]=0x0c;
ec.ReceBuf[1]=0x1a;
ec.ReceBuf[0]=0x1a;
break;
case 7: //used
ec.ReceBuf[5]=0x1a;
ec.ReceBuf[4]=0x1e;
ec.ReceBuf[3]=0x05;
ec.ReceBuf[2]=0x0e;
ec.ReceBuf[1]=0x0d;
ec.ReceBuf[0]=0x1a;
break;
case 8: //used
SentBuf[2] = real_energy.money0.money_overplus[3] ;
SentBuf[1] = real_energy.money0.money_overplus[2] ;
SentBuf[0] = real_energy.money0.money_overplus[1] ;
DisBufToBCD();
if(real_energy.money0.money_overplus[0]==1)
DisBuf[5]=0xbf;
else
DisBuf[5]=0x88;
break;
}
}
else
{
switch(DisMode)
{
case 0:
// page_read(0x03,ec.ReceBuf,3);
SentBuf[2] = real_energy.electric.energy[2] ;
SentBuf[1] = real_energy.electric.energy[1] ;
SentBuf[0] = real_energy.electric.energy[0] ;
DisBufToBCD();
// DisBuf[5]=0xc0;
break;
case 1:
SentBuf[2] = real_energy.money0.money_overplus[3] ;
SentBuf[1] = real_energy.money0.money_overplus[2] ;
SentBuf[0] = real_energy.money0.money_overplus[1] ;
//page_read(0x07,ec.ReceBuf,3);
DisBufToBCD();
if(real_energy.money0.money_overplus[0]==0x1)
DisBuf[5]=0xbf;
else DisBuf[5]=0x88;
break;
case 2:
SentBuf[2] = meter_para.pulse_constant[2] ;
SentBuf[1] = meter_para.pulse_constant[1] ;
SentBuf[0] = meter_para.pulse_constant[0] ;
// page_read(0x13,ec.ReceBuf,3);
DisBufToBCD();
DisBuf[5]=0x83;
break;
case 3:
DisBuf[0]=Segment[meter_para.factory_No[2]&0X0F]; /**/
DisBuf[1]=Segment[(meter_para.factory_No[2]&0XF0)>>4];
DisBuf[2]=Segment[meter_para.factory_No[1]&0X0F];
DisBuf[3]=Segment[(meter_para.factory_No[1]&0XF0)>>4];
DisBuf[4]=Segment[meter_para.factory_No[0]&0X0F];
DisBuf[5]=Segment[(meter_para.factory_No[0]&0XF0)>>4];
break;
case 4:
DisBuf[0]=Segment[meter_para.factory_No[5]&0X0F]; /**/
DisBuf[1]=Segment[(meter_para.factory_No[5]&0XF0)>>4];
DisBuf[2]=Segment[meter_para.factory_No[4]&0X0F];
DisBuf[3]=Segment[(meter_para.factory_No[4]&0XF0)>>4];
DisBuf[4]=Segment[meter_para.factory_No[3]&0X0F];
DisBuf[5]=Segment[(meter_para.factory_No[3]&0XF0)>>4];
break;
case 5:
page_read(OFFSET_OF(EEPROM_DATA,eprom_money_notice0),ec.ReceBuf,SIZE_OF(EEPROM_DATA,eprom_money_notice0));
SentBuf[2] = ec.ReceBuf[2];
SentBuf[1] = ec.ReceBuf[1];
SentBuf[0] = ec.ReceBuf[0];
DisBufToBCD();
DisBuf[5]=0xc6;
break;
}
}
}
/********************************************************************
led 显示驱动函数
原型:void Display(void)
功能:
入口参数:
出口参数:无
********************************************************************/
Display(void)
{
if(DisBit>6)
{DisBit=0;DBit=1;}
else {
P0=DBit;
P2_7=HIGH;
_nop_();
P2_7=LOW;
P0=DisBuf[DisBit];
P2_6=HIGH;
_nop_();
P2_6=LOW;
DBit=DBit<<1;
DisBit++;
}
}
/********************************************************************
外部中断0函数
原型: interrupt 1 using 2
功能:延时1ms*i
入口参数: i 是设定延时时间
出口参数:无
********************************************************************/
inter1(void) interrupt 3
{
//PIF2=0;//clear statue flag
//P0.3=0;//pulse led on
pulse_time=1;
real_energy.pulse[0]++;
down_save=1;
}
void energy_add(void)
{
unsigned char temp_pulse,cs;
temp_pulse=bcd_to_hex(meter_para.pulse_constant[1]);
if(real_energy.pulse[0]>=temp_pulse)
{
real_energy.pulse[0]-=temp_pulse;
// real_energy.moto_flag=1;
moto_time++;
}
if(moto_time)
{
moto_time-=1;
bcdadd(real_energy.electric.energy,4);
kwh_flag++;
if((real_energy.electric.energy[3]=0x00)||(real_energy.electric.energy[2]=0x00)||(real_energy.electric.energy[1]<0x10))
kwh10_flag=0;
if(kwh_flag>=100)//1kwh back energy
{
down_save=0;
kwh_flag-=100;
rst_wdog();
if(Tow_Compare(real_energy.money0.money_overplus+1,0 )!=1)
real_energy.money0.money_overplus[0]=1;
if((real_energy.money0.money_overplus[0]==0)&&(Tow_Compare(real_energy.money0.money_overplus+1,0 )==1))
bcdsub(real_energy.money0.money_overplus,3);
else
{
bcdadd(real_energy.money0.money_overplus,3);
//creepage_flag=1;
}
cs=xaoyanghe_cs(real_energy.electric.energy,sizeof(struct real_energy));
real_energy.cs=cs;
EA=0;
page_write(OFFSET_OF(EEPROM_DATA,eprom_real_energy),&real_energy.electric.energy[0],sizeof(struct real_energy));
page_write(OFFSET_OF(EEPROM_DATA,eprom_back_real_energy), &real_energy.electric.energy[0],sizeof(struct real_energy));
EA=1;
}
}
}
unsigned char bcd_to_hex(unsigned char value)
{
unsigned char result;
rst_wdog();
result=((value&0xf0)>>4)*10+(value&0x0f);
return result;
}
/********************************************************************
BCD减1函数
原型:void bcdsub(unsigned char *value,unsigned char length)
功能:BCD加1
入口参数: *value length
出口参数:无
********************************************************************/
void bcdsub(unsigned char *value,unsigned char length)
{
unsigned char temp,i;
(*(value+length))=--(*(value+length));
for(i=length;i>0;i--)
{
temp=(*(value+i));
if((temp&0xf0)==0xf0)
{
//(*(value+length))=0x99;
temp=0x99;
(*(value+i))=temp;
(*(value+i-1))=(*(value+i-1))-1;
}
if((temp&0x0f)==0x0f)
(*(value+i))=(*(value+i))-0x6;
}
}
/********************************************************************
BCD加1函数
原型:void bcdadd(unsigned char *value,unsigned char length)
功能:BCD加1
入口参数: *value length
出口参数:无
********************************************************************/
void bcdadd(unsigned char *value,unsigned char length)
{
unsigned char temp,i;
*(value+length)=++*(value+length);
for(i=length;i>0;i--)
{
temp=*(value+i);
if((temp&0x0f)>=0x0A)
{
*(value+i)+=0x6;
temp=*(value+i);
if((temp&0xf0)>=0xA0)
{
*(value+i)+=0x60;
*(value+i-1)=*(value+i-1)+1;
}
}
}
}
void relaynotice(void)
{
if(real_energy.relayflag.bitflag.command)
{
if(real_energy.relayflag.bitflag.iccommand==real_energy.relayflag.bitflag.fact)
{
CTR_ON=1;
CTR_OFF=1;
}
else
{
if(real_energy.relayflag.bitflag.iiccommand)
{
real_energy.relayflag.bitflag.fact=real_energy.relayflag.bitflag.iiccommand;
CTR_ON=1;
CTR_OFF=0;
}
else
{
real_energy.relayflag.bitflag.fact=real_energy.relayflag.bitflag.iccommand;
if(real_energy.relayflag.bitflag.iccommand)
{
CTR_ON=1;
CTR_OFF=0;
}
else
{
CTR_ON=0;
CTR_OFF=1;
}
}
}
}
}
void relayON_OFF(void)
{
reay_time=1;
if(real_energy.relayflag.bitflag.command==real_energy.relayflag.bitflag.fact)
{
CTR_ON=1;
CTR_OFF=1;
}
else
{
real_energy.relayflag.bitflag.fact=real_energy.relayflag.bitflag.command;
if(real_energy.relayflag.bitflag.command)
{
CTR_ON=1;
CTR_OFF=0;
}
else
{
CTR_ON=0;
CTR_OFF=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -