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

📄 1602drive.c

📁 /// /// /// ////1602驱动函数////////////////////////////////////// ////////////////////////////////////
💻 C
字号:
///////////////////////1602驱动函数//////////////////////////////////////
//////////////////////////////////////////////////////////////
// 函数原型:print(ucahr *string); 
//            输出字符串,超过16个字符时自动移入第二行
//           printone(uchar x,uchar y,ucahr Data);
//            在指定的位置(x,y)输出一个字符
//           lcm_init(void);    

// 要调用本函数时,必须在main()初始化阶段调用 lcm_init() 初始化 1602 

//////////////////////////////////////////////////////////////////////////


#include "myreg51.h"
#define E P3_5
#define RW P3_6
#define RS P3_7
#define Data_port P1

void delayms(uint time) //延时为5ms的整数倍
{
  uint _5ms=300;
  while(time--)
  {
     while(_5ms--);

  }

}

void checkbusy(void)         //读状态
{                               //每次写指令,读写数据之前均需检测忙信号
  Data_port=0xff;
  RS=0;
  RW=1;
  E=0;
  E=0;
  E=1;
  while(Data_port&0x80);

}


void Writedata(uchar d)     //写数据
{
  checkbusy();
  Data_port=d;
  RS=1;
  RW=0;
  E=0;
  E=0;
  E=1;
}

void Writecmd(uchar cmd)      //写命令
{
  checkbusy();
  Data_port=cmd;
  RS=0;
  RW=0;
  E=0;
  E=0;
  E=1;
}


void lcm_init(void)
{
  delayms(3);
  Data_port=0;

  Writecmd(0x38);     //必要的三次命令
  delayms(1);
  Writecmd(0x38);
  delayms(1);
  Writecmd(0x38);
  delayms(1);

  Writecmd(0x38);
  Writecmd(0x08);
  Writecmd(0x01);
  Writecmd(0x06);
  Writecmd(0x0c);
  Writecmd(0x01);
  delayms(1);
}

void printone(uchar x,uchar y,uchar d)    //x的范围为0-15
{
  uchar a;
  y&=0x01;
  x&=0x0F;
  if(y)x=x|0x40;   //关键部分!!!
  a=x|0x80;
  
  Writecmd(a);
  Writedata(d);
}

void print(uchar *string)
{
  uchar i=0,y=0,j=0;
  Writecmd(0x01);
  for(;string[i]!='\0'&&i<=15;i++)
  {
    printone(i,y,string[i]);
  }
  j=i;
  if(j>=15)
  {

    i=0;
    for(;string[j+i]!='\0'&&i<=15;i++)
    {
      printone(i,1,string[i+j]);
    }
    delayms(5);

  }
}

⌨️ 快捷键说明

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