/*屏幕向上翻一行,等同于屏幕向下移动一行*/
static void screen_up(void)
{
int i;
unsigned char *src;
unsigned char *dest;
unsigned int len;
/*是否需要整个屏幕向上翻一行*/
if ( g_screen_top == 0 && g_screen_bottom == DISP_MAX_Y ) {
//刷新屏幕在显存中位置
g_screen_origin += BYTES_FOR_ONE_LINE;
g_screen_end += BYTES_FOR_ONE_LINE;
/*刷新光标位置为换行*/
g_position += BYTES_FOR_ONE_LINE;
if( g_screen_end > DISP_END_ADDR ) {/*如果屏幕在显存中位置超出了显存本身的范围*/
/*将屏幕内容刷新到DISP_BASE_ADDR处*/
src = (unsigned char *)g_screen_origin;
dest = (unsigned char *)DISP_BASE_ADDR;
len = (g_screen_end - g_screen_origin);
for(i = 0; i < len; i++) {
dest[i] = src[i];
}
/*刷新光标位置和屏幕起始和结束地址*/
g_screen_end = DISP_BASE_ADDR + len;
g_position = DISP_BASE_ADDR + (g_position - g_screen_origin);
g_screen_origin = DISP_BASE_ADDR;
}
else {
}
set_screen_origin(1);
}
else { /*不支持*/
}
}
/*屏幕向下翻一行*/
static void screen_down(void)
{
}
static void add_a_line(void)
{
/*如果不是最底下的一行*/
if( g_y + 1 < DISP_MAX_Y ) {
g_y++;
g_position += BYTES_FOR_ONE_LINE;
return;
}
/*否则就要刷新整个屏幕的数据*/
screen_up();
}
//用空格字符填充被删除的字符
static void delete_char(void)
{
if( g_x > 0 ) {
g_position -= 2;
g_x--;
*(unsigned short *)g_position = ((DISP_FG_WHITE + DISP_BG_BLACK) << 8 )|(0x20);//0x20是空格字符
}
return;
}
我的学习之旅(19)console.h和console.c
最新推荐文章于 2021-05-09 07:18:34 发布