二、自己需求函数的模块化

本文档介绍了如何熟练掌握12864液晶显示屏的基础显示功能,并通过编写自定义函数来实现特定的显示需求,如报警信息提示、正常状态显示和其他应用场景。作者通过实例详细展示了如何创建和修改函数,以达到闪烁警告框和显示汉字等效果,并提供了正常显示界面的代码示例。
摘要由CSDN通过智能技术生成

学习目标

将自己所需求的功能函数定义为新的函数

学习概要

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值