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

📄 lcd1062.c

📁 C语言单片机编程的代码及教程文献
💻 C
字号:
/****************************************************************************
   本头文件描述了用89S52/89S51控制液晶显示器1602的一些连接情况,并而编写了些控制
液晶显示的函数.
******************************************************************************/

#include<REG51.H>
#include"lcd1062.h"
/***********************************void wait()*****************************
    该函数的作用是对LCD进行检测,看LCD是否处于忙的状态.当bflag=1时表示忙,
此时不可以向LCD进行读写操作.而当bflag=0时,表示可以向它读写数据.
****************************************************************************/
 void Wait()
 {
   DATA=0xff;
   RW=1; RS=0;                   //设LCD为读控制字的状态
   do
    {E=0;E=1;}while(bflag==1);
 }



/**********************************void Wrcom()*******************************
      该函数的作用是向LCD写入控制字.
******************************************************************************/
 void Wrcom(uchar com)
  {
    DATA=com;
    RW=0; RS=0;                    //设LCD为写控制字的状态
    E=0; E=1;    
    Wait();
  }


/**************************************void Disdata()*******************************
    该函数的作用是向LCD写入数据并显示出来.
***********************************************************************************/
 void Disdata(uchar dat)
  {
     DATA=dat;
     RW=0; RS=1;                  //设LCD为写数据的状态
     E=0; E=1;                    
     Wait();
  }



/***************************************void Init_LCD()*******************************
     该函数的作用是初始化LCD.
*****************************************************************************************/
 void Init_LCD()
  {
     Wrcom(0x01);        //清屏
     Wrcom(0x0c);        //开显示,关光标及闪烁
     Wrcom(0x06);        //文字不动,光标右移
     Wrcom(0x3c);        //8位,两行,5*10点阵
  }


/****************************************************************************
    该函数能定位光标到指定的位置,并选择是否要闪烁
****************************************************************************/  
 void Dis_cursor(uchar row,uchar line)
  {
    Wrcom(0x0d);        //开显示,闪烁、不开光标
	//Wrcom(0x0e);        //开显示、光标、不闪烁
	//Wrcom(0x0f);        //开显示、光标、闪烁
	if(row==1)
	  {
	    Wrcom(0x80+line-1);
	  }
	else 
	  {
	    Wrcom(0xc0+line-1);
	  }
	
  }


/****************************************void Disdatastring()********************************
    该函数的作用是向LCD写入一串数据,并把数据串显示出来.	先行再列,列不能为0,行下边的为0
********************************************************************************************/
 void Dis_string(uchar line,uchar row,uchar dat[])
  {
     uchar com,*s;
     s=dat;

     if(line==1)                 
       {
	      com=0x80+row-1;           //把数据写到第一行
          Wrcom(com);

          while(*s!='@'&&com<=0x8f)    //写入数据串
	         {
			    Disdata(*s);
                com++;
	            s++;
	         }
       }

     else 
       {com=0xc0+row-1;             //把数据写入第二行
          Wrcom(com);

          while(*s!='@'&&com<=0xcf)      //写入数据串
	         {
			   Disdata(*s);
	            com++;
	            s++;
	          }
        }
 }





/****************************************void Disdatastring()********************************
    该函数的作用是向LCD写入一个浮点数,并把数据显示出来.
********************************************************************************************/
 void Dis_float(uchar line,uchar row,float dat)
  {
     uchar dat1[9],i=0,com;
     uint temp1;
     uint temp2;

     if(dat>0) 
       {
	      dat1[0]='+';
          temp2=((ulong)(dat*1000))%1000;
          temp1=(uint)dat;
       }

     else 
       {
	      dat1[0]='-';
          temp2=(ulong)(-dat*1000)%1000;
          temp1=(uint)(-dat);
       }

     dat1[1]=(temp1/1000)%10+'0';
     dat1[2]=(temp1/100)%10+'0';
     dat1[3]=(temp1/10)%10+'0';
     dat1[4]=temp1%10+'0';
     dat1[5]='.';
     dat1[6]=(temp2/100)%10+'0';
     dat1[7]=(temp2/10)%10+'0';
     dat1[8]=temp2%10+'0';

     if(line==1)                 
      {
         com=0x80+row-1;           //把数据写到第一行
         Wrcom(com);

         while(i<=8&&com<=0x8f)    //写入数据串
	       {
	          Disdata(dat1[i]);
              com++;
	          i++;
	       }
       }

     else 
      {
         com=0xc0+row-1;             //把数据写入第二行
         Wrcom(com);

         while(i<=8&&com<=0xcf)      //写入数据串
	       {
	          Disdata(dat1[i]);
	          com++;
	          i++;
	       }
      }

  }



/****************************************void Disdatastring()********************************
    该函数的作用是向LCD写入一个8位的整数,并把数据显示出来.
********************************************************************************************/
  void Dis_char(uchar line,uchar row,char dat)
   {
      uchar dat1[4],i=0,com;
      if(dat&0x80)
        {
           dat1[0]='-';
           dat=~dat+1;
        }
      else 
	    dat1[0]='+';

      dat1[1]=dat/100+'0';
      dat1[2]=(dat/10)%10+'0';
      dat1[3]=dat%10+'0';

      if(line==1)                 
       {
          com=0x80+row-1;           //把数据写到第一行
          Wrcom(com);

          while(i<=3&&com<=0x8f)    //写入数据串
	        {
	           Disdata(dat1[i]);
               com++;
	           i++;
	        }
       }

      else 
       {
          com=0xc0+row-1;             //把数据写入第二行
          Wrcom(com);

          while(i<=3&&com<=0xcf)      //写入数据串
	        {
	           Disdata(dat1[i]);
	           com++;
	           i++;
	        }
        }

   }


/****************************************void Disdatastring()********************************
    该函数的作用是向LCD写入一个16位整数,并把数据显示出来.
********************************************************************************************/
void Dis_int(uchar line,uchar row,int dat)
  {
     uchar dat1[6],i=0,com;
     if(dat&0x8000)
      {
         dat1[0]='-';
         dat=~dat+1;
      }
     else 
	   dat1[0]='+';

     dat1[1]=dat/10000+'0';
     dat1[2]=(dat/1000)%10+'0';
     dat1[3]=(dat/100)%10+'0';
     dat1[4]=(dat/10)%10+'0';
     dat1[5]=dat%10+'0';

     if(line==1)                 
      {
         com=0x80+row-1;           //把数据写到第一行
         Wrcom(com);

         while(i<=5&&com<=0x8f)    //写入数据串
	       {
	          Disdata(dat1[i]);
              com++;
	          i++;
	       }
      }

     else 
      {
         com=0xc0+row-1;             //把数据写入第二行
         Wrcom(com);

         while(i<=5&&com<=0xcf)      //写入数据串
	       {
	          Disdata(dat1[i]);
	          com++;
	          i++;
	       }
      }

   }		  

⌨️ 快捷键说明

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