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

📄 lcmdrive.c

📁 LCM320240点阵图形显示模块的驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
				  break;//退出switch语句.
		  default:Lcm_LocateXY(X,Y);//坐标定位.
		          for(i=0;i<8;i++)//写入8个"-".
			          Lcm_WriteData(Lcm_ASCIITable[11]);//写"-".
				  break;//退出switch语句.
	    }//switch{}.
  Lcm_WriteCommand(0x00,CommandReg0);//返回0号指令寄存器的原值.
}//子函数Lcm_DisplayIntVar结束.


/**************************************************************************************************
函数名称: Lcm_DisplayString.
功能描述: 在指定坐标处开始显示字符串.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
          读取某指令寄存器状态子函数Lcm_ReadCommand, 
		  在当前坐标下将单字节数据写入显存子函数Lcm_WriteData,
		  坐标定位子函数Lcm_LocateXY,
		  设定字体或图案的正相(正常)/反相(反白)显示子函数Lcm_Reverse,
		  字体或图案缩放设定子函数Lcm_Zoom,
		  在文字模式下设定中/英文字对齐子函数Lcm_FontTidiness,
		  在文字模式下设定正常字型或粗体字型子函数Lcm_FontThick,
		  在文字模式下设定行距子函数Lcm_RowSpacing.
全局变量: 无.
输    入: 无符号字符型:坐标点X,Y;
          无符号字符型:反白设定Reverse;0为反白,非0为正常;
          无符号字符型:字型水平放大倍数XZoom(1-4),字型垂直放大倍数YZoom(1-4);
          无符号字符型:中/英文字对齐命令FontTidiness;0为不对齐,非0为对齐;
 		  无符号字符型:文字加粗命令FontThick;0为正常字型,非0为粗体字型;
          无符号字符型:行距值RowSpacing(0-15);
		  无符号字符型指针:*string.
返    回: 无.
设    计: 特盈自动化  电气设计部  洪天长. 
**************************************************************************************************/ 
void Lcm_DisplayString(unsigned char X,unsigned char Y,
                    unsigned char Reverse,
                    unsigned char XZoom,unsigned char YZoom,
					unsigned char FontTidiness,
					unsigned char FontThick,
					unsigned char RowSpacing,
                    unsigned char *String)
{ unsigned char CommandReg0;//定义0号指令寄存器的辅助存储器.
  unsigned char CommandReg10;//定义10号指令寄存器的辅助存储器.
  unsigned char CommandReg11;//定义11号指令寄存器的辅助存储器.
  unsigned char CommandRegF1;//定义F1号指令寄存器的辅助存储器.
  CommandReg0=Lcm_ReadCommand(0x00);//保存0号指令寄存器的值.
  CommandReg10=Lcm_ReadCommand(0x10);//保存10号指令寄存器的值.
  CommandRegF1=Lcm_ReadCommand(0xf1);//保存F1号指令寄存器的值.
  Lcm_WriteCommand(0x00,CommandReg0|0x08);//选择文字模式,其余参数不变.
  Lcm_Reverse(Reverse);//调用字体或图案的正相(正常)/反相(反白)显示设定子函数.
  Lcm_Zoom(XZoom,YZoom);//调用字体或图案的缩放设定子函数.
  Lcm_FontTidiness(FontTidiness);//调用中/英文字对齐子函数.
  Lcm_FontThick(FontThick);//调用字型的正常或粗体显示子函数.
  Lcm_RowSpacing(RowSpacing);//调用行距设定子函数.
  Lcm_LocateXY(X,Y);//调用坐标定位子函数.
  while(*String!='\0')//循环写入字符串.
       { Lcm_WriteData(*String);
		 ++String;
	   }//while(1){}.
  Lcm_WriteCommand(0x00,CommandReg0);//返回0号指令寄存器的原值.
  Lcm_WriteCommand(0x10,CommandReg10);//返回10号指令寄存器的原值.
  Lcm_WriteCommand(0x11,CommandReg11);//返回11号指令寄存器的原值.
  Lcm_WriteCommand(0xf1,CommandRegF1);//返回F1号指令寄存器的原值.
}//子函数Lcm_DisplayString结束.


