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

📄 proj_8.c

📁 LCM1602液晶屏显示--液晶屏 单片机开发的小程序
💻 C
字号:


//ZC-51学习板实验源程序
//LCM1602液晶屏显示--液晶屏
//http://www.ednchina.com/blog/zhichengdz/
//E-mail: zhicheng_dz@163.com



#include <reg52.h>
#include <intrins.h>

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

unsigned char XPOS,YPOS;
unsigned char chbuff;

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
   while((P0&0x01)==0x01);	 //确保STA7 为0
   EPIN=0;
}

void lcdwcn(unsigned char c)	 //不判忙直接写指令
{  RSPIN=0;
   RWPIN=0;
   chbuff=0;
   if (c&0x01) chbuff=chbuff|0x80;
   if (c&0x02) chbuff=chbuff|0x40;
   if (c&0x04) chbuff=chbuff|0x20;
   if (c&0x08) chbuff=chbuff|0x10;
   if (c&0x10) chbuff=chbuff|0x08;
   if (c&0x20) chbuff=chbuff|0x04;
   if (c&0x40) chbuff=chbuff|0x02;
   if (c&0x80) chbuff=chbuff|0x01;
   P0=chbuff;
   EPIN=1;
   _nop_();
   EPIN=0;
}

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

void lcdwd(unsigned char d)		 //写数据 	
{  lcdwaitidle();
   RSPIN=1;
   RWPIN=0;
   chbuff=0;
   if (d&0x01) chbuff=chbuff|0x80;
   if (d&0x02) chbuff=chbuff|0x40;
   if (d&0x04) chbuff=chbuff|0x20;
   if (d&0x08) chbuff=chbuff|0x10;
   if (d&0x10) chbuff=chbuff|0x08;
   if (d&0x20) chbuff=chbuff|0x04;
   if (d&0x40) chbuff=chbuff|0x02;
   if (d&0x80) chbuff=chbuff|0x01;
   P0=chbuff;
   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初始化
{  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(0x0f);//(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);
   }
}

void main ()						 //主程序
{	
	EPIN=0;
	lcdreset();						  //LCM初始化
	lcdwda(0,0,"ZC-51 StudyBoard");
	lcdwda(0,1,"  LCM1602 Exp.  ");

	while (1);

}

⌨️ 快捷键说明

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