完善以下代码 #define MAX_LINE 10 // 显示缓存最大行数 #define LINE_LEN 80 // 每行最大字符数 #define MAX_Back_LINE 20 // 备份缓存最大行数 #define LINE_Back_LEN 80 // 每行最大字符数 char display_buf[MAX_LINE][LINE_LEN + 1] = {0}; // 显示缓存 char BackStor_buf[MAX_Back_LINE][LINE_Back_LEN + 1]; // 备份缓存 uint8_t current_line = 0; // 当前行数 uint8_t current_pos = 0; // 当前字符数 uint8_t fact_line = 0; // 当前真实行数,即已经添加到缓存中的行数 uint8_t Page_logo = 0; // 当前页面 uint8_t Page_line = 0; // 备份行数 uint8_t MAX_Page = 0; // 最大页数//上一页 void Previous_page(void) { Page_selection(Page_logo); //循环执行 if(Page_logo==0) Page_logo=MAX_Page; Page_logo--; } // 下一页 void Next_page(void) { Page_selection(Page_logo); if(Page_logo==MAX_Page) Page_logo=0; Page_logo++; } //页面选择(将某页数据显示出来) void Page_selection(uint8_t data) { //将要显示的数据转存到显示区 for(int i =0;i<MAX_LINE;i++){ strcpy(display_buf[i], BackStor_buf[data*MAX_LINE+i]); } }
时间: 2024-02-06 08:02:36 浏览: 77
【C/C++】#ifndef,#define用法
这段代码是关于缓存和页面选择的,但是缺少了某些函数的实现,比如备份数据的函数和页数的计算等。同时,需要注意一些细节问题。
以下是完善后的代码:
```c
#define MAX_LINE 10 // 显示缓存最大行数
#define LINE_LEN 80 // 每行最大字符数
#define MAX_Back_LINE 20 // 备份缓存最大行数
#define LINE_Back_LEN 80 // 每行最大字符数
char display_buf[MAX_LINE][LINE_LEN + 1] = {0}; // 显示缓存
char BackStor_buf[MAX_Back_LINE][LINE_Back_LEN + 1]; // 备份缓存
uint8_t current_line = 0; // 当前行数
uint8_t current_pos = 0; // 当前字符数
uint8_t fact_line = 0; // 当前真实行数,即已经添加到缓存中的行数
uint8_t Page_logo = 0; // 当前页面
uint8_t Page_line = 0; // 备份行数
uint8_t MAX_Page = 0; // 最大页数
// 备份数据
void Backup_data(char* data)
{
if(fact_line < MAX_Back_LINE)
{
strcpy(BackStor_buf[fact_line], data);
fact_line++;
}
else
{
// 缓存已满,舍弃最旧的数据,将新数据添加到最后
for(int i = 1; i < MAX_Back_LINE; i++)
{
strcpy(BackStor_buf[i - 1], BackStor_buf[i]);
}
strcpy(BackStor_buf[MAX_Back_LINE - 1], data);
}
}
// 计算页数
void Calculate_page(void)
{
MAX_Page = fact_line / MAX_LINE;
if(fact_line % MAX_LINE != 0)
{
MAX_Page++;
}
}
// 上一页
void Previous_page(void)
{
Page_selection(Page_logo);
if(Page_logo == 0)
{
Page_logo = MAX_Page - 1;
}
else
{
Page_logo--;
}
}
// 下一页
void Next_page(void)
{
Page_selection(Page_logo);
if(Page_logo == MAX_Page - 1)
{
Page_logo = 0;
}
else
{
Page_logo++;
}
}
// 页面选择(将某页数据显示出来)
void Page_selection(uint8_t data)
{
// 将要显示的数据转存到显示区
for(int i = 0; i < MAX_LINE; i++)
{
int index = data * MAX_LINE + i;
if(index < fact_line)
{
strcpy(display_buf[i], BackStor_buf[index]);
}
else
{
strcpy(display_buf[i], "");
}
}
}
```
这个代码实现了备份数据和计算页数的函数,同时对页数计算时的取整做了优化,以避免最后一页没有满行时也占据一页的情况。上一页和下一页的实现也做了一些修改,以保证循环选择页数的正确性。在页面选择时,要注意只将实际存在的数据拷贝到显示缓存中,未使用的行要置为空字符串。
阅读全文