打印
[GUI]

LCD屏幕上实现 printf 打印函数

[复制链接]
226|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51xlf|  楼主 | 2022-12-6 22:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//在x,y处显示字符串
//size = 字体大小。
//str = 格式:类似于printf中的格式
//... 就是printf最后面的参数,可以是很多
void LCD_Printf(u16 x, u16 y, u8 size, char *str, ...)
{
u16 tempx = x;
va_list pArgs; //处理后面的三个点
char *p;
p = mymalloc(SRAMIN,6*32); //申请内存,p存放申请后的首地址

va_start(pArgs, str);
vsnprintf(p,6*32,str,pArgs); //格式化成字符串,处理 ... 多参数,一定要用v printf
va_end(pArgs);

while(x <= lcddev.width) //清除显示区域
{
LCD_ShowChar(x,y,' ',size,0);
x = x + size/2;
}

x = tempx;
while(x <= lcddev.width && (*p) != 0) //显示格式化后的字符串
{
LCD_ShowChar(x,y,*p,size,1);
x = x + size/2;
p++;
}

myfree(SRAMIN,p); //释放申请的内存,不释放会造成内存泄漏,要避免
}


使用特权

评论回复
沙发
51xlf|  楼主 | 2022-12-6 22:53 | 只看该作者
#include "stdio.h"
#include "string.h"
#include "stdarg.h"
#define CMD_BUFFER_LEN 200
void lcdprintf (u16 x,u16 y,char *fmt, ...)
{
    char buffer[CMD_BUFFER_LEN+1]; // CMD_BUFFER_LEN自己定义
    u8 i = 0;
    va_list arg_ptr;
    va_start(arg_ptr, fmt);
    vsnprintf(buffer, CMD_BUFFER_LEN+1, fmt,arg_ptr);
    while ((i < CMD_BUFFER_LEN) && buffer[i])
    {
        LCD_ShowChar(x+=8,y,buffer[i++],16,0);   
    }
    va_end(arg_ptr);
}


使用特权

评论回复
板凳
MessageRing| | 2022-12-7 16:10 | 只看该作者
这个可不可以用keil提供的微库?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

534

主题

9344

帖子

19

粉丝