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

📄 lcd.h

📁 51单片机控制LCD液晶显示,用的是C语言编写,在KEIL2下运行工程,可直接使用
💻 H
字号:
/////////////////////////////////////////////////
//                                             //
//            LCD用的RS232头文件               //
//                                             //
/////////////////////////////////////////////////

#ifndef Lcd_h   // 避免重定义
#define Lcd_h

#include <AT89X52.H>

sbit CS =P2^7;
sbit SID=P2^6;
sbit SCK=P2^5;


unsigned char code AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,     //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,     //第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,     //第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,     //第四行汉字位置
};


//串口发送一个字节
void SendByte(unsigned char Dbyte)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
      SCK = 0;
      Dbyte=Dbyte<<1;     //左移一位
      SID = CY;           //移出的位给SID
      SCK = 1;
      SCK = 0;
  }
}

//串口接收一个字节
//仅在读取数据的时候用到
//而读出的数据是一次只能读出4bit的
unsigned char ReceiveByte(void)
{
  unsigned char i,temp1,temp2;
  temp1=temp2=0;
  for(i=0;i<8;i++)
  {
      temp1=temp1<<1;
      SCK = 0;
      SCK = 1;         
      SCK = 0;
      if(SID) temp1++;
  }
  for(i=0;i<8;i++)
  {
      temp2=temp2<<1;
      SCK = 0;
      SCK = 1;
      SCK = 0;
      if(SID) temp2++;
  }
  return ( (0xf0&temp1) + (0x0f&temp2) );
}


void CheckBusy( void )      //通讯的开始,要先发送5个连续的1(同步位),和RW、RS
{
  do   SendByte(0xfc);      //11111,RW(1),RS(0),0    
  while(0x80 & ReceiveByte());     //BF(.7)=1 Busy   ;  低7位为位置计数器AC的值
}


//写命令
void WriteCommand( unsigned char Cbyte )
{
  CS = 1;     //单片液晶,不用片选,直接使CS = 1; 也行
  CheckBusy();
  SendByte(0xf8);         //11111,RW(0),RS(0),0  ;  RS--数据(1)--命令(0)
  SendByte(0xf0&Cbyte);     //高四位
  SendByte(0xf0&Cbyte<<4);//低四位(先执行<<)
  CS = 0;
}

//写数据
void WriteData( unsigned char Dbyte )
{
  CS = 1;
  CheckBusy();
  SendByte(0xfa);           //11111,RW(0),RS(1),0  ;  RW--读(1)--写(0)
  SendByte(0xf0&Dbyte);     //高四位
  SendByte(0xf0&Dbyte<<4);  //低四位(先执行<<)
  CS = 0;
}

//读数据
unsigned char ReadData( void )
{
  CheckBusy();
  SendByte(0xfe);         //11111,RW(1),RS(1),0
  return ReceiveByte();
}


//文本区清RAM函数
void LcmClearTXT( void )
{
  unsigned char i;
  WriteCommand(0x30);     //8BitMCU,基本指令集合
  WriteCommand(0x80);     //AC归起始位
  for(i=0;i<64;i++)
    WriteData(0x20);     //0x20 表示空格
}


//发送串
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{
  WriteCommand(0x30);     //8BitMCU,基本指令集合
  WriteCommand(AC_TABLE[8*row+col]);     //起始位置
  while(*puts != '\0')     //判断字符串是否显示完毕
  {
      if(col==8)         //判断换行
      {         //若不判断,则自动从第一行到第三行
          col=0;
          row++;
      }
      if(row==4) row=0;     //一屏显示完,回到屏左上角
      WriteCommand(AC_TABLE[8*row+col]);
      WriteData(*puts);     //一个汉字要写两次
      puts++;
      WriteData(*puts);
      puts++;
      col++;
  }
}




#endif

⌨️ 快捷键说明

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