|
楼主 |
发表于 2008-10-7 16:01:13
|
显示全部楼层
在240128.c文件里有int LCD_putc函数的定义,只需要在初始化时调用一下
fdevopen(LCD_putc,PS2GetChar,0);
就可以把printf的每个字符的输出指向LCD_putc函数了。
int LCD_putc(unsigned char c)//标准输出流
{
char hz_tmp[2];
unsigned int i;
if((c> 0x80) && (! HzFlag))
{
HzFlag = c;//暂存汉字码高字节
if (Global.X == Global.EndX)
{
Global.X = Global.StartX;
if (Global.Y < Global.EndY)
{
Global.Y ++;
}
else
{
Global.Y = Global.StartY;
}
}
}
else if(HzFlag)
{
hz_tmp[0] = HzFlag;
hz_tmp[1] = c;
HzFlag = 0x00;
LCD_Write_Int(Global.X,Global.Y,hz_tmp);
if (Global.X < Global.EndX - 1)
{
Global.X += 2;
}
else
{
Global.X = Global.StartX;
if (Global.Y < Global.EndY)
{
Global.Y ++;
}
else
{
Global.Y = Global.StartY;
}
}
}
else
{
HzFlag = 0x00;
switch(c)
{
case '\n'://换行
{
if (Global.Y < Global.EndY)
{
Global.Y ++;
}
else
{
Global.Y = Global.StartY;
}
for(Global.X = Global.StartX;Global.X <= Global.EndX;Global.X ++)
{
LCD_Write_Char(Global.X,Global.Y,' ');
}
Global.X = Global.StartX;
break;
}
case '\f'://翻页
{
/* if (Global.Y < Global.EndY)
{
Global.Y ++;
}
else
{
Global.Y = Global.StartY;
}
for(Global.Y = Global.StartY;Global.Y <= Global.EndY;Global.Y ++)
{
for(Global.X = Global.StartX;Global.X <= Global.EndX;Global.X ++)
{
LCD_Write_Char(Global.X,Global.Y,' ');
}
}*/
glcd_clear_text();
glcd_set_address(glcd_G_BASE +(Global.StartY << 4) * 30 + Global.StartX);
glcd_cput(0xB0);//自动写模式
for(i = 0;i <((Global.EndY + 1) << 4) * 30;i ++)
{
glcd_dput(0x00);
}
glcd_cput(0xB2);
Global.X = Global.StartX;
Global.Y = Global.StartY;
break;
}
case '\x18'://上移一格
{
if (Global.Y> Global.StartY)
{
Global.Y --;
}
else
{
Global.Y = Global.EndY;
}
break;
}
case '\x19'://下移一格
{
if (Global.Y < Global.EndY)
{
Global.Y ++;
}
else
{
Global.Y = Global.StartY;
}
break;
}
case '\x1a'://右移一格
{
if (Global.X < Global.EndX)
{
Global.X ++;
}
else
{
Global.X = Global.StartX;
if (Global.Y < Global.EndY)
{
Global.Y ++;
}
else
{
Global.Y = Global.StartY;
}
}
break;
}
case '\x1b'://左移一格
{
if (Global.X> Global.StartX)
{
Global.X --;
}
else
{
Global.X = Global.EndX;
if (Global.Y> Global.StartY)
{
Global.Y --;
}
else
{
Global.Y = Global.EndY;
}
}
break;
}
case '\r'://反色显示
{
ReversMark = ReversMark ^ 0xff;
break;
}
case '\b'://退格
{
if (Global.X> Global.StartX)
{
Global.X --;
}
else
{
Global.X = Global.EndX;
if (Global.Y> Global.StartY)
{
Global.Y --;
}
else
{
Global.Y = Global.EndY;
}
}
LCD_Write_Char(Global.X,Global.Y,' ');
break;
}
default :
{
if ((c>= 32)&&(c <= 127))
{
LCD_Write_Char(Global.X,Global.Y,c);
if (Global.X < Global.EndX)
{
Global.X ++;
}
else
{
Global.X = Global.StartX;
if (Global.Y < Global.EndY)
{
Global.Y ++;
}
else
{
Global.Y = Global.StartY;
}
}
}
break;
}
}
}
// LCD_Write_Char(Global.X,Global.Y,' ');
// LCD_Write_Char(Global.X,Global.Y,'<');
return 0;
} |
|