找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

9

主题

20

帖子

42

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
一、延时程序的处理:0 v; Y5 \2 @  c
  1、对于可以设置系统时钟的单片机,延时程序统一先把系统时钟设频率置为最低,然后按这个最低时钟频率写延时* Q3 S7 V. m& U3 D, Q
     函数,这样的好处:第一,统一了不同系统时钟下的延时;第二,降低功耗
8 q, Z+ }# \% @1 i" w' v  2、对于单片机系统,不同的外部时钟,延时程序对应的时间不同,为了方便使用,加入预编译指令#ifdef/#else/
7 [3 \% w3 x1 P. H     #endif  这样如果预定义了一个系统时钟,则选择相应的延时参数进行编译,而延时程序主体不变,只是里面有
, c* `$ g, r* ]) ~2 \  \- N7 w+ n     一个延时参数,根据预定义选择相应参数。
3 N& f7 d, J4 I- K0 D: l+ n) a/ s二、for循环的处理:/ b# t- H' p% i
   用for(i=XX,i>0,i--) 而不用for(i=0;i<XX,i++)  速度快
+ \. f1 P  V+ v1 `   对于两层或多层for循环,频繁的循环放在内层,减少循环间跳转花费的时间# \5 o7 {8 {7 K% ]
三、对外设的操作:可以把外设作为一个文件来操作,比如液晶,就可以把液晶看作一个文件,往液晶打印字符串或
$ r8 }. t, p! g8 z# T% w   者数据,就可以用fprintf()来做,(51的C标准库不支持,但是可以自己写一个文件操作的库)。只要是输入输出# G0 ~: A5 D$ U1 s) u1 Q! j
   设备,都试着用文件操作的方法去操作。8 y, T6 h' l; P2 D8 z5 g
7 d7 g- v. [. C# z+ t8 D! w! w
四、标准库函数的使用:
2 ?* Q3 I2 Y" s  1、标准输入输出库(stdio.h):, Z3 `& a2 s5 d6 @
   字符串夹杂变量数字(比如:发送完nihao字符串,然后发送变量i的值)往液晶显示或往串口发送的时候,往串口发
) ^, p+ w& o$ `( e$ J+ p/ s. {7 V7 o" W   送可以使用格式输出函数printf("nihao%d",i);但是往LCD显示就不好做了,通常是写一个数字转字符串的函数,然
  `1 q1 u7 @$ Q! |* G   后先送原来的字符串,再送数字转换后的字符串,太麻烦,可以使用标准输入输出库里的sprintf()函数来完成,它
( ?. a4 `) I, j; o5 t   的原型为:sprintf(char *buffer,const char *format, …),*buffer是要把字符串和变量写入的缓冲区,可以使0 e$ s# S, H+ Q+ l
   用数组或者指针,后面的格式和printf()函数一样;    与之对应的还有sscanf()函数,从缓冲区读一个字符串把它
! B3 r/ C# W3 n+ X* [7 t   转成相应的类型后赋给指定的变量。4 V% a; I) j, M3 |5 H0 p7 s& j
   比如:
" F0 s% J" P* {/ x9 r    #include <stdio.h>* K& c- S9 E; o8 K( \5 O2 j; \
    void PrintToLcd(unsigned char *str)
# ^6 S9 ~/ m2 i9 q    {% ^5 U1 C7 E4 g- r2 Y4 A& o
        crazybc.com
7 a7 H6 ?- o& u' z/ K    }8 \9 ]% z* K( T9 B/ @
    void main()
- y' u. p& I' K5 z    {
- j+ k- f* x9 K0 Z+ z: w        unsigned char *p;- ?$ e2 T8 A! Z4 I
        unsigned char i = 50;
9 u  a7 k; x& R, V) d- L) \        sprintf(p,"nihao%d",i);1 V( U6 @0 z0 ^) O7 x8 s# L
        PrintToLcd(p);0 I+ `  N$ W& i& @3 q9 O8 B
    }. c7 K. _1 |$ o6 C( [- e* x# ]
  2、字符串库(string.h)
# L* [1 X5 k, T  z7 `    字符串连接(相加)  char*strcat(char *dest,const char *stc)
# y( G3 s9 j2 B9 F6 \   把src连接到dest字符串后面,返回指向dest的指针
5 a) i+ ?0 j9 a$ B$ u( P    字符串比较  int strcmp(char*str1,char *str2)
& k5 J- g$ {1 |8 C   返回值:小于0: str1<str2,等于0: str1=str2,大于0:str1>str2
+ K- i# A8 O* Y! H7 ?) F    字符串拷贝1  char*strcpy(char *dest,const char *src)
  z  L1 h: ~6 Y9 s; C- H* Z   结果把src的内容拷进dest,两个字符串内容相同,返回指向dest的指针: d5 o: c2 o' H9 `( R/ B8 V) C+ @
    字符串拷贝2  char*strdup(const char *src); L" E4 ?3 `) n( {9 g9 d
   src:待拷贝的源字符串,返回值:指向拷贝后的字符串的指针2 j- o9 i$ y* _2 V
    字符串倒序  char *strrev(char*s);( B# G5 k! i3 W9 w* c7 v
   返回指向倒序后字符串的指针
) ], @: D2 o, R  3、类型转换(math.h; stdlib.h)$ T* \. b6 v  l1 Q6 C% |
   字符串转双精度(类似C++Builder里的StrToDouble) double atof(char *str)! s2 ?6 R' l# I7 e' B$ G
   字符串转整数(类似StrToInt)  int atoi(char *str)! ^" g4 X* y: N2 A  F6 [
   字符串转长整型  long atol(char*str)  U8 u* a- s" V& O7 N: ~% Y
   浮点数转字符串  char *ecvt(doublevalue,int ndigit,int*dec,int *sign)
/ D3 I, @( I7 J: d8 E5 q7 x% E. W                  char *fcvt(double value,int ndigit,int*dec,int *sign)
9 f0 Z6 F5 M+ A4 v    输入参数:value: 待转换浮点数,ndigit: 转换后的字符串长度
( F- C" _4 o+ d" M    输出参数:dec: 小数点位置,sign: 符号' s3 D% p: W8 x7 w
    返回转换后的字符串指针9 H$ Z, p" O) P- N  n
   整型转字符串  char *itoa(intvalue,char *string,int radix)( C6 y7 I7 \3 ?
    输入参数:value: 要转换的数,radix: 转换的进制
7 {2 o: h  ]: E8 {) J* U    输出参数:string: 转换后的字符串
5 Q2 n; z8 Z' V+ p- U    返回指向string的指针
; d: t3 ~' p) \1 @$ G9 z* |   长整型转字符串  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-24 23:48 , Processed in 0.053327 second(s), 32 queries , Gzip On.

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

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

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