51单片机自己动手写一个printf函数
2017-06-24 16:21
141 查看
今天就简单来说说怎么在51单片机中使用"printf"函数:包括使用自带的printf函数和自己动手写一个printf函数,再贴代码之前先介绍几个相关的知识,主要用于自己写printf函数。
①C语言函数:vsprintf
其原型为int vsprintf(char *string, char *format, va_list param);,作用为将param按格式format写入字符串string中,因此他可以用于将任何格式数据转化为字符串数据,比如把整数97转化为ASCII码的97的程序就像下面这样vsprintf(string,”%d”,97),当然还有一点需要注意:在keil里面使用sprintf需要包含stdio.h这个头文件(当然这里也可以使用sprintf,作用完全差不多,只需要稍加修改即可,不多介绍)。说到这里,再来说说另一个函数itoa吧,其实他比vsprintf更简单,其原型为char *itoa(int value, char *string, int radix),作用为将value按radix进制写入到string字符串中,使用时需要包含头文件stdlib.h,可是在keil里面却无法使用,头文件里面不包含itoa,即使把VC里面的复制进来貌似还是不行,呵呵,目前不知道原因。
②可变参数函数
具体来说就是stdarg.h里面的这几个函数va_start,va_arg,va_list,va_end,这几个参数用于开辟一段内存区域,可以配合vsprintf使用,但是对内存使用较大,需要单片机具备一定的RAM,否则程序就算能编译通过也是无法运行的,用法见这里http://www.runoob.com/cprogramming/c-standard-library-stdarg-h.html
#include <STC12C5A60S2.H> #include <stdio.h> //UART1 初始化 void Uart1Init(void) //115200bps@11.0592MHz { PCON &= 0x7F; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x04; //1T模式 BRT = 0xFD; //设置独立波特率发生器重装值 AUXR |=0X01; //串口1选择独立发生器为波特率发生器 AUXR |=0X10; //启动独立波特率发生器 ES = 1; //使能串口1中断 } //UART1 发送串口数据 void UART1_SendData(char dat) { ES=0; //关串口中断 SBUF=dat; while(TI!=1); //等待发送成功 TI=0; //清除发送中断标志 ES=1; //开串口中断 } //UART1 发送字符串 void UART1_SendString(char *s) { while(*s)//检测字符串结束符 { UART1_SendData(*s++);//发送当前字符 } } //PRINTF 输出函数 void printf(const char *fmt,...) { va_list ap; char xdata string[50]; va_start(ap,fmt); vsprintf(string,fmt,ap);//此处也可以使用sprintf函数,用法差不多,稍加修改即可,此处略去 UART1_SendString(string); va_end(ap); } void main(void) { Uart1Init(); printf("Hello World\r\n"); printf("Hello %s\r\n","WillemObama"); printf("This num is %d\r\n",(int)123); **//(int)此处必须强制转换,单片机会默认该类型为char类型。** while(1) { } }
打开串口把波特率调成115200bps,可以看到串口打印如下信息:
Hello World Hello WillemObama This num is 123
相关文章推荐
- 自己实现一个printf函数
- 六(2).自己动手生产一个getElementsByClass()函数
- 自己动手写 printf函数
- 王爽《汇编语言》探究实验五——自己实现一个printf函数
- 自己动手写一个业务实体生成器(1)
- 自己动手编写一个ajax extender
- 一个控制台输出彩色字符的printf,还有些改颜色的函数
- 自己动手定制NUnit(一):增加函数说明显示
- 自己写的一个用函数实现的日历
- [收集]自己编写一个SQL Server中用的lastindexof函数
- 金额转大写的函数 (网上找到的几个有Bug 只好自己写了一个)
- C#自己编写的一个函数 可以删除字符串中指定开头和结尾中间的字符串
- 自己动手,结合javascript和dhtml做一个ubb编辑器
- 实现自己的不定参数函数(类似printf)
- 自己写的一个函数:根据月分打印月历【SQL版】
- 自己编写的一个画圆的小函数
- 看了网上的大多防SQL攻击程序,自己编写了一个函数,比较完美。大家一起测测~
- Life is a Do-it-yourself Project 生活是一个自己动手的项目
- 自己动手,丰衣足食——一个简单却高效的图像旋转算法
- 自己动手写一个业务实体生成器(2)