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

📄 lcmdrive.c

📁 LCM320240点阵图形显示模块的驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
}//子函数Lcm_Reverse结束.


/**************************************************************************************************
函数名称: Lcm_FontTidiness.
功能描述: 在文字模式下设定中/英文字对齐.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
          读取某指令寄存器状态子函数Lcm_ReadCommand. 
全局变量: 无.
输    入: 无符号字符型中/英文对齐命令FontTidiness;0为不对齐,非0为对齐.
返    回: 无.
设    计: 特盈自动化  电气设计部  洪天长. 
**************************************************************************************************/ 
void Lcm_FontTidiness(unsigned char FontTidiness)
{ unsigned char CommandReg10;//定义10号指令寄存器的辅助存储器.
  CommandReg10=Lcm_ReadCommand(0x10);//保存10号指令寄存器的值.
  if(FontTidiness==0)//如果命令为0则表示设定不对齐.
       Lcm_WriteCommand(0x10,CommandReg10&0xbf);//设定不对齐方式,其余参数不变.
  else Lcm_WriteCommand(0x10,CommandReg10|0x40);//设定对齐方式,其余参数不变.
}//子函数Lcm_FontTidiness结束.


/**************************************************************************************************
函数名称: Lcm_FontThick.
功能描述: 在文字模式下设定正常字型或粗体字型.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
          读取某指令寄存器状态子函数Lcm_ReadCommand. 
全局变量: 无.
输    入: 无符号字符型正常或粗体命令FontThick;0为正常字型,非0为粗体字型.
返    回: 无.
设    计: 特盈自动化  电气设计部  洪天长. 
**************************************************************************************************/ 
void Lcm_FontThick(unsigned char FontThick)
{ unsigned char CommandReg10;//定义10号指令寄存器的辅助存储器.
  CommandReg10=Lcm_ReadCommand(0x10);//保存10号指令寄存器的值.
  if(FontThick==0)//如果命令为0则表示设定正常字型.
       Lcm_WriteCommand(0x10,CommandReg10&0xef);//设定正常字型,其余参数不变.
  else Lcm_WriteCommand(0x10,CommandReg10|0x10);//设定粗体字型,其余参数不变.
}//子函数Lcm_FontThick结束.


/**************************************************************************************************
函数名称: Lcm_RowSpacing.
功能描述: 在文字模式下设定行距值.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
          读取某指令寄存器状态子函数Lcm_ReadCommand. 
全局变量: 无.
输    入: 无符号字符型行距值RowSpacing(0-15).
返    回: 无.
设    计: 特盈自动化  电气设计部  洪天长. 
**************************************************************************************************/ 
void Lcm_RowSpacing(unsigned char RowSpacing)
{ unsigned char CommandReg11;//定义11号指令寄存器的辅助存储器.
  if((RowSpacing>=0)&&(RowSpacing<=15))//如果输入的行距未超出范围则进行行距设定.
    { CommandReg11=Lcm_ReadCommand(0x11);//保存10号指令寄存器的值.
	  Lcm_WriteCommand(0x11,(CommandReg11&0xf0)|RowSpacing);//设定行距,其余参数不变.
	}//if{}.  
}//子函数Lcm_RowSpacing结束.


/**************************************************************************************************
函数名称: Lcm_LocateXY.
功能描述: 完成坐标定位.
函数说明: 不论是文字模式还是图形模式,都是使用60H及70H指令寄存器来设定光标位置.
          特别注意的是本液晶屏的坐标0点在左上脚,沿水平向右为X,沿垂直向下为Y.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand. 
全局变量: 无.
输    入: 无符号字符型坐标值X,Y.
返    回: 无.
设    计: 特盈自动化  电气设计部  洪天长. 
**************************************************************************************************/ 
void Lcm_LocateXY(unsigned char X,unsigned Y)
{ Lcm_WriteCommand(0x60,X);//设定光标Segment地址值为X.
  Lcm_WriteCommand(0x70,Y);//设定光标Common地址值为Y.
}//子函数Lcm_LocateXY结束.


