資源簡介
計量電表的系統開發源碼、開發環境為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?????{
??????*(s?+?i)?=?((*(s?+?i)?/?10)<<4)?+?(*(s?+?i)?%?10);
????}
}
void?bcd_to_bin(uint8?*s?uint8?num)
{
??uint8?i;
????for(i?=?0;?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的智能小車設計
評論
共有 條評論