找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 471|回复: 1
打印 上一主题 下一主题

单片机编程爱好者的几点编程心得

[复制链接]

9

主题

20

帖子

42

积分

二级会员(20)

Rank: 2Rank: 2

积分
42
跳转到指定楼层
1#
发表于 2014-9-10 14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
一、延时程序的处理:7 h/ `  a; I& |( @7 T
  1、对于可以设置系统时钟的单片机,延时程序统一先把系统时钟设频率置为最低,然后按这个最低时钟频率写延时; Z* C! |8 N- f6 v8 i9 s) |( B5 p( ~% Q
     函数,这样的好处:第一,统一了不同系统时钟下的延时;第二,降低功耗
* ^. L' ?+ {6 b- m( T5 v" u  2、对于单片机系统,不同的外部时钟,延时程序对应的时间不同,为了方便使用,加入预编译指令#ifdef/#else/
2 u% R' n  P+ c     #endif  这样如果预定义了一个系统时钟,则选择相应的延时参数进行编译,而延时程序主体不变,只是里面有1 C  v' r: g0 w; g! f+ y! U% [
     一个延时参数,根据预定义选择相应参数。
3 T' ?1 h( A/ E4 ^二、for循环的处理:! T' O* ~2 y. U9 L
   用for(i=XX,i>0,i--) 而不用for(i=0;i<XX,i++)  速度快
( y* H+ V" D, }9 G/ A   对于两层或多层for循环,频繁的循环放在内层,减少循环间跳转花费的时间% t6 K( F  [9 a( }5 E2 ^
三、对外设的操作:可以把外设作为一个文件来操作,比如液晶,就可以把液晶看作一个文件,往液晶打印字符串或/ R3 j4 l  t! |; r* q; e
   者数据,就可以用fprintf()来做,(51的C标准库不支持,但是可以自己写一个文件操作的库)。只要是输入输出
6 t! B7 v1 B6 s, @4 ?' A   设备,都试着用文件操作的方法去操作。! t7 x9 C2 ?  T( f
: {% V# b9 t! x/ D; ~, x% r6 {% p
四、标准库函数的使用:
% F8 ~; o  _( p3 Y3 ^( \  1、标准输入输出库(stdio.h):- @0 r3 m, C; ]- L+ L0 J. Z; y
   字符串夹杂变量数字(比如:发送完nihao字符串,然后发送变量i的值)往液晶显示或往串口发送的时候,往串口发5 H' U$ |5 {4 X9 H( _
   送可以使用格式输出函数printf("nihao%d",i);但是往LCD显示就不好做了,通常是写一个数字转字符串的函数,然
0 W( U6 i5 Y% m' P* v   后先送原来的字符串,再送数字转换后的字符串,太麻烦,可以使用标准输入输出库里的sprintf()函数来完成,它3 w9 v6 B( E* |6 J( n$ u
   的原型为:sprintf(char *buffer,const char *format, …),*buffer是要把字符串和变量写入的缓冲区,可以使7 ^3 y9 t! h0 H+ S& @% {4 N2 A
   用数组或者指针,后面的格式和printf()函数一样;    与之对应的还有sscanf()函数,从缓冲区读一个字符串把它
2 C( \9 j3 P& i9 l1 u   转成相应的类型后赋给指定的变量。: G" B* I7 u# _4 Q( j+ J5 I8 a
   比如:2 C2 X2 t! t# T
    #include <stdio.h>
4 R6 g- a% [( g& r6 l    void PrintToLcd(unsigned char *str)1 U  w) S" U: S8 c0 j: }
    {; s7 d# F* u2 F+ Z/ a" q" T
        crazybc.com5 l; u9 V% n, ~
    }
2 c; h& T2 l6 Q% ]1 f$ @3 V5 R* b    void main(). X# B( i' s" I, ]& ~8 Z& b2 g
    {/ Z) i8 U  X! F& |" Q# M
        unsigned char *p;
, |- q1 h# }$ E" f, C3 R5 l+ Q        unsigned char i = 50;
, n8 [( x# R5 J- q. q( ]$ w        sprintf(p,"nihao%d",i);
1 @- n) a9 w5 H. B2 C9 f7 f        PrintToLcd(p);
+ m" G6 I5 L( g% g/ M* R    }
: k1 O/ \5 z4 Q. x- G+ c9 z7 D  2、字符串库(string.h)
. q6 D- f5 p1 f5 c, T! n    字符串连接(相加)  char*strcat(char *dest,const char *stc)
. t2 h1 K5 C0 s   把src连接到dest字符串后面,返回指向dest的指针
$ d! g; C* z. M% M8 S3 v7 p    字符串比较  int strcmp(char*str1,char *str2)1 D1 l* z& g. H( L" B8 I
   返回值:小于0: str1<str2,等于0: str1=str2,大于0:str1>str2* U  N3 W# m% l( c5 V& d
    字符串拷贝1  char*strcpy(char *dest,const char *src)
$ a! `3 ]/ E1 v   结果把src的内容拷进dest,两个字符串内容相同,返回指向dest的指针
: C9 p" H( z( q9 J# W/ X" O    字符串拷贝2  char*strdup(const char *src)
. e- s1 {3 n9 G   src:待拷贝的源字符串,返回值:指向拷贝后的字符串的指针
6 f4 i2 i; p5 Y    字符串倒序  char *strrev(char*s);0 j" L+ X! o" C
   返回指向倒序后字符串的指针
2 u, X' E/ g) A* C9 n  3、类型转换(math.h; stdlib.h)- l8 `' W, k: z. W$ E
   字符串转双精度(类似C++Builder里的StrToDouble) double atof(char *str)  W3 Z* B4 `  m) m# s: l/ Y: O5 C
   字符串转整数(类似StrToInt)  int atoi(char *str)
0 ^4 m9 \$ i8 m# b- }' \   字符串转长整型  long atol(char*str)
$ a+ x3 v$ V# i. n8 x" R! b. x   浮点数转字符串  char *ecvt(doublevalue,int ndigit,int*dec,int *sign)0 R9 x; N2 {& W1 a7 e, M
                  char *fcvt(double value,int ndigit,int*dec,int *sign)
% ~  E* z8 j, D' J8 r( J    输入参数:value: 待转换浮点数,ndigit: 转换后的字符串长度; s' y7 Z: X$ N7 Q( I) T
    输出参数:dec: 小数点位置,sign: 符号
* @. j5 y: U& W3 @0 b; {; W) j( W% t    返回转换后的字符串指针4 {" Y7 B* e. V3 B3 Z6 r9 i; O
   整型转字符串  char *itoa(intvalue,char *string,int radix)
6 E. n( }  j5 W! ]( _2 L    输入参数:value: 要转换的数,radix: 转换的进制
) t" b  O/ v, @! \: ^# z    输出参数:string: 转换后的字符串
7 U; n8 O% _4 u* R  s; c; L    返回指向string的指针; a0 d3 B* K8 e9 j2 y5 q( D8 L
   长整型转字符串  char *ltoa(longvalue,char *string,int radix)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏1 支持!支持! 反对!反对!

0

主题

45

帖子

140

积分

二级会员(20)

Rank: 2Rank: 2

积分
140
2#
发表于 2016-4-5 21:50 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-25 02:22 , Processed in 0.064660 second(s), 31 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表