⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ocm12864.c

📁 LCD显示 在液晶屏上显示文字 51单片机应用
💻 C
📖 第 1 页 / 共 2 页
字号:
			pScr_Row++;
		}
	}
}

/*****************************/
/*函数原型:Clear_Dis(unsigned char ucCurRow,unsigned char y)
/*参数:ucCurRow,y
/*功能:清区
/*说明:ucCurRow为1,2,3,4时分别表示为第1,2,3,4行;y为液晶显示的列值
/*****************************/
void Clear_Dis(unsigned char ucCurRow,unsigned char y) 	           
{
	unsigned char i,x = 0;		       
	switch(ucCurRow)
	{
	case 1:
		x = 0;
		break;
	case 2:
		x = 1;
		break;
	case 3:
		x = 2;
		break;
	case 4:
		x = 3;
		break;
	default:
		return ;
	}

	WDTRST = 0x1E;	//启动看门狗
	WDTRST = 0xE1;	

	set_adr(2*x,y);				//设置页地址
	for(i = 0;i < 64 - y;i ++)
		wdata(0,cs1,cs2);

	WDTRST = 0x1E;	//启动看门狗
	WDTRST = 0xE1;	

	set_adr(2*x + 1,y);				//设置页地址
	for(i = 0;i < 64 - y;i ++)
		wdata(0,cs1,cs2);
}

/*****************************/
/*函数原型:Show_Scr(unsigned char ucCurScr,unsigned char ucCurRow,unsigned char ucSelect,unsigned char * pScr_Row)
/*参数:ucCurScr,ucCurRow,ucSelect,* pScr_Row
/*功能:显示屏信息
/*说明:ucCurScr为屏显号;ucCurRow为1,2,3,4时分别表示为第1,2,3,4行;
/*      ucSelect为0时为正选,反之则为反显;* pScr_Row指向字模显示的内容
/*****************************/
void Show_Scr(unsigned char ucCurScr,unsigned char ucCurRow,unsigned char ucSelect,unsigned char * pScr_Row)
{
	unsigned char str[15] = {""},i = 0,*p;

//	Clear_Dis(ucCurRow,0);	//清区

	if(ucCurScr == 5&&ucCurRow == 1)	
	{
		p = FnZM[ucFn];  //是第五屏一区的话,先加上Fn??????
		while(*p)
		{
			str[i ++ ] = *p ++;
		}
	}

	if(bChinese == 1)	//选择中文菜单
		p = Scr_Dis[ucCurScr + 19][ucCurRow - 1];	//取区固定信息
	else	
		p = Scr_Dis[ucCurScr][ucCurRow - 1];	//取区固定信息

	while(*p)
	{
		str[i ++ ] = *p ++;
	}

	WDTRST = 0x1E;	//启动看门狗
	WDTRST = 0xE1;	

	p = pScr_Row;
	if(ucCurScr == 5&&ucCurRow == 1)	//是第五屏一区的话,处理中文变量,为刀或笔时
	{	
		if(bChinese == 1)
		{
			if(*p == 'K')	//为刀
				p = KnorPenZM[2];
			else if(*p == 'H')	//为半刀
				p = KnorPenZM[1];
			else				//为笔
				p = KnorPenZM[0];
		}

		while(*p)
		{
			str[i ++ ] = *p ++;
		}
	}
	else
	{
		//处理中文变量,为中文或英文
		if(ucCurScr == 15&&ucCurRow == 1)
		{
			if(*p == 'C')	//选中文
			{
				bChinese = 1;
				p = EnorChZM[0];
			}
			else if(bChinese == 1&&*p == 'E')	//选英文
			{	
				bChinese = 0;
			}
		}

		while(*p)
		{
			str[i ++ ] = *p ++;
		}
	}

	for(;i < 8;i ++)	//添满整区
		str[i] = 32;
	
	str[i] = '\0';

	WDTRST = 0x1E;	//启动看门狗
	WDTRST = 0xE1;	

	switch(ucCurRow)
	{
	case 1:
		Show12832_Row(0,0,ucSelect,str);	//区信息显示函数,x为显示页,c为显示左右屏,lenght为字符长度,pScr_Row为显示信息内容
		break;
	case 2:
		Show12832_Row(0,64,ucSelect,str);	//区信息显示函数,x为显示页,c为显示左右屏,lenght为字符长度,pScr_Row为显示信息内容
		break;
	case 3:
		Show12832_Row(1,0,ucSelect,str);	//区信息显示函数,x为显示页,c为显示左右屏,lenght为字符长度,pScr_Row为显示信息内容
		break;
	case 4:
		Show12832_Row(1,64,ucSelect,str);	//区信息显示函数,x为显示页,c为显示左右屏,lenght为字符长度,pScr_Row为显示信息内容
		break;
	default:;
	}
}

/****************************/
/********/
/*函数原型:ShowError(unsigned char bShow)
/*功能:液晶屏出错处理
/*说明:
/*************/
/****************************************/
void ShowError(unsigned char bShow)	//出错提示函数
{
//	unsigned char ScrRow[] = "刀笔速度刀笔速度";
	
//	Show12832_Row(1,0,0,ScrRow);
//	set_adr(0,63);				//设置页地址
//	wdata(0x01,1);	//在最右上角显示一点
	if(bShow)
	{
		set_adr(3,63);				//设置页地址
		wdata(0x80,1);	//在最右下角显示一点	
	}
	else
	{
		set_adr(3,63);				//设置页地址
		wdata(0x00,1);	//在最右下角显示一点	
	}
}

