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

📄 lcd.c

📁 在PIC16F877上驱动OCM2×8C液晶模块LCM
💻 C
字号:
#include <pic.h>
#define		RESET	RB1             //L delay 40ms then H delay20ms, safe reset!
#define		PSB	    RB5         	// H: Parrel mode, L: Serial mode
#define 	E	    RB4         	//Enable LCM data input.
#define		RW		RB3				//H: Read    L: Write
#define		RS		RB2				// H: Data    L: Instruction Code
void DELAY20MS(void);               //注意位定义  c 中用 RB 来定义i\o口的位
void init(void);
void wr_data(void);
void wr_commonde(void); 
void hz_input(void);
void che_busy(void); 
  char LCMCOMM=0X00; 
  char LCMDATA=0X00; 
void DELAY20MS()
{
 char i=0,j=0;
 for(i=0;i<=250;i++)
 {
  for(j=0;j<=200;j++)
  {
   ;
  }
 }
 }
void init()
{ 
  TRISB=0X00;
  TRISD=0X00;
  ADCON0=0X00;                  //OFF A/D
  ADCON1=0B00000110;
  RESET=0;		
  DELAY20MS();
  RESET=1;
  DELAY20MS();
  PSB=1;	
  LCMCOMM=0X01;			   		//CLER AND DISPLAY
  wr_commonde();
  LCMCOMM=0X02;        	   		//address reset
  wr_commonde();
  LCMCOMM=0X06;		       //000001 I\D S I=LIFT D=RIGHT
  wr_commonde();
  LCMCOMM=0B00001110;		       //OOOO1DCB  D=1=FULL DISPLAY C=1=GB=ON B=1=SS=ON
  wr_commonde();
  LCMCOMM=0B00110000;	   //001DL0RE00 DL=1=8bit RE=0=basic COMM
  wr_commonde();
  
}


 void wr_commonde()  	       
{
  che_busy();
  RW=0;
  NOP();					//之所以加nop防止操作口发生冲突
  NOP();
  NOP();
  RS=0;
  NOP();
  NOP();
  NOP();
  E=1;
  PORTD=LCMCOMM;
  E=0;
}

void hz_input()
{ 
  char a[]="您好,世界!";                                         ///////字符串的大小不用给出
  char i=0;	   			
  LCMCOMM=0X80;             
  wr_commonde();
  while(a[i]!=0)
  {
  LCMDATA=a[i];                   //注意赋值的先后顺序
  wr_data();
  i++;
  }
  
}
void  wr_data()
{
  che_busy();
  RW=0;
  NOP();
  NOP();
  NOP();
  RS=1;
  NOP();
  NOP();
  NOP();
  E=1;
  NOP();
  NOP();
  NOP();
  PORTD=LCMDATA;
  NOP();
  NOP();
  NOP();
  E=0;
}


void  che_busy()
{
  TRISD=0XFF;                 //注意i\o口的方向
  RW=1;
  NOP();
  NOP();
  NOP();
  RS=0;
  NOP();
  NOP();
  NOP();
  E=1;
  NOP();
  NOP();
  NOP();
  while(RD7==1)
 {
  ;
 }
  NOP();
  NOP();
  NOP();
  E=0;
  TRISD=0X00;	
}


void main()
{ 
 while(1)
{
  init();
  hz_input();
  while(1);							//programe over
}
}

⌨️ 快捷键说明

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