/**************************************************************************************************
函数名称: Lcm_DisplayASCII.
功能描述: 在指定坐标处开始显示单个ASCII码字符或图案.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
          读取某指令寄存器状态子函数Lcm_ReadCommand, 
		  在当前坐标下将单字节数据写入显存子函数Lcm_WriteData,
		  字体或图案的正相(正常)/反相(反白)显示设定子函数Lcm_Reverse,
		  字体或图案的缩放设定子函数Lcm_Zoom,
		  坐标定位子函数Lcm_LocateXY.
全局变量: 无.
输    入: 无符号字符型:坐标点X,Y;
          无符号字符型:ASCII区块号Area(0-3);
		  无符号字符型:正相或反相显示命令Reverse;0为反白显示,非0为正常显示.
          无符号字符型:字体或图案的水平放大倍数XZoom(1-4),字体或图案的垂直放大倍数YZoom(1-4);
		  无符号字符型:ASCII字型码ASCIIReg.
返    回: 无.
设    计: 特盈自动化  电气设计部  洪天长. 
**************************************************************************************************/ 
void Lcm_DisplayASCII(unsigned char X,unsigned char Y,
                   unsigned char Area,
				   unsigned char Reverse,
                   unsigned char XZoom,unsigned char YZoom,
				   unsigned char ASCIIReg)
{ unsigned char CommandReg0;//定义0号指令寄存器的辅助存储器.
  unsigned char CommandReg10;//定义10号指令寄存器的辅助存储器.
  unsigned char CommandRegF0;//定义F0号指令寄存器的辅助存储器.
  unsigned char CommandRegF1;//定义F1号指令寄存器的辅助存储器.
  CommandReg0=Lcm_ReadCommand(0x00);//保存0号指令寄存器的值.
  CommandReg10=Lcm_ReadCommand(0x10);//保存10号指令寄存器的值.
  CommandRegF0=Lcm_ReadCommand(0xf0);//保存F0号指令寄存器的值.
  CommandRegF1=Lcm_ReadCommand(0xf1);//保存F1号指令寄存器的值.
  Lcm_WriteCommand(0x00,CommandReg0|0x08);//选择文字模式,其余参数不变.
  if((Area>=0)&&(Area<=3))//如果区快参数正确则进行区块选择. 
      Lcm_WriteCommand(0xf0,(CommandRegF0&0xfc)|Area);//选择区块,其余参数不变.
  Lcm_Reverse(Reverse);//调用字体或图案的正相(正常)/反相(反白)显示设定子函数.
  Lcm_Zoom(XZoom,YZoom);//调用字体或图案的缩放设定子函数.
  Lcm_LocateXY(X,Y);//调用坐标定位子函数.
  Lcm_WriteData(ASCIIReg);//调用写数据到显存子函数.
  Lcm_WriteCommand(0x00,CommandReg0);//返回0号指令寄存器的原值.
  Lcm_WriteCommand(0x10,CommandReg10);//返回10号指令寄存器的原值.
  Lcm_WriteCommand(0xf0,CommandRegF0);//返回F0号指令寄存器的原值.
  Lcm_WriteCommand(0xf1,CommandRegF1);//返回F1号指令寄存器的原值.	
}//子函数Lcm_DisplayASCII结束.