/**************************************************************************************************
函数名称: Lcm_Button.
功能描述: 完成文字显示的软按钮绘制.
函数说明: 按钮按下与弹起有不同的显示效果.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand. 
          读取某指令寄存器状态子函数Lcm_ReadCommand, 
		  在当前坐标下将单字节数据写入显存子函数Lcm_WriteData,
		  坐标定位子函数Lcm_LocateXY,
		  字符串显示字函数Lcm_DisplayString.
全局变量: 无.
输    入: 无符号字符型:坐标起始点X0,Y0,
          无符号字符型:弹起或按下标志Press;0为弹起状态,1为按下状态.
          无符号字符型指针:String.
返    回: 无.
设    计: 特盈自动化  电气设计部  洪天长. 
**************************************************************************************************/
void Lcm_Button(unsigned char X0,Y0,unsigned char Press,unsigned char *String)
{ unsigned char i,j;//定义辅助计数变量.
  unsigned char XTemp,YTemp;//定义辅助坐标变量.
  unsigned char CommandReg0;//定义0号指令寄存器的辅助存储器.
  unsigned char CommandReg10;//定义10号指令寄存器的辅助存储器.
  CommandReg0=Lcm_ReadCommand(0x00);//保存0号指令寄存器的值.
  CommandReg10=Lcm_ReadCommand(0x10);//保存10号指令寄存器的值.
  Lcm_WriteCommand(0x00,CommandReg0&0xf7);//选择绘图模式,其余参数不变.
  if(Press==0)//表示件弹起状态.
    { Lcm_WriteCommand(0x10,CommandReg10|0x30);//设定加粗但不反白显示,其余参数不变.
	  Lcm_LocateXY(X0,Y0);//定位左边第1列从上往下第1个数据点.
      Lcm_WriteData(0xff);//写数据.
      Lcm_LocateXY(X0,Y0+1);//定位左边第1列从上往下第2个数据点.
      Lcm_WriteData(0x80);//写数据.
      Lcm_LocateXY(X0,Y0+2);//定位左边第1列从上往下第3个数据点.
      Lcm_WriteData(0x80);//写数据.
      for(i=Y0+3;i<=Y0+26;i++)//写左边第1列从上往下第4-27个数据.
	     { Lcm_LocateXY(X0,i);//定位.
	       Lcm_WriteData(0x90);//写数据.
	     }//for{}.
      Lcm_LocateXY(X0,Y0+27);//定位左边第1列从上往下第28个数据点.
      Lcm_WriteData(0x80);//写数据.
      Lcm_LocateXY(X0,Y0+28);//定位左边第1列从上往下第29个数据点.
      Lcm_WriteData(0x80);//写数据.
	  Lcm_LocateXY(X0,Y0+29);//定位左边第1列从上往下第30个数据点.
      Lcm_WriteData(0xff);//写数据.
	  Lcm_DisplayString(X0+1,Y0+7,1,1,1,0,1,2,String);//写文字.
	  XTemp=Lcm_ReadCommand(0x60);//读取写文字后的X轴坐标.
	  YTemp=Lcm_ReadCommand(0x70);//读取写文字后的Y轴坐标.
      Lcm_LocateXY(XTemp,YTemp-7);//定位最右边列从上往下第1个数据点.
      Lcm_WriteData(0xff);//写数据.
	  Lcm_LocateXY(XTemp,YTemp-6);//定位最右边列从上往下第2个数据点.
      Lcm_WriteData(0x03);//写数据.
      Lcm_LocateXY(XTemp,YTemp-5);//定位最右边列从上往下第3个数据点.
      Lcm_WriteData(0x07);//写数据.
      for(i=YTemp-4;i<=YTemp+22;i++)//写最右边列从上往下第4-22个数据点.
	     { Lcm_LocateXY(XTemp,i);//定位.
	       Lcm_WriteData(0x0F);//写数据.
	     }//for{}.
      Lcm_LocateXY(X0,Y0);//定位第1根水平线的起始点.
      for(i=X0;i<XTemp+1;i++)
	      Lcm_WriteData(0xff);//写第1根水平线.
      Lcm_LocateXY(X0+1,Y0+1);//定位第2根水平线的起始点.
      for(i=X0+1;i<XTemp;i++)//写第2根水平线.
	      Lcm_WriteData(0x00);//写数据.  	 
	  Lcm_LocateXY(X0+1,Y0+2);//定位第3根水平线的起始点.
      for(i=X0+1;i<XTemp;i++)//写第3根水平线.
	       Lcm_WriteData(0x00);//写数据. 
      Lcm_LocateXY(X0,Y0+3);//定位第4根水平线的起始点.
      Lcm_WriteData(0x9f);//写第4根水平线的第1个数据.
      for(i=X0+1;i<=XTemp;i++)//写第4根水平线的其余数据.
	      Lcm_WriteData(0xff);//写数据. 
	  for(j=Y0+4;j<Y0+7;j++)//填充文字上边使之空白.
	     { Lcm_LocateXY(X0+1,j);//定位水平线的起始点.
           for(i=X0+1;i<XTemp;i++)//写水平线.
	           Lcm_WriteData(0x00);//写数据.
		 }//for{}.
      for(j=Y0+23;j<Y0+26;j++)//填充文字下边使之空白.
	     { Lcm_LocateXY(X0+1,j);//定位水平线的起始点.
           for(i=X0+1;i<XTemp;i++)//写水平线.
	           Lcm_WriteData(0x00);//写数据.
		 }//for{}.
	  Lcm_LocateXY(X0,Y0+26);//定位第5根水平线的起始点.
      Lcm_WriteData(0x9f);//写第5根水平线的第1个数据.
      for(i=X0+1;i<=XTemp;i++)//写第5根水平线的其余数据.
	      Lcm_WriteData(0xff);//写数据.  	
      Lcm_LocateXY(X0,Y0+27);//定位第6根水平线的起始点.
      Lcm_WriteData(0xbf);//写第6根水平线的第1个数据.
      for(i=X0+1;i<=XTemp;i++)//写第6根水平线的其余数据.
	      Lcm_WriteData(0xff);//写数据.  	 
      Lcm_LocateXY(X0,Y0+28);//定位第7根水平线的起始点.
      for(i=X0;i<=XTemp;i++)//写第7根水平线的其余数据.
	      Lcm_WriteData(0xff);//写数据.   
	  Lcm_LocateXY(X0,Y0+29);//定位第8根水平线的起始点.
      for(i=X0;i<=XTemp;i++)//写第8根水平线.
	      Lcm_WriteData(0xff);//写数据. 
    }//if{}.
  else//表示键按下状态.
    { Lcm_WriteCommand(0x10,CommandReg10|0x30);//设定加粗但不反白显示,其余参数不变.
	  Lcm_LocateXY(X0,Y0);//定位.
      Lcm_WriteData(0xff);//写数据.
      Lcm_LocateXY(X0,Y0+1);//定位.
      Lcm_WriteData(0x80);//写数据.
	   Lcm_LocateXY(X0,Y0+2);//定位.
      Lcm_WriteData(0x80);//写数据.	
	  for(i=Y0+3;i<Y0+27;i++)//写左边第1列从上往下第1-27个数据.
	     { Lcm_LocateXY(X0,i);//定位.
           Lcm_WriteData(0x9f);//写数据.
		 }//for{}.   
      Lcm_LocateXY(X0,Y0+27);//定位左边第1列从上往下第28个数据点.
      Lcm_WriteData(0x80);//写数据.
      Lcm_LocateXY(X0,Y0+28);//定位左边第1列从上往下第29个数据点.
      Lcm_WriteData(0x80);//写数据.
	  Lcm_LocateXY(X0,Y0+29);//定位左边第1列从上往下第30个数据点.
      Lcm_WriteData(0xff);//写数据.
	  Lcm_DisplayString(X0+1,Y0+7,0,1,1,0,1,2,String);//写反白文字.
	  XTemp=Lcm_ReadCommand(0x60);//读取写文字后的X轴坐标.
	  YTemp=Lcm_ReadCommand(0x70);//读取写文字后的Y轴坐标.
	  Lcm_LocateXY(XTemp,YTemp-7);//定位最右边列从上往下第1个数据点.
      Lcm_WriteData(0xff);//写数据.
	  Lcm_LocateXY(XTemp,YTemp-6);//定位最右边列从上往下第2个数据点.
      Lcm_WriteData(0x01);//写数据.
      Lcm_LocateXY(XTemp,YTemp-5);//定位最右边列从上往下第3个数据点.
      Lcm_WriteData(0x01);//写数据.
      Lcm_LocateXY(XTemp,YTemp-4);//定位最右边列从上往下第4个数据点.
      Lcm_WriteData(0xf9);//写数据.
      for(i=YTemp-3;i<=YTemp+19;i++)//写最右边列从上往下第5-27个数据点.
	     { Lcm_LocateXY(XTemp,i);//定位.
	       Lcm_WriteData(0xf9);//写数据.
	     }//for{}.
      Lcm_LocateXY(XTemp,YTemp+20);//定位最右边列从上往下第28个数据点.
      Lcm_WriteData(0x01);//写数据.
	  Lcm_LocateXY(XTemp,YTemp+21);//定位最右边列从上往下第29个数据点.
      Lcm_WriteData(0x01);//写数据.
	  Lcm_LocateXY(XTemp,YTemp+22);//定位最右边列从上往下第30个数据点.
      Lcm_WriteData(0xff);//写数据.
      Lcm_LocateXY(X0+1,Y0);//写框架上边第1条水平线.
           for(i=X0+1;i<XTemp;i++)//写水平线.
	           Lcm_WriteData(0xff);//写数据.
      Lcm_LocateXY(X0+1,Y0+1);//写框架上边第2条水平线.
           for(i=X0+1;i<XTemp;i++)//写水平线.
	           Lcm_WriteData(0x00);//写数据.
      Lcm_LocateXY(X0+1,Y0+2);//写框架上边第3条水平线.
           for(i=X0+1;i<XTemp;i++)//写水平线.
	           Lcm_WriteData(0x00);//写数据.
      Lcm_LocateXY(X0+1,Y0+3);//写框架上边第4条水平线.
           for(i=X0+1;i<XTemp;i++)//写水平线.
	           Lcm_WriteData(0xff);//写数据.	 
	  for(j=Y0+4;j<Y0+7;j++)//填充文字上边使之全黑.
	     { Lcm_LocateXY(X0+1,j);//定位水平线的起始点.
           for(i=X0+1;i<XTemp;i++)//写水平线.
	           Lcm_WriteData(0xff);//写数据.
		 }//for{}.
      for(j=Y0+23;j<Y0+26;j++)//填充文字下边使之全黑.
	     { Lcm_LocateXY(X0+1,j);//定位水平线的起始点.
           for(i=X0+1;i<XTemp;i++)//写水平线.
	           Lcm_WriteData(0xff);//写数据.
		 }//for{}.
	  Lcm_LocateXY(X0+1,Y0+26);//写框架下边第1条水平线.
      for(i=X0+1;i<XTemp;i++)//写水平线.
	      Lcm_WriteData(0xff);//写数据.  
	  Lcm_WriteData(0xf9);//写框架下边第1条水平线的最后一个数据.
      Lcm_LocateXY(X0+1,Y0+27);//写框架下边第2条水平线.
      for(i=X0+1;i<XTemp;i++)//写水平线.
	      Lcm_WriteData(0x00);//写数据.  	 
	  Lcm_LocateXY(X0+1,Y0+28);//写框架下边第3条水平线.
      for(i=X0+1;i<XTemp;i++)//写水平线.
	       Lcm_WriteData(0x00);//写数据. 
      Lcm_LocateXY(X0,Y0+29);//写框架下边第4条水平线.
      for(i=X0+1;i<=XTemp+1;i++)//写水平线.
	      Lcm_WriteData(0xff);//写数据.       
   }//else{}.
  Lcm_WriteCommand(0x00,CommandReg0);//返回0号指令寄存器的原值.
  Lcm_WriteCommand(0x10,CommandReg0);//返回10号指令寄存器的原值.
}//子函数Lcm_Button结束.

⌨️ 快捷键说明

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