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

📄 lcm1602.c

📁 51单片机与PC通信--串口通信实验 keil环境
💻 C
字号:
#include <reg52.h>
#include <intrins.h>

sbit RSPIN = P1^0;	   //数据/命令选择端
sbit RWPIN = P1^1;	   //读写控制信号
sbit EPIN = P1^2;	   //使能信号

unsigned char XPOS,YPOS;

void delay1(unsigned int t)	  //延时
{  unsigned int i,j;
   for(i=0;i<t;i++)
      for(j=0;j<10;j++)
         ;
}

void lcdwaitidle(void)	    //读写检测.对控制器每次进行读写操作之前,都必须进行,
{  P0=0xff;
   RSPIN=0;
   RWPIN=1;
   EPIN=1;
   while((P0&0x80)==0x80);	 //确保STA7 为0
   EPIN=0;
}

void lcdwcn(unsigned char c)	 //不判忙直接写指令
{  RSPIN=0;
   RWPIN=0;
   P0=c;
   EPIN=1;
   _nop_();
   EPIN=0;
}

void lcdwc(unsigned char c)		//判忙后写指令	
{  lcdwaitidle();
   lcdwcn(c);
}

void lcdwd(unsigned char d)		 //写数据 	
{  lcdwaitidle();
   RSPIN=1;
   RWPIN=0;
   P0=d;
   EPIN=1;
   _nop_();
   EPIN=0;
}

void lcdpos(void)	    	   //确定当前光标位置
{  XPOS&=0x0f;
   YPOS&=0x03;
   if(YPOS==0x00)
      lcdwc(XPOS|0x80);
   else if(YPOS==0x01)
      lcdwc((XPOS+0x40)|0x80);
}

void lcdreset()					 //LCM初始化
{  EPIN=0;
   delay1(150); lcdwcn(0x38);	 //写指令38H
   delay1(50); lcdwcn(0x38);	 //写指令38H
   delay1(50); lcdwcn(0x38);	 //写指令38H
   lcdwc(0x38);					 //显示模式设置,设置16X2 显示,5X7 点阵,8 位数据接口
   lcdwc(0x08);		//显示关闭		    
   lcdwc(0x01);		//显示清屏
   lcdwc(0x06);	    //显示光标移动设置
   lcdwc(0x0c);	    //显示开及光标设置
}

void lcdfill(unsigned char n)		//向1602写一满屏字符
{
   for(YPOS=0;YPOS<2;YPOS++)
      for(XPOS=0;XPOS<16;XPOS++)
      {  lcdpos();
         lcdwd(n);  }
}

void lcdchar(unsigned char x,unsigned char y,unsigned char ch)	  //在1602指定位置写一个字符
{
	XPOS=x;  YPOS=y;
	lcdpos();
	lcdwd(ch);
}

void lcdwda(unsigned char x,unsigned char y,unsigned char *s) //在1602指定位置写一行字符串
{  YPOS=y;
   for(XPOS=x;XPOS<16;XPOS++)
   {  lcdpos();
   	  if (*s=='\0') return;
      lcdwd(*s);
      s++;
      //delay1(5000);//(400);
   }
}

⌨️ 快捷键说明

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