[学习资料] 单片机printf函数液晶显示方法与步骤

[复制链接]
1772|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函数的底层驱动,不截图了 ,直接代码吧,因为一个屏幕截图不完全。
  1. int Printf(const char *fmt, ...)
  2. {
  3.     const char *s;
  4.         u8 *Buf;
  5.     u16 d;
  6.         float f;
  7.     u8 tbuf[16];
  8.         u8 i=0;
  9.     va_list ap;
  10.     va_start(ap, fmt);
  11.         Buf=ShowBuf;
  12.     while (*fmt)
  13.         {
  14.                 for(i=0; i<sizeof(tbuf); i++)
  15.                 tbuf[i]=0;
  16.         if (*fmt != '%')
  17.                 {
  18.             *Buf++=*fmt++;
  19.             continue;
  20.         }
  21.         switch (*++fmt) {
  22.                         //字符串
  23.             case 's':
  24.                 s = va_arg(ap, const char *);
  25.                                 if (s == NULL) {break;}
  26.                 for ( ; *s; s++) {
  27.                     *Buf++=*s;
  28.                 }
  29.                 break;
  30.                         //十进制
  31.             case 'd':
  32.                 d = va_arg(ap, int);
  33.                 sprintf(tbuf, "%d",d);
  34.                 for (i=0; tbuf[i]!='\0';i++) {
  35.                     *Buf++=tbuf[i];
  36.                 }
  37.                 break;

  38.                    //十六进制
  39.            case 'x':
  40.                 d = va_arg(ap, int);
  41.                 sprintf(tbuf, "%x",d);
  42.                 for (i=0; tbuf[i]!='\0';i++) {
  43.                     *Buf++=tbuf[i];
  44.                 }
  45.                 break;
  46.            case 'f':
  47.                 f = va_arg(ap, double);
  48.                 sprintf(tbuf, "%f",f);
  49.                 for (i=0; tbuf[i]!='\0';i++) {
  50.                     *Buf++=tbuf[i];
  51.                 }
  52.                 break;
  53.             // Add other specifiers here...              
  54.             default:  
  55.                 *Buf++=*fmt++;
  56.                 break;
  57.         }
  58.         fmt++;
  59.     }
  60.         *Buf='\0';
  61.     va_end(ap);
  62.          LCD_Show_c_String(ShowBuf);
  63.     return 1;   // Dummy return value
  64. }


wangshujun 发表于 2023-5-15 10:13 | 显示全部楼层
支持用第一种方法实现
tpgf 发表于 2023-6-3 14:18 | 显示全部楼层
显示的位置和比例可以灵活设置吗
qcliu 发表于 2023-6-3 14:44 | 显示全部楼层
tpgf 发表于 2023-6-3 14:18
显示的位置和比例可以灵活设置吗

楼上的额意思是不是说可不可以自适应呢
drer 发表于 2023-6-3 15:19 | 显示全部楼层
如果更改了printf函数的底层驱动,对于上层代码来说没有任何影响吗
coshi 发表于 2023-6-3 15:38 | 显示全部楼层
drer 发表于 2023-6-3 15:19
如果更改了printf函数的底层驱动,对于上层代码来说没有任何影响吗

这个可说不好 估计得详细对比一下函数体的说明了
kxsi 发表于 2023-6-3 16:11 | 显示全部楼层
在什么情况下我们需要修改printf函数的底层驱动呢
wiba 发表于 2023-6-3 16:33 | 显示全部楼层
我们使用LCD_Show函数的时候必须要规定显示的坐标吗
caigang13 发表于 2023-6-3 16:49 来自手机 | 显示全部楼层
把printf函数中写接口换成写LCD
chenjun89 发表于 2023-6-10 22:42 来自手机 | 显示全部楼层
把液晶显示写函数封装成printf函数?
chenqianqian 发表于 2023-6-11 15:32 来自手机 | 显示全部楼层
重定义函数就行了
HXM1593 发表于 2023-6-14 16:38 | 显示全部楼层
能搞个工程上来。好实验下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

1534

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部