打印
[学习资料]

单片机printf函数液晶显示方法与步骤

[复制链接]
1106|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juliestephen|  楼主 | 2023-5-15 07:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
部分源码

当然,有了这些代码是还不够的,需要包含
#include<stdio.h>
#include<string.h>
#include<stdarg.h>
#include"math.h"
这些文件,好像也不是需要全部,只是这几个我是全部包含了。赶时间啊那几天。
有了这些,在主程序中就可以调用printf函数来在屏幕中显示了。当然,你也可以更该
Int fput()函数里面的LCD_Show函数为串口输出,这样就可以利用printf函数来作为串口电脑屏幕打印了。
2、 另外一种显示方式,我认为是重写了printf函数的底层驱动,不截图了 ,直接代码吧,因为一个屏幕截图不完全。
int Printf(const char *fmt, ...)
{
    const char *s;
        u8 *Buf;
    u16 d;
        float f;
    u8 tbuf[16];
        u8 i=0;
    va_list ap;
    va_start(ap, fmt);
        Buf=ShowBuf;
    while (*fmt)
        {
                for(i=0; i<sizeof(tbuf); i++)
                tbuf[i]=0;
        if (*fmt != '%')
                {
            *Buf++=*fmt++;
            continue;
        }
        switch (*++fmt) {
                        //字符串
            case 's':
                s = va_arg(ap, const char *);
                                if (s == NULL) {break;}
                for ( ; *s; s++) {
                    *Buf++=*s;
                }
                break;
                        //十进制
            case 'd':
                d = va_arg(ap, int);
                sprintf(tbuf, "%d",d);
                for (i=0; tbuf[i]!='\0';i++) {
                    *Buf++=tbuf[i];
                }
                break;

                   //十六进制
           case 'x':
                d = va_arg(ap, int);
                sprintf(tbuf, "%x",d);
                for (i=0; tbuf[i]!='\0';i++) {
                    *Buf++=tbuf[i];
                }
                break;
           case 'f':
                f = va_arg(ap, double);
                sprintf(tbuf, "%f",f);
                for (i=0; tbuf[i]!='\0';i++) {
                    *Buf++=tbuf[i];
                }
                break;
            // Add other specifiers here...              
            default:  
                *Buf++=*fmt++;
                break;
        }
        fmt++;
    }
        *Buf='\0';
    va_end(ap);
         LCD_Show_c_String(ShowBuf);
    return 1;   // Dummy return value
}


使用特权

评论回复
沙发
wangshujun| | 2023-5-15 10:13 | 只看该作者
支持用第一种方法实现

使用特权

评论回复
板凳
tpgf| | 2023-6-3 14:18 | 只看该作者
显示的位置和比例可以灵活设置吗

使用特权

评论回复
地板
qcliu| | 2023-6-3 14:44 | 只看该作者
tpgf 发表于 2023-6-3 14:18
显示的位置和比例可以灵活设置吗

楼上的额意思是不是说可不可以自适应呢

使用特权

评论回复
5
drer| | 2023-6-3 15:19 | 只看该作者
如果更改了printf函数的底层驱动,对于上层代码来说没有任何影响吗

使用特权

评论回复
6
coshi| | 2023-6-3 15:38 | 只看该作者
drer 发表于 2023-6-3 15:19
如果更改了printf函数的底层驱动,对于上层代码来说没有任何影响吗

这个可说不好 估计得详细对比一下函数体的说明了

使用特权

评论回复
7
kxsi| | 2023-6-3 16:11 | 只看该作者
在什么情况下我们需要修改printf函数的底层驱动呢

使用特权

评论回复
8
wiba| | 2023-6-3 16:33 | 只看该作者
我们使用LCD_Show函数的时候必须要规定显示的坐标吗

使用特权

评论回复
9
caigang13| | 2023-6-3 16:49 | 只看该作者
把printf函数中写接口换成写LCD

使用特权

评论回复
10
chenjun89| | 2023-6-10 22:42 | 只看该作者
把液晶显示写函数封装成printf函数?

使用特权

评论回复
11
chenqianqian| | 2023-6-11 15:32 | 只看该作者
重定义函数就行了

使用特权

评论回复
12
HXM1593| | 2023-6-14 16:38 | 只看该作者
能搞个工程上来。好实验下

使用特权

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

本版积分规则

32

主题

1262

帖子

2

粉丝