• 大小: 441KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-05-08
  • 语言: 其他
  • 标签: 电力系统  

资源简介

计量电表的系统开发源码、开发环境为KEIL51、

资源截图

代码片段和文件信息

/*数制转换*/
#include “driver.h“
#include “config.h“
/**************************************
连续区域数据右移位相当于数据除以2的n次方
低位在低地址
输入: dest  移位后数据存放位置destination
src 需要移位数据
n 数据长度n<10
bit_n 移位个数
**************************************/
/*void data_rrf_bit(uint8 *dest uint8 *src uint8 n uint8 bit_n)
{
uint8 buff[10];
uint8 i;

memcpy(buff src n);

while(bit_n--)
{
for(i=0; i {
buff[i] >>= 1;
if(buff[i+1] & 0x01)
{
buff[i] |= 0x80;
}
}
}
}
*/
/**************************************
BCD加法
二进制加法运算结果采用修正规则进行修正:
(1)如果任何两个对应位BCD数相加的结果向高一位无进位
若得到的结果小于或等于9则该不需修正;
若得到的结果大于9且小于16时该位进行加6修正。
(2)如果任何两个对应位BCD数相加的结果向高一位有进位时(即结果大于或等于16)该位进行加6修正.
0x9+0x9=0x12的情况!!
(3)低位修正结果使高位大于9时高位进行加6修正。
**************************************/
uint8 bcd_add(uint8 *DataOneDptr\
uint8 *DataTwoDptr\
uint8 DataLend)
{
uint8 One Two Tmp; //中间变量
uint8 i = 0;
uint16 Sum = 0; //考虑CY位故取整型

while(DataLend--)  //不能DataLend--或--DataLend
{
One = DataOneDptr[i];//取出正确的被加数
Two = DataTwoDptr[i];//取出正确的加数
Sum = One + Two + Sum; //二进制求和(注意上次低位向高位的进位)
Tmp = (One & 0xf0) + (Two & 0xf0); //为半进位做准备

if ((Tmp != (Sum & 0xf0)) || ((Sum & 0x0f) > 9))
{
Sum += 6; //BCD码低4位调整
}

if (Sum >= 0xa0)
{
Sum += 0x60; //BCD码高4位调整
}
DataOneDptr[i] = Sum;//只存入低8位
Sum >>= 8;//保留高8位做为下次低位向高位的进位
i++;
}
return Sum;//返回溢出标志(最高1位)
}
/**************************************
内存数据逆序(reverse)
input:  src  源
n 长度
**************************************/
void mem_reverse(uint8 *src uint8 n)
{
uint8 temp;
uint8 i;
uint8 *p;
p = src + n - 1;
i = n / 2;
while(i--)
{
n--;
temp = *src;
*src++ = *p;
*p-- = temp;
}
}

/**************************************
单字节hex --> bcd
**************************************/
uint8 byte_bin2bcd(uint8 hex)
{
uint8 bcd = 0;

bcd = hex / 10;
bcd = bcd % 10;
return((bcd << 4) + (hex % 10));
}

/**************************************
单字节bcd --> hex
**************************************/
uint8 byte_bcd2bin(uint8 bcd)
{
return((bcd >> 4) * 10 + (bcd & 0x0F));
}

void bin_to_bcd(uint8 *s uint8 num)
{
  uint8 i;
    for(i = 0; i < num; i++)
    {
      *(s + i) = ((*(s + i) / 10)<<4) + (*(s + i) % 10);
    }
}

void bcd_to_bin(uint8 *s uint8 num)
{
  uint8 i;
    for(i = 0; i < num; i++)
    {
      *(s + i) = (*(s + i)>>4) * 10 + (*(s + i) & 0x0f);
    }
}

/**************************************
根据日期计算星期
input: day month year.must after 2000!
output: week
只能有效计算2000~2099
**************************************/
const uint8 week[12] = {622503514624}; //2000年,每月一号星期,2月后星期减一
uint8 get_time_week(uint8 *day)
{
uint8 ymdi;
d = byte_bcd2bin(*day++);
m = byte_bcd2bin(*day++);
y = byte_bcd2bin(*day);

i = y+(y>>2)+week[m-1]+d-1;

if((m<3)&&((y&0x03)==0)) //04年之前的1,2月不+1补偿
{
i %= 7;
    }
else
{
i = (i+1) % 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2350  2009-05-26 07:54  hlj3phase\1.prj

     文件       7779  2009-03-13 17:42  hlj3phase\comfun.c

     文件       1366  2009-05-23 15:10  hlj3phase\Config.h

     文件       1366  2009-04-14 11:07  hlj3phase\Config.h.bak

     文件     193939  2009-03-14 10:24  hlj3phase\Debug\Exe\hlj3.d26

     文件      16160  2009-03-13 17:42  hlj3phase\Debug\Obj\comfun.r26

     文件      60655  2009-03-14 10:23  hlj3phase\Debug\Obj\drv_mcu.r26

     文件        332  2009-03-14 10:23  hlj3phase\Debug\Obj\hlj3.pbd

     文件      36533  2009-03-13 13:27  hlj3phase\Debug\Obj\lcd.r26

     文件      43103  2009-03-13 13:27  hlj3phase\Debug\Obj\meter_sys.r26

     文件      88820  2009-03-13 17:42  hlj3phase\Debug\Obj\protocol_hlj.r26

     文件      49184  2009-03-14 10:24  hlj3phase\Debug\Obj\tariff.r26

     文件       3680  2009-03-13 13:27  hlj3phase\Debug\Obj\user_def.r26

     文件      12688  2009-02-04 08:00  hlj3phase\driver.h

     文件      31882  2009-05-25 15:08  hlj3phase\drv_mcu.c

     文件      31900  2009-05-25 15:03  hlj3phase\drv_mcu.c.bak

     文件       2758  2009-05-26 07:54  hlj3phase\e2rom_alloc.h

     文件       2775  2008-12-18 13:43  hlj3phase\e2rom_alloc.h.bak

     文件      19177  2009-05-25 15:56  hlj3phase\hlj3.dep

     文件      12738  2008-12-24 17:07  hlj3phase\hlj3.ewd

     文件      48751  2009-05-22 16:58  hlj3phase\hlj3.ewp

     文件        158  2008-12-24 16:09  hlj3phase\hlj3.eww

     文件      24276  2009-03-16 14:18  hlj3phase\lcd.c

     文件       4119  2009-02-04 08:00  hlj3phase\lcd.h

     文件      26361  2009-05-26 07:51  hlj3phase\meter_sys.c

     文件      26377  2009-04-14 07:53  hlj3phase\meter_sys.c.bak

     文件      61698  2009-05-26 07:54  hlj3phase\protocol_hlj.c

     文件      61715  2009-04-08 17:17  hlj3phase\protocol_hlj.c.bak

     文件       9534  2009-05-26 07:54  hlj3phase\protocol_hlj.h

     文件       9551  2009-01-08 13:37  hlj3phase\protocol_hlj.h.bak

............此处省略47个文件信息

评论

共有 条评论