资源简介
计量电表的系统开发源码、开发环境为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个文件信息
- 上一篇:阻止滚动条事件冒泡
- 下一篇:基于STM32的智能小车设计
相关资源
- 电力系统潮流计算程序集合
- 电力系统的额定电压_电力系统的特性
- 电力系统无功补偿方式及存在的一些
- 电力系统中的电力电子技术与无功补
- 浅析220kV线路保护拒动事故的处理方法
- PSCAD4.2安装破解版+教程
- 电力系统中机组组合问题算法的研究
- 含STATCOM和SSSC电力系统的电压稳定评估
- 电力系统潮流计算(高斯-赛德尔法)
- 110kV输电线路耐雷性能的计算与仿真
- 电力系统稳态潮流计算程序PQ和NR法
- 电力系统继电保护(第2版)习题解析
- 03--PSD-SCCP短路电流PPT_.pdf
- PSS/E用户手册
- 基于BP神经网络电力系统短期负荷预测
- 电力系统自动化
- 动态电力系统的理论和分析(倪以信
- 电力系统CIM模型
- 电力系统小干扰分析
- 华北电力大学 电力系统分析基础
- 电力系统分析学习指导与习题集
- 电力系统分析(夏道止).
- 张保会版电力系统继电保护讲稿PDF版
- 电力系统暂态分析 李光琦.pdf
- 电力系统故障分析—刘万顺
- 电力系统电磁暂态与机电暂态混合实
- 电力系统短期负荷预测及其应用系统
- 电力系统小干扰稳定分析中特征值灵
- 电力系统并联补偿:结构、原理、控
- 基于FFT和小波变换的电力系统谐波检
评论
共有 条评论