找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4503|回復: 1
打印 上一主題 下一主題
收起左側(cè)

單片機printf函數(shù)液晶顯示方法與步驟

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:346320 發(fā)表于 2018-6-6 17:53 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
很有用的一篇單片機方面的文章,希望幫助到大家
今日無事,曬一下利用printf(“  ”,……);函數(shù)輸出顯示的步驟。
前一段時間,應項目要求,底層程序里面需要編寫printf函數(shù)來實現(xiàn)液晶屏幕的輸出打印功能,糾結(jié)了大概一周時間,終于搞定!呵呵~~~~
實現(xiàn)方法有兩種
1、 包含頭文件,其中的具體原因我也不明白,只是知其然不知其所以然
部分源碼

當然,有了這些代碼是還不夠的,需要包含
#include<stdio.h>
#include<string.h>
#include<stdarg.h>
#include"math.h"
這些文件,好像也不是需要全部,只是這幾個我是全部包含了。趕時間啊那幾天。
有了這些,在主程序中就可以調(diào)用printf函數(shù)來在屏幕中顯示了。當然,你也可以更該
Int fput()函數(shù)里面的LCD_Show函數(shù)為串口輸出,這樣就可以利用printf函數(shù)來作為串口電腦屏幕打印了。
2、 另外一種顯示方式,我認為是重寫了printf函數(shù)的底層驅(qū)動,不截圖了 ,直接代碼吧,因為一個屏幕截圖不完全。
  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. }
復制代碼
這些代碼我是參考的另外一個項目里面的,添加此段代碼之后, 就可以作為顯示的輸出函數(shù)了。
以上兩種方法,更改輸出函數(shù)就可以在1602   12864  TFT2.8 3.5什么的都可以顯示。
好了,就寫這么多吧,這里面的好多代碼我根本不知道什么作用,只是搬過來,可以用了,就沒有理會他們,哪位同學有什么好的方法,來找我交流吧。

全部資料51hei下載地址:
printf液晶顯示.doc (38.5 KB, 下載次數(shù): 34)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:341045 發(fā)表于 2018-6-7 10:43 | 只看該作者
參考下, 謝謝分享.
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表