原创 以前记录的一些单片机编程心得(有些内容没有实际实现)

2008-9-10 21:51 3998 6 10 分类: MCU/ 嵌入式

一、延时程序的处理:
  1、对于可以设置系统时钟的单片机,延时程序统一先把系统时钟设频率置为最低,然后按这个最低时钟频率写延时函数,这样的好处:第一,统一了不同系统时钟下的延时;第二,降低功耗。
  2、对于单片机系统,不同的外部时钟,延时程序对应的时间不同,为了方便使用,加入预编译指令#ifdef/#else/#endif  这样如果预定义了一个系统时钟,则选择相应的延时参数进行编译,而延时程序主体不变,只是里面有
     一个延时参数,根据预定义选择相应参数。


二、for循环的处理:
   用for(i=XX,i>0,i--) 而不用for(i=0;i<XX,i++)  速度快。
   对于两层或多层for循环,频繁的循环放在内层,减少循环间跳转花费的时间。


三、对外设的操作:可以把外设作为一个文件来操作,比如液晶,就可以把液晶看作一个文件,往液晶打印字符串或者数据,就可以用fprintf()来做,(51的C标准库不支持,但是可以自己写一个文件操作的库)。只要是输入输出
   设备,都试着用文件操作的方法去操作。



四、标准库函数的使用:
  1、标准输入输出库(stdio.h):
   字符串夹杂变量数字(比如:发送完nihao字符串,然后发送变量i的值)往液晶显示或往串口发送的时候,往串口发送可以使用格式输出函数printf("nihao%d",i);但是往LCD显示就不好做了,通常是写一个数字转字符串的函数,然
   后先送原来的字符串,再送数字转换后的字符串,太麻烦,可以使用标准输入输出库里的sprintf()函数来完成,它的原型为:sprintf(char *buffer, const char *format, …),*buffer是要把字符串和变量写入的缓冲区,可以使
   用数组或者指针,后面的格式和printf()函数一样;    与之对应的还有sscanf()函数,从缓冲区读一个字符串把它转成相应的类型后赋给指定的变量。
   比如:
    #include <stdio.h>
    void PrintToLcd(unsigned char *str)
    {
        ...
    }
    void main()
    {
        unsigned char *p;
        unsigned char i = 50;
        sprintf(p,"nihao%d",i);
        PrintToLcd(p);
    }


  2、字符串库(string.h)
    字符串连接(相加)  char *strcat(char *dest,const char *stc)
   把src连接到dest字符串后面,返回指向dest的指针。
    字符串比较  int strcmp(char *str1,char *str2)
   返回值:小于0: str1<str2,等于0: str1=str2,大于0: str1>str2。
    字符串拷贝1  char *strcpy(char *dest,const char *src)
   结果把src的内容拷进dest,两个字符串内容相同,返回指向dest的指针。
    字符串拷贝2  char *strdup(const char *src)
   src:待拷贝的源字符串,返回值:指向拷贝后的字符串的指针。
    字符串倒序  char *strrev(char *s)
   返回指向倒序后字符串的指针。


  3、类型转换(math.h; stdlib.h)
   字符串转双精度(类似C++Builder里的StrToDouble)  double atof(char *str)
   字符串转整数(类似StrToInt)  int atoi(char *str)
   字符串转长整型  long atol(char *str)
   浮点数转字符串  char *ecvt(double value,int ndigit,int*dec,int *sign)
                   char *fcvt(double value,int ndigit,int*dec,int *sign)
    输入参数:value: 待转换浮点数,ndigit: 转换后的字符串长度。
    输出参数:dec: 小数点位置,sign: 符号。
    返回转换后的字符串指针。
   整型转字符串  char *itoa(int value,char *string,int radix)
    输入参数:value: 要转换的数,radix: 转换的进制。
    输出参数:string: 转换后的字符串。
    返回指向string的指针。
   长整型转字符串  char *ltoa(long value,char *string,int radix)

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户1466517 2008-9-14 15:31

好东西!!!!!

用户1466517 2008-9-14 15:30

好东西!

用户461316 2008-9-11 22:46

收藏!!!!!!!!!

用户461316 2008-9-11 01:14

说藏!!!!
相关推荐阅读
mubo_996067292 2010-11-07 23:09
继续升级,CTE1.3
新增:rms2vpp <rms value> -- sine signal amplitude convertvpp2rms <vpp value> -- sine signa...
mubo_996067292 2010-10-23 02:10
关于天灾
    胡公,温公,世之英杰。而其享国之日,天灾频现。自胡公七年(西历二千零八年)至于今日,三年之中,凡日蚀二,大地震二,大旱一。    方今之日,中国日强,使夷狄不敢正视,此千秋之功也。而剥其表视其...
mubo_996067292 2010-09-03 00:27
继续升级:mil-mm,db-倍数,m/s-km/h,电阻并联转换计算器
新增:    增加了电阻并联计算。另:   所有的转换和计算,输入数字的时候都不能有数字之外的字符。...
mubo_996067292 2010-08-27 00:47
mil-mm,db-倍数,m/s-km/h转换计算器
几组常用的转换。...
mubo_996067292 2010-08-03 22:59
mm和mil转换
命令行模式,四个命令:help显示帮助信息quit 退出程序mil2mm <mil值>  mil转换为mmmm2mil <mm值>  mm转换为mil 直接找了个朋友在单片机上...
mubo_996067292 2010-03-09 22:31
雨夜弹琴
雨落深圳寒,加班夜归晚。坐闻窗飒飒,发性抚琴弹。...
EE直播间
更多
我要评论
4
6
关闭 站长推荐上一条 /3 下一条