标题:
Printf重定向到LCD的两种方法
[打印本页]
作者:
yuyang911220
时间:
2016-9-19 11:22
标题:
Printf重定向到LCD的两种方法
根据原子的程序修改。
使用都需要包含头文件
#include <stdio.h>
#include <stdarg.h>
方法1:
不支持坐标输入,起始默认坐标为0,0,类似于串口助手. 但满屏后自动清屏,从坐标(0,0)开始。
函数定义如下
//重定义fputc函数
int fputc(int ch, FILE *f)
{
static uint16_t x = 0, y = 0;
if(ch == '\n') //换行
{
x = 0;
y += 16;
return ch;
}
if(x > LCD_W - 8) //LCD_W是宏定义, 该值为240
{
x = 0; //x置零
y += 16; //y移至下一行
}
if(y > LCD_H - 16) //LCD_H是宏定义, 该值是320
{
y=0;
LCD_Clear(
BLUE
); //直接清屏 重头开始
}
LCD_ShowChar(x, y, ch,16, 1); //打印字符ch
x += 8; //跳转到下一个位置, 是否越界有上面函数判断
return ch;
}
使用示例:
int main()
{
.........//此处省略一万字
LCD_Init();
POINT_COLOR=
YELLOW
; //默认设置一种画笔色
LCD_Clear(
BLUE
);//默认设置一个清屏颜色 与上面蓝色处一致
while(1)
{
printf("printf:cnt=%d\nEnter\n",cnt);
}
}
输出如下:
printf:cnt=1
Enter
方法2:
支持坐标自定义,定义如下
void LCD_printf(u16 x,u16 y,const char *format, ...)
{
char tmp[25];
va_list arg;
va_start(arg, format);
vsprintf(tmp,format,arg);
va_end(arg);
LCD_ShowString(x,y,(const u8*)tmp);
}
修改
原子程序的LCD_ShowString为:
void LCD_ShowString(u16 x,u16 y,const u8 *p)
{
u16 x1;
x1=x;
while(*p!='\0')
{
if(x>MAX_CHAR_POSX){x=x1;}
if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}
if(*p=='\n')
{
y+=16;
x=x1;
}
else
{
LCD_ShowChar(x,y,*p,16,0);
x+=8;
}
p++;
}
}
使用示例:
int main()
{
.........//此处省略一万字
LCD_Init();
POINT_COLOR=
YELLOW
; //默认设置一种画笔色
LCD_Clear(
BLUE
);//默认设置一个清屏颜色 与上面蓝色处一致
while(1)
{
printf("LCD_printf:cnt=%d\nEnter\n",cnt);
}
}
输出如下:
LCD_printf:cnt=1
Enter
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0