根据原子的程序修改。
使用都需要包含头文件
#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 == '
') //换行
{
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; //默认设置一种画笔 {MOD}
LCD_Clear(BLUE);//默认设置一个清屏颜 {MOD} 与上面蓝 {MOD}处一致
while(1)
{
printf("printf:cnt=%d
Enter
",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!=' ')
{
if(x>MAX_CHAR_POSX){x=x1;}
if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}
if(*p=='
')
{
y+=16;
x=x1;
}
else
{
LCD_ShowChar(x,y,*p,16,0);
x+=8;
}
p++;
}
}
使用示例:
int main()
{
.........//此处省略一万字
LCD_Init();
POINT_COLOR=YELLOW; //默认设置一种画笔 {MOD}
LCD_Clear(BLUE);//默认设置一个清屏颜 {MOD} 与上面蓝 {MOD}处一致
while(1)
{
printf("LCD_printf:cnt=%d
Enter
",cnt);
}
}
输出如下:
LCD_printf:cnt=1
Enter
总结:
根据自己的需要添加汉字支持,只需要判断一下即可
在while(*p!=0)下面判断
if(*p<0x80)
{
...此处省略一万字
}
else
{
...此处省略一万字
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>