/**************************************************************************************************
函数名称: Lcm_DisplayIntVar.
功能描述: 在指定坐标处开始显示整型变量的值(变量范围:-9999999~9999999).
函数说明: 显示总长度固定为为8位,并且采用后对齐方式;
          变量为正数时不显示其符号"+";变量为负数时在数值前显示"-".
		  当变量的范围超出时显示"--------".
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
          读取某指令寄存器状态子函数Lcm_ReadCommand, 
		  在当前坐标下将单字节数据写入显存子函数Lcm_WriteData,
		  坐标定位子函数Lcm_LocateXY.
全局变量: 无.
输    入: 无符号字符型:坐标起点X,Y;
          有符号长整型变量Intvar(变量范围:-9999999~9999999).
返    回: 无.
设    计: 特盈自动化  电气设计部  洪天长. 
**************************************************************************************************/ 
void Lcm_DisplayIntVar(unsigned char X,unsigned char Y,long int Intvar)
{ unsigned char i;//定义辅助计数变量.
  unsigned char Sign;//定义整型变量Intvar的符号标志;sign=0表示Intvar为负数,反之为正数.
  unsigned char Digit;//定义整型变量Intvar的有效位数存储器(不包括符号位);如:+2453的位数为4.
  unsigned char CommandReg0;//定义0号指令寄存器的辅助存储器.
  CommandReg0=Lcm_ReadCommand(0x00);//保存0号指令寄存器的值.
  Lcm_WriteCommand(0x00,CommandReg0|0x08);//选择文字模式,其余参数不变.
  if(Intvar>=0) Sign=1;//表示Intvar为正数.
  else { Sign=0;//表示Intvar为负数.
         Intvar=-Intvar;//保存其绝对值.
		}//else{}.
  if((Intvar>=0)&&(Intvar<=9)) Digit=1;//计算有效数字个数.
  if((Intvar>9)&&(Intvar<=99)) Digit=2;//计算有效数字个数.
  if((Intvar>99)&&(Intvar<=999)) Digit=3;//计算有效数字个数.
  if((Intvar>999)&&(Intvar<=9999)) Digit=4;//计算有效数字个数.
  if((Intvar>9999)&&(Intvar<=99999)) Digit=5;//计算有效数字个数.
  if((Intvar>99999)&&(Intvar<=999999)) Digit=6;//计算有效数字个数.
  if((Intvar>999999)&&(Intvar<=9999999)) Digit=7;//计算有效数字个数.
  if(Intvar>9999999) Digit=8;//计算有效数字个数.
  switch(Digit)//根据有效数字个数不同做不同的处理.
        { case 7: Lcm_LocateXY(X,Y);//坐标定位.
		          if(Sign==0) Lcm_WriteData(Lcm_ASCIITable[11]);//写"-".
				  else Lcm_LocateXY(X+1,Y);//坐标定位.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1000000]);//写第7位.
                  Intvar=Intvar%1000000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/100000]);//写第6位.
				  Intvar=Intvar%100000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/10000]);//写第5位.
				  Intvar=Intvar%10000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1000]);//写第4位.
				  Intvar=Intvar%1000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/100]);//写第3位.
				  Intvar=Intvar%100;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/10]);//写第2位.
				  Intvar=Intvar%10;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1]);//写第1位.
				  break;//退出switch语句.
          case 6: Lcm_LocateXY(X+1,Y);//坐标定位.
		          if(Sign==0) Lcm_WriteData(Lcm_ASCIITable[11]);//写"-".
				  else Lcm_LocateXY(X+2,Y);//坐标定位.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/100000]);//写第6位.
				  Intvar=Intvar%100000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/10000]);//写第5位.
				  Intvar=Intvar%10000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1000]);//写第4位.
				  Intvar=Intvar%1000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/100]);//写第3位.
				  Intvar=Intvar%100;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/10]);//写第2位.
				  Intvar=Intvar%10;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1]);//写第1位.
				  break;//退出switch语句.
		  case 5: Lcm_LocateXY(X+2,Y);//坐标定位.
		          if(Sign==0) Lcm_WriteData(Lcm_ASCIITable[11]);//写"-".
				  else Lcm_LocateXY(X+3,Y);//坐标定位.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/10000]);//写第5位.
				  Intvar=Intvar%10000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1000]);//写第4位.
				  Intvar=Intvar%1000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/100]);//写第3位.
				  Intvar=Intvar%100;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/10]);//写第2位.
				  Intvar=Intvar%10;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1]);//写第1位.
				  break;//退出switch语句.
		  case 4: Lcm_LocateXY(X+3,Y);//坐标定位.
		          if(Sign==0) Lcm_WriteData(Lcm_ASCIITable[11]);//写"-".
				  else Lcm_LocateXY(X+4,Y);//坐标定位.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1000]);//写第4位.
				  Intvar=Intvar%1000;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/100]);//写第3位.
				  Intvar=Intvar%100;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/10]);//写第2位.
				  Intvar=Intvar%10;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1]);//写第1位.
				  break;//退出switch语句.
		  case 3: Lcm_LocateXY(X+4,Y);//坐标定位.
		          if(Sign==0) Lcm_WriteData(Lcm_ASCIITable[11]);//写"-".
				  else Lcm_LocateXY(X+5,Y);//坐标定位.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/100]);//写第3位.
				  Intvar=Intvar%100;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/10]);//写第2位.
				  Intvar=Intvar%10;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1]);//写第1位.
				  break;//退出switch语句.
		  case 2: Lcm_LocateXY(X+5,Y);//坐标定位.
		          if(Sign==0) Lcm_WriteData(Lcm_ASCIITable[11]);//写"-".
				  else Lcm_LocateXY(X+6,Y);//坐标定位.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/10]);//写第2位.
				  Intvar=Intvar%10;//保存余数.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1]);//写第1位.
				  break;//退出switch语句.
		  case 1: Lcm_LocateXY(X+6,Y);//坐标定位.
		          if(Sign==0) Lcm_WriteData(Lcm_ASCIITable[11]);//写"-".
				  else Lcm_LocateXY(X+7,Y);//坐标定位.
				  Lcm_WriteData(Lcm_ASCIITable[Intvar/1]);//写第1位.

⌨️ 快捷键说明

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