51单片机自己动手写一个printf函数
来源:互联网 发布:天下霸唱抄袭 知乎 编辑:程序博客网 时间:2024/05/20 12:20
今天就简单来说说怎么在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 WorldHello WillemObamaThis num is 123
- 51单片机自己动手写一个printf函数
- 自己动手写 printf函数
- 自己动手写 printf函数
- 自己动手写 printf函数
- 自己动手写printf
- 自己动手写printf -- 库函数printf的实现
- 51单片机实现scanf和printf函数
- 51单片机实现scanf和printf函数
- 关于单片机printf函数
- 自己动手写一个Makefile
- 自己动手写一个栈
- 自己动手写一个WIDGET
- 自己动手写一个Struts2
- 自己动手写一个Struts2
- 自己动手写一个Camera
- 自己动手写一个“tomcat”
- 自己动手写一个Camera
- 自己动手写strcat函数
- elixir spwan以及spawn_link(:trap_exit)
- Android APK 瘦身实践(减小apk的大小)
- 组函数
- 串口termios函数
- POJ 2322 PLANKS 笔记
- 51单片机自己动手写一个printf函数
- 深入hibernate的三种状态
- CTypePtrList<BASE_CLASS, TYPE>的结构应用说明
- ChatScript java调用接口封装
- 玲珑杯 1137
- DraggableView
- Android 多层fragment 嵌套时,viewPager不显示的问题
- 互联网的十大圈子
- Java条形码生成技术-barcode4j-light-2.1.jar