学习目标
将自己所需求的功能函数定义为新的函数
学习概要
1、熟练掌握基础的12864屏幕显示功能
2、根据自己的需求结合已有功能创建自己的函数
3、验证自己的函数
学习内容
1、熟练掌握基础显示(略写)
针对每一个函数,理解熟悉每个函数的输入输出及所表达的功能,能够针对不同的要求进行小范围的修改,对于需要大修改的可以重新编写程序。
void Set_Page_Address(uchar page_addr);//到某一页
void Set_Column_Address(uchar clm_addr);//到某一列
void GotoXY(uchar Paddr, uchar Caddr);到某一行某一列
void Write_Data(uint com,uchar page,uchar clum);//向某一行某一列写入数据
void LCD_Clear(void);//清屏
void Disp_Graphics(const uchar *gph);//写入一幅图片128*64
void LED_Square_Frame(void);//写入一个矩形边框
void Disp_Ascii1608(const uchar *ptrAscii, uchar startP, uchar startC);//向某一行某一列写入一个16*8的数据
void Disp_Ascii0508(const uchar *ptrAscii, uchar startP, uchar startC);//向某一行某一列写入一个8*5的数据
void Display_Hanzi(const uchar *p,uchar startP, uchar startC);//向某一行某一列写入一个16*16的数据
void Display_Hanzi_Fan(const uchar *p,uchar startP, uchar startC);//反向数据
void Lcm_Init(void);//屏幕初始化
2、自己的所需要求
分析自己每个要求,分别调用上述的函数进行功能实现,可以适当的进行修改,特定的要求可以编写特定的程序,做好每个要求的界面,能够逐一显示各个界面。
//屏幕显示数据优先级分9级【9级最高,1级最低】
//报警时显示报警信息(9级)
//气瓶压力突变(8级)
//电池亏电(6级)
//压力在正常范围内(5级)
//显示屏正常时,显示温度+湿度+电压(1级)
//手动查询数据显示
//系统无操作,显示屏30秒休眠
3、针对每个界面进行编写实现
3.1 显示报警信息
1)运用示例代码和生成想要输出的字符代码
这个界面需要有提示,所以功能为:展示为界面不停地闪烁;提示的界面展现在屏幕的中间;显示“警告!!!”+“方框”以达到提示的作用。方框实现代码和警告字符的代码:
/*****************************************************
Function: Display a Square Frame
Input : Starting Point(startP,startC),(length,width):(sizeX,sizeY)
******************************************************/
void LED_Square_Frame(uchar startP, uchar startC, uchar sizeX, uchar sizeY)
{
uchar i, j, x, y;
GotoXY(startP, startC);
x = sizeX;
y = sizeY;
for (i = startP; i < (x + startP); i++)
{
for (j = startC; j < (y + startC); j++)
{
if ((j == startC) || (j == (startC + y-1)))
{
GotoXY(i, j);
Send_Data(0xff);
}
if ((i == startP) && (j > startC) && (j < (startC + y-1)))
{
GotoXY(i, j);
Send_Data(0x01);
}
if ((i == (startP + x-1)) && (j > startC) && (j < (startC + y-1)))
{
GotoXY(i, j);
Send_Data(0x80);
}
}
}
}
int main()
{
LED_Square_Frame(2, 24, 3, 80);
Display_Hanzi(bitsssss[0],2,24);
Display_Hanzi(bitsssss[1],2,40);
Display_Hanzi(bitsssss[2],2,56);
Display_Hanzi(bitsssss[3],2,72);
Display_Hanzi(bitsssss[4],2,88);
}
2) 显示结果(失败)
3) 修改程序
跟想要的功能不同,对程序进行修改。
原因:显示方框和显示汉字冲突,不能同时显示
尝试方案:在显示汉字的外面一层显示方框(投机取巧)
/*****************************************************
Function: Display a Square Frame
******************************************************/
void LED_Square_Frame(uchar startP, uchar startC, uchar sizeX, uchar sizeY)
{
uchar i, j, x, y;
GotoXY(startP, startC);
x = sizeX;
y = sizeY;
for (i = startP; i < (x + startP); i++)
{
for (j = startC; j < (y + startC); j++)
{
if (((j == startC) || (j == (startC + y - 1))) && (i != startP) && (i != (startP + x - 1)))
{
GotoXY(i, j);
Send_Data(0xff);
}
if ((i == startP) && (j > startC) && (j < (startC + y - 1)))
{
GotoXY(i, j);
Send_Data(0x80);
}
if ((i == (startP + x - 1)) && (j > startC) && (j < (startC + y - 1)))
{
GotoXY(i, j);
Send_Data(0x01);
}
}
}
}
4) 显示结果(成功)
3.2 正常显示界面
1) 第一行显示:XXX远程监控系统
第二行显示:温度:
第三行显示:湿度:
第四行显示:压力:
尝试方案:使用显示汉字Display_Hanzi();
/*****************************************************
Function:Display 16x16 lattices of Chinese
******************************************************/
void Display_Hanzi(const uchar *p, uchar startP, uchar startC)
{
uchar i, j;
for (i = 0; i < 2; i++)
{
GotoXY(startP + i, startC);
for (j = 0; j < 16; j++)
{
Send_Data(*p++);
}
}
}
/*****************************************************
Function:Display on normal time
******************************************************/
void Normal_Display(void)
{
uchar i;
for( i = 0;i <8;i++)
{Display_Hanzi(Normal_Display[i],0,i*16);}
for( i = 0;i <3;i++)
{Display_Hanzi(Normal_Display[i+8],2,i*16);}
for( i = 0;i <3;i++)
{Display_Hanzi(Normal_Display[i+11],4,i*16);}
for( i = 0;i <3;i++)
{Display_Hanzi(Normal_Display[i+14],6,i*16);}
}
int32_t main(void)
{
Lcm_Init();
LCD_Clear();
Normal_Display();
while(1)
{}
}
2) 显示结果
3.3 其他类似(略)
直接上代码上图
/*****************************************************
Function:Display pressure mutation
******************************************************/
void Pressure_Mutation(void)
{
Display_Hanzi(pressure_mutation[0],2,32);
Display_Hanzi(pressure_mutation[1],2,48);
Display_Hanzi(pressure_mutation[2],2,64);
Display_Hanzi(pressure_mutation[3],2,80);
LED_Square_Frame(1, 24, 4, 80);
}
附:图片代码下载链接:https://www.aliyundrive.com/s/dVaLXS3ynPt