amobbs.com 阿莫电子技术论坛
标题:
潜水很久了,一直忙着做项目,把项目中的一些好的应用与大家分享一下
[打印本页]
作者:
hnhxk2983
时间:
2012-3-7 13:27
标题:
潜水很久了,一直忙着做项目,把项目中的一些好的应用与大家分享一下
/***********************************************************
****程序全称:数据高低位转换
****程序功能:1001010101011100=0011101010101001
****输 入: 要转换位数 要转换数据
****返 回:转换后的数据
***********************************************************/
int data_to_data(unsigned char num,unsigned int data)
{ //高低位..互换.
unsigned char i;
unsigned int m = 0;
for(i = 0;i<num;i++){
m= (m<<1)+(data&1);
data >>=1;
}
return(m);
}
/***********************************************************
****程序全称:数据高低位转换
****程序功能:10010101=10101001
****输 入: 要转换数据
****返 回:转换后的数据
***********************************************************/
uchar reverse_bit(uchar data)
{ //高低位..互换.
data=(data<<4)|(data>>4);
data=((data&0x33)<<2)|((data&0xCC)>>2);
data=((data&0x55)<<1)|((data&0xAA)>>1);
return data;
}
3,得到指定地址上的一个字节或字
#define MEM_B( x ) ( *( (byte *) (x) ) )
#define MEM_W( x ) ( *( (word *) (x) ) )
4,求最大值和最小值
#define MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )
#define MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )
5,得到一个field在结构体(struct)中的偏移量
#define FPOS( type, field ) \
/*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */
6,得到一个结构体中field所占用的字节数
#define FSIZ( type, field ) sizeof( ((type *) 0)->field )
7,按照LSB格式把两个字节转化为一个Word
#define FLIPW( ray ) ( (((word) (ray)[0]) * 256) + (ray)[1] )
8,按照LSB格式把一个Word转化为两个字节
#define FLOPW( ray, val ) \
(ray)[0] = ((val) / 256); \
(ray)[1] = ((val) & 0xFF)
9,得到一个变量的地址(word宽度)
#define B_PTR( var ) ( (byte *) (void *) &(var) )
#define W_PTR( var ) ( (word *) (void *) &(var) )
10,得到一个字的高位和低位字节
#define WORD_LO(xxx) ((byte) ((word)(xxx) & 255))
#define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8))
11,返回一个比X大的最接近的8的倍数
#define RND8( x ) ((((x) + 7) / 8 ) * 8 )
12,将一个字母转换为大写
#define UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )
13,判断字符是不是10进值的数字
#define DECCHK( c ) ((c) >= '0' && (c) <= '9')
14,判断字符是不是16进值的数字
#define HEXCHK( c ) ( ((c) >= '0' && (c) <= '9') ||\
((c) >= 'A' && (c) <= 'F') ||\
((c) >= 'a' && (c) <= 'f') )
15,防止溢出的一个方法
#define INC_SAT( val ) (val = ((val)+1 > (val)) ? (val)+1 : (val))
16,返回数组元素的个数
#define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a[0]) ) )
17,返回一个无符号数n尾的值MOD_BY_POWER_OF_TWO(X,n)=X%(2^n)
#define MOD_BY_POWER_OF_TWO( val, mod_by ) \
( (dword)(val) & (dword)((mod_by)-1) )
/*****************************************************************************
**** Byte2BCD
****
****
*****************************************************************************/
uchar Byte2BCD(uchar Data)
{
uchar Rslt=0;
if (Data>=99) return 0x99;
while(Data>9)
{
Data-=10;
Rslt+=0x10;
}
return(Rslt+Data);
}
/*****************************************************************************
**** BCD2Byte
****
****
*****************************************************************************/
uchar BCD2Byte(uchar Data)
{
return(((Data>>4)&0x0f)*10+(Data&0x0f));
}
作者:
stanley.zhao
时间:
2012-3-7 13:33
谢谢分享
作者:
greatwall2
时间:
2012-3-7 13:37
thanks for sharing...
作者:
wwwdege
时间:
2012-3-7 13:39
谢谢 很实用
作者:
rclong
时间:
2012-3-7 13:39
谢谢楼主分享
请问楼主 这些函数一般都不调用库里的么?
作者:
xue_pic
时间:
2012-3-7 13:44
谢谢楼主分享
作者:
benladn911
时间:
2012-3-7 13:47
谢谢。参考参考。赞!
作者:
wuguoyan
时间:
2012-3-7 13:51
参考参考。赞!
作者:
lovelywwei
时间:
2012-3-7 13:57
MARK
作者:
li20030505
时间:
2012-3-7 14:23
谢谢
作者:
ljq19840420
时间:
2012-3-7 14:31
mark一下谢谢
作者:
823032003
时间:
2012-3-7 15:07
mark
作者:
lisingch
时间:
2012-3-7 15:27
不错,谢谢分享。
作者:
jordonwu
时间:
2012-3-7 15:28
学习
作者:
LSZD
时间:
2012-3-7 15:31
回复【11楼】823032003 尼美根
mark
-----------------------------------------------------------------------
作者:
Gorgon_Meducer
时间:
2012-3-7 15:38
鼓励啊!
作者:
hnhxk2983
时间:
2012-3-8 15:58
回复【4楼】rclong
-----------------------------------------------------------------------
不需要调用库函数
作者:
riverblue2010
时间:
2012-3-8 16:02
马克
作者:
cdtlzhou
时间:
2012-3-8 16:08
留个脚印!
作者:
zhuhanliang
时间:
2012-3-8 16:20
赞,有用
作者:
leijiayou
时间:
2012-3-8 16:25
数据转换 mark
作者:
ycwjl728
时间:
2012-3-8 16:28
Mark!
作者:
anxiangbo
时间:
2012-3-10 08:35
标记
作者:
l09046162
时间:
2012-3-10 08:57
mark
作者:
steven
时间:
2012-3-10 09:25
very good.thanks a lot!
作者:
liumaojun_cn
时间:
2012-3-10 09:32
mark
作者:
ljmdzyx
时间:
2012-3-10 09:49
果断马克住
作者:
jyjmaster
时间:
2012-3-10 10:13
mark
作者:
yulongkui
时间:
2012-3-10 11:01
值得参考
作者:
zjn8888
时间:
2012-3-10 12:01
辛苦
作者:
zzz1367
时间:
2012-3-10 12:03
谢谢
作者:
鹤皇
时间:
2012-3-30 22:27
楼主大公无私啊!
作者:
newhz
时间:
2012-3-30 22:29
好资料
作者:
zhiyong1820
时间:
2012-7-13 01:52
谢谢分享!
作者:
yhyf_heart
时间:
2012-7-13 07:17
这个得顶!
作者:
pcwinner
时间:
2012-7-13 07:23
MARK.....
作者:
8s209
时间:
2012-7-13 08:40
MARK......下
作者:
riptell2008
时间:
2012-7-13 10:03
look!!
作者:
kmyft
时间:
2012-10-13 23:25
谢谢分享 谢谢
作者:
chenfzg
时间:
2012-10-14 02:06
好东西,谢谢分享
作者:
liangbmw
时间:
2012-10-14 06:42
好,,,
作者:
32MCU
时间:
2012-10-14 07:25
收藏。方便查找。
作者:
shuiluo
时间:
2012-10-14 07:32
好东西,谢谢楼主分享
作者:
cyq001
时间:
2012-10-14 21:49
谢谢楼主
作者:
jack_yu
时间:
2012-10-14 22:28
谢谢分享.
作者:
康河水草xu
时间:
2012-10-14 22:55
好东西,谢谢分享
作者:
liangbmw
时间:
2012-10-15 07:47
gan2。。。
作者:
sweet_136
时间:
2012-10-15 10:05
mark 一下子.
作者:
fulitun
时间:
2012-10-15 10:46
谢谢分享
作者:
苹果520
时间:
2012-10-15 16:11
谢谢分享,
作者:
shizhijian
时间:
2012-10-15 21:22
作者:
dujuan8693
时间:
2012-10-15 21:24
以前用到过
作者:
ylei12
时间:
2012-10-15 21:35
好东西,顶上去
作者:
linuxxulin
时间:
2012-10-15 22:06
谢谢LZ分享,很实用的应用,以后肯定用的到。
作者:
spely
时间:
2012-10-16 09:14
很实用,谢谢分享~
作者:
hongyancl
时间:
2013-1-19 15:49
很好用的define技巧
作者:
richards
时间:
2013-1-19 16:07
谢谢分享
作者:
Stargazer-1986
时间:
2013-1-20 00:37
谢谢楼主咯~希望一天用得上~
作者:
asong14437546
时间:
2013-1-20 09:22
谢谢楼主的分享
作者:
32MCU
时间:
2013-1-20 10:13
收藏。正需要。
作者:
MINI2440
时间:
2013-1-20 19:11
mark---------------------
作者:
taocheng
时间:
2013-1-20 22:00
作者:
zbf
时间:
2013-1-20 22:13
3x 4 share
作者:
GFM123
时间:
2013-4-25 06:53
很好的参考,谢谢分享。
作者:
司马朝阳
时间:
2013-4-29 16:45
谢谢分享
作者:
jcrorxp
时间:
2013-4-29 16:56
THX
作者:
aworker
时间:
2013-4-29 17:24
宏用的不错!
作者:
ascii_he
时间:
2013-5-1 23:45
多谢分享!
作者:
abszy
时间:
2013-5-4 08:56
谢谢分享哦 很不错很实用
作者:
langbaiyue
时间:
2013-5-4 09:46
高地位互换采用了,谢谢!
作者:
jxcrg_t35
时间:
2013-5-4 10:16
很清晰,赞
作者:
linhua770880163
时间:
2013-5-4 10:27
for(j=1;j<9;j++)
{
u=(((devecode[i]<<j)&0x100)>>8);
v|=(u<<(j-1)) ;
}
作者:
chenchaoting
时间:
2013-5-4 15:39
mark
作者:
swenlyn
时间:
2013-5-5 12:41
mark 谢谢分享
作者:
farmerzhangdl
时间:
2013-5-5 15:45
Mark一下备用
作者:
jlian168
时间:
2013-5-6 16:52
mark,thanks.
作者:
riptell2008
时间:
2013-5-7 13:57
GOOD!
作者:
sync765
时间:
2013-5-7 14:00
进来刘明了
作者:
windboy
时间:
2013-5-7 14:12
你的第一个函数就有问题哟
unsigned int 返回值是 int
作者:
czhnja
时间:
2013-5-7 14:43
不错的总结
作者:
285885113
时间:
2013-5-18 13:42
好东西
作者:
小黑鱼1148
时间:
2013-5-18 13:50
很好的资料
作者:
realife
时间:
2013-6-17 17:11
mark,不错
作者:
weitianhu613
时间:
2013-6-17 17:47
mark!!!!!!!!!!
作者:
hyf88
时间:
2013-6-17 19:41
谢谢分享啊。。。。。。
作者:
kerby
时间:
2013-6-25 16:39
谢谢分享
作者:
say_佳
时间:
2013-9-3 09:16
赞 ,好东西,,,
作者:
zm2002
时间:
2013-9-3 09:50
本帖最后由 zm2002 于 2013-9-3 09:53 编辑
1001010101011100=0011101010101001 难道不能直接取反???如果只要指定位数可以再移位之类的也许更高效吧??
有些除法和乘法可以通过移位实现.
总的来说 上述代码还有不少优化空间 建议各位可以参考修正!!!
作者:
sedulity11
时间:
2013-9-3 14:08
mark一下
作者:
brettlee
时间:
2013-9-15 15:34
谢谢分享
作者:
god
时间:
2013-9-15 16:06
好收藏了
作者:
szmini2006
时间:
2013-9-15 18:44
看上去好像面试题
作者:
zhilu
时间:
2013-9-21 19:43
谢谢分享。。
作者:
n0831
时间:
2013-9-21 20:27
好资料,备用
作者:
关于以后
时间:
2013-10-6 14:49
Mark一下。
作者:
msq-tc
时间:
2013-10-7 20:20
留名以后备用
作者:
pipi516
时间:
2013-10-8 08:53
mark一下!
作者:
seawind319
时间:
2013-10-8 16:29
谢谢 很实用的东西
作者:
chengsong
时间:
2013-10-8 17:46
好东东,留名!
作者:
kenson
时间:
2013-10-8 18:14
好厉害啊 收藏了
欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/)
Powered by Discuz! X3.4