很有用的一篇單片機方面的文章,希望幫助到大家
今日無事,曬一下利用printf(“ ”,……);函數(shù)輸出顯示的步驟。 前一段時間,應項目要求,底層程序里面需要編寫printf函數(shù)來實現(xiàn)液晶屏幕的輸出打印功能,糾結(jié)了大概一周時間,終于搞定!呵呵~~~~ 實現(xiàn)方法有兩種 1、 包含頭文件,其中的具體原因我也不明白,只是知其然不知其所以然 部分源碼
55.png (29.73 KB, 下載次數(shù): 30)
下載附件
2018-6-7 02:26 上傳
當然,有了這些代碼是還不夠的,需要包含 #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ū)動,不截圖了 ,直接代碼吧,因為一個屏幕截圖不完全。 - 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
- }
復制代碼 這些代碼我是參考的另外一個項目里面的,添加此段代碼之后, 就可以作為顯示的輸出函數(shù)了。以上兩種方法,更改輸出函數(shù)就可以在1602 12864 TFT2.8 3.5什么的都可以顯示。 好了,就寫這么多吧,這里面的好多代碼我根本不知道什么作用,只是搬過來,可以用了,就沒有理會他們,哪位同學有什么好的方法,來找我交流吧。
全部資料51hei下載地址:
printf液晶顯示.doc
(38.5 KB, 下載次數(shù): 34)
2018-6-6 17:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|