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

📄 1602lcd_new.c

📁 可以在指定位置开始显示字符串,如未显示完的,会自动翻屏显示.
💻 C
字号:
/*1602LCD最新驱程序
  创建日期: 2008-10-08 20:42
  创建人:周勇
  版本:V2.0

  备注:1602LCD数据口是P0口
  ***因检测液晶忙状态不稳定,所以用延时来替代***

  字符显示范围是0~15;
*/
#include <stc89c51.h>
#include <intrins.h>
#define   uchar    unsigned char
#define   H    1
#define   L    0
 sbit RS=P3^0; //   数据/命令选择端
 sbit RW=P3^1;  //    读/写选择端
 sbit E=P3^2;    //      使能信号

void longtime (void);
void delay (uchar t);
void w_1602_command (unsigned char temp);  //写命令
void w_1602_data (uchar temp);	//写数据
//****************1602液晶操作*************************************	  函数声明
void display_char (uchar x,uchar y,uchar temp);	  //指定位置显示字符 X取值范围(1--16),Y取值范围(1--2)
void display_long_char(uchar x,uchar y,uchar *pa);	 //指定位置开始显示字符串  X取值范围(1--16),Y取值范围(1--2)
void init_lcd (void);
//***************************************************************	函数声明
//长时间延时,用于换屏时的显示延时
void longtime (void)
 {
   unsigned int k,i;
   for (i=0;i!=650;i++)
    {
	  for (k=0;k!=400;k++)
	   {_nop_ ();}
	}
 }
//延时
void delay (uchar t)
{
 char t1;
 for (;t!=0;t--)
  {
  	for (t1=120;t1!=0;t1--)
	 {_nop_ ();}
  }
}
//写指令
void w_1602_command (unsigned char temp)
{
 RS=L;
 RW=L;
 P0=temp;
 E=0;
 E=1;
 delay (10);
}
//写数据
void w_1602_data (uchar temp)
{
 RS=H;
 RW=L;
 P0=temp;
 E=0;
 E=1;
 delay (10);
}
//任意位置显示字符
//X设置水平位置(1---16),Y设置第一行,或第二行.TEMP是显示的数据
void display_char (uchar x,uchar y,uchar temp)	 
{
 uchar addr;
 if (y==1) addr=0x80+x-1;
 if (y==2) addr=0x80+0x40+x-1;
  w_1602_command (addr); 
  w_1602_data (temp);
}
//显示任意长度字符串

/*程序描述
 可以对任意长度的字符串进行显示,如显示内容超过32字符,则延时显示一下,并换屏显示,直到所有字符显示完毕
 
 其中," ~ "为显示的回车符(换行符)*/
void display_long_char(uchar x,uchar y,uchar *pa)
{
 uchar addr;
 for (;*pa!='\0';pa++,x++)	
  {
    if (*pa=='#') {y=y+1;x=0;continue;}  //  #为换行符,continue为结束本次循环,使换行后不显示任何字符
    if (x>16) {y=y+1;x=1;}
	if (y==1) addr=0x80+x;
    if (y==2) addr=0x80+0x40+x;
	if (y>2) {x=1;y=1;longtime();w_1602_command (0x01);} //假如一屏没有显示完的情况下,延时一会儿,并清屏一次,复位坐标显示
    display_char (x,y,*pa);
  }
}
//液晶初始操作
void init_lcd (void)
{
 delay (15);
 w_1602_command (0x38);
 delay (5);
 w_1602_command (0x38);
 delay (5);
 w_1602_command (0x38);
 delay (5);
 w_1602_command (0x38);	//显示模式设置
 w_1602_command (0x08);	//显示关闭
 w_1602_command (0x01);	//显示清屏
 w_1602_command (0x06);	//显示光标移动设置
 w_1602_command (0x0c);
}

⌨️ 快捷键说明

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