2435|6

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

单片机编程心得 [复制链接]


一、延时程序的处理:
  1、对于可以设置系统时钟的单片机,延时程序统一先把系统时钟设频率置为最低,然后按这个最低时钟频率写延时
     函数,这样的好处:第一,统一了不同系统时钟下的延时;第二,降低功耗  
  2、对于单片机系统,不同的外部时钟,延时程序对应的时间不同,为了方便使用,加入预编译指令#ifdef/#else/
     #endif  这样如果预定义了一个系统时钟,则选择相应的延时参数进行编译,而延时程序主体不变,只是里面有
     一个延时参数,根据预定义选择相应参数。 二、for循环的处理:
   用for(i=XX,i>0,i--) 而不用for(i=0;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
    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: str1str2     字符串拷贝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)欢迎关注:疯狂编程javascript:;
此帖出自51单片机论坛

最新回复

使用文件方式操作外设,有些MCU的库就是这样做的。真正实现起来,还是很复杂的。主要是不同MCU之间的差异较大,很难统一。  详情 回复 发表于 2014-11-16 22:43
点赞 关注
 

回复
举报

1531

帖子

49

TA的资源

五彩晶圆(中级)

沙发
 
学习学习
此帖出自51单片机论坛
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
看着这些函数还可以
此帖出自51单片机论坛
 
 
 

回复

3028

帖子

0

TA的资源

五彩晶圆(初级)

4
 
对于可以设置系统时钟的单片机,延时程序统一先把系统时钟设频率置为最低,然后按这个最低时钟频率写延时
     函数,这样的好处:第一,统一了不同系统时钟下的延时;第二,降低功耗
说的很好
此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

5
 
此帖出自51单片机论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢分享!!!!!!!!!!!!!!!!!!!!!!
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 
使用文件方式操作外设,有些MCU的库就是这样做的。真正实现起来,还是很复杂的。主要是不同MCU之间的差异较大,很难统一。
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表