/****************************/
/********/
/*函数原型:DataSR() 
/*功能:下位机接收数据处理
/*说明:
/*************/
/****************************************/
void DataSR()           //处理接收的数据
{
	if(ucDCount != ucRCount)
    {	

		WDTRST = 0x1E;	//启动看门狗
		WDTRST = 0xE1;	

		if(Buffer[ucDCount][0] == 14)	//第十四屏,特殊处理
		{
			if(Buffer[ucDCount][1] < 3)	//为第一行
			{
				Clear_Dis(1,0);	//清区
				Clear_Dis(2,0);	//清区

				if(bChinese == 1)	//选择中文菜单
					Show12832_Row(0,16,Buffer[ucDCount][2],Scr_Dis[14 + 19][0]);	//取区固定信息
				else	
					Show12832_Row(0,20,Buffer[ucDCount][2],Scr_Dis[14][0]);	//取区固定信息
			}
			else
			{
				Clear_Dis(3,0);	//清区
				Clear_Dis(4,0);	//清区

				if(bChinese == 1)	//选择中文菜单
					Show12832_Row(1,32,Buffer[ucDCount][2],Scr_Dis[14 + 19][2]);	//取区固定信息
				else	
					Show12832_Row(1,32,Buffer[ucDCount][2],Scr_Dis[14][2]);	//取区固定信息
			}
		}
		else if(Buffer[ucDCount][0] < 100)	//为屏显信息,放在前面提高处理速度
			Show_Scr(Buffer[ucDCount][0],Buffer[ucDCount][1],Buffer[ucDCount][2],&Buffer[ucDCount][3]);
		else if(Buffer[ucDCount][0] == 126)	//接收当前选中的刀号Fn
		{
			if(Buffer[ucDCount][1] > 0&&Buffer[ucDCount][1] < 5)
				ucFn = Buffer[ucDCount][1] - 1;
		}
		else if(Buffer[ucDCount][0] == 124)		//为显示坐标信息,即0屏
		{

				
			if(Buffer[ucDCount][1] == 1)
			{
				Clear_Dis(1,44);	//清区
				Clear_Dis(2,0);	//清区

				Show12832_Row(0,44,0,&Buffer[ucDCount][2]);
			}
			else if(Buffer[ucDCount][1] == 2)
			{
				Clear_Dis(3,44);	//清区
				Clear_Dis(4,0);	//清区
				Show12832_Row(1,44,0,&Buffer[ucDCount][2]);
			}	
			else if(Buffer[ucDCount][1] == 3)	//显示固定信息
			{
				Lcd_Init();	//清屏

				Show12832_Row(0,28,0,Scr_Dis[0][0]);
				Show12832_Row(1,28,0,Scr_Dis[0][2]);
			}
		}
		else if(Buffer[ucDCount][0] == 101)
			P33 = 0;	//点亮暂停灯
		else if(Buffer[ucDCount][0] == 102)
			P33 = 1;	//熄灭暂停灯
		else if(Buffer[ucDCount][0] == 103)
			P05 = 0;	//设置新加工起点灯亮
		else if(Buffer[ucDCount][0] == 104)
			P05 = 1;	//设置新加工起点灯灭
		else if(Buffer[ucDCount][0] == 119)
			P07 = 0;	//点亮X暂停灯
		else if(Buffer[ucDCount][0] == 120)
			P07 = 1;	//熄灭X暂停灯
		else if(Buffer[ucDCount][0] == 121)
			P27 = 0;	//点亮Y暂停灯
		else if(Buffer[ucDCount][0] == 122)
			P27 = 1;	//熄灭Y暂停灯
		else if(Buffer[ucDCount][0] == 105)	//点亮数据接收灯
			P06 = 0;
		else if(Buffer[ucDCount][0] == 106)	//熄灭数据接收灯
			P06 = 1;	
		else if(Buffer[ucDCount][0] == 118)	//为英文界面
			bChinese = 0;

		WDTRST = 0x1E;	//启动看门狗
		WDTRST = 0xE1;	

        ucDCount++;
        if(ucDCount >= RDCOUNT)
            ucDCount = 0; 
            
		if(bErrorFlag)
		{
			ShowError(0);	//清出错标志 
			bErrorFlag = 0;			          
		}
    }
	
	//这样就保证每次只发送一次按键,以使上位机能接收到
	if(bReceError1||bReceError2)	//产生通讯错误
	{
		if(bReceError1)	//add by zhx,05.12.29, 如果校验和有错,输出提示信息
		{
			Show12832_Row(1,64,1,StrError[0]);
			bReceError1 = 0;
		}

		if(bReceError2 && ! bLast)	//add by zhx,05.12.29, 如果校验和有错,输出提示信息
		{
			Show12832_Row(1,0,1,StrError[1]);
			bReceError2 = 0;
		}	
	
//		bReceError1 = bReceError2 = 0;
		
		ShowError(1);	//显示出错标志
		bErrorFlag = 1;	

		if(! bLast)	//非Last下
		{
			//发送率新键REFRESH
			KeyValue[0] = REFRESH;	//add by zhx,06.2.8, 发送率新REFRESH
			Send_Info(1);
		}
	}
	else if(bAllUp == 1)	//当产生Last,并结束发送Up时,发送一次AllUP按键
	{
		bAllUp = 0;
		KeyValue[0] = 34;	//AllUP按键
		Send_Info(1);
	}

	WDTRST = 0x1E;	//启动看门狗
	WDTRST = 0xE1;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -