LCD1602使用与实例

一、LCD的使用(出自LCD1602数据手册)

1、技术参数

在这里插入图片描述

2、接口信号说明

在这里插入图片描述

3、基本操作步骤与时序


在这里插入图片描述

4、状态字说明

在这里插入图片描述

5、RAM地址

控制器内部带有80X8位(80字节)的RAM缓冲区。
在这里插入图片描述

6、指令说明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、初始化过程

延时15ms
写指令 38H(不检测忙信号)
延时5ms
写指令38H(不检测忙信号)
延时5ms
写指令38H(不检测忙信号)
(以后每次写指令,读/写数据操作之前均需检测忙信号)
写指令38H;显示模式设置
写指令08H;显示关闭
写指令01H;显示清屏
写指令06H;显示光标移动设置
写指令0CH;显示开及光标设置

二、LCD1602使用实例

#ifndef __LCD1602_h__
#define __LCD1602_h__
 
#include "reg52.h"
 
typedef unsigned char uchar;
typedef unsigned int uint;
  
#define show P1//P1为显示数据总线
#define LCD_CLEAR_SCREEN	0x01      // 定义清屏
#define LCD_HOMING  		0x02      // 光标返回原点指令

sbit RS=P2^0;//控制/数据指示
sbit RW=P2^1;//读/写指示
sbit EN=P2^2;//使能
 
void delay(uint x);  //延时
void sentcode(uchar cod);  //发送控制码
void sentdata(uchar dat);		//发送显示数据
void initlcd(void);					//LCD初始化
void play(uchar a,uchar b,uchar dat);
void Show(uchar x , uchar y , char *p , uint speed , uint delay , uchar clear);
void lcd_clear(void);

#endif
#include "LCD1602.h"

/***延时函数****/
void delay(uint x)
{
	uint i;
	for(i=0;i<x;i++);
}


/*给显示屏发送控制码*/
void sentcode(uchar cod)
{
	show=cod;
	RS=0;
	EN=1;
	delay(10);
	EN=0;
	delay(10);
}


/*****给显示屏发送显示数据*****/
void sentdata(uchar dat)
{
	show=dat;
	RS=1;
	EN=1;
	delay(10);
	EN=0;
	delay(10);
}

			 
/******显示屏初始化,只定不读*******/
void initlcd(void)
{
  	RW=0;
	sentcode(0x0e);
	sentcode(0x3c);
	sentcode(0x01);
  	delay(100);
  
}


/*******在某行某列显示一个字符******/
void play(uchar a,uchar b,uchar dat)
{
	uchar dress;
	if(b)
	dress=0xc0+a;
	else
	dress=0x80+a;
	sentcode(dress);
	sentdata(dat);
} 

/*
sudu: 显示每一个字符后停留的时间
yanshi:  显示完一屏后停留的时间
clear:  显示完一屏后是否进行清屏操作,0为不清屏,其余为清屏
*/
void Show(uchar x , uchar y , char *p , uint sudu , uint yanshi , uchar clear)
{
  uchar dress;
  while(*p!='\0')
  {
    if(y)
    {
      dress = 0xc0+x;
      sentcode(dress);
      sentdata(*p);
      p++;
      x++;
      if((dress-0xc0)>14)
      {
        dress = 0x80+x;
        y=0;
        x=0;
        delay(yanshi);
        if(clear)
        {
          sentcode(LCD_CLEAR_SCREEN);
        }
      }
      
    }
    else
    {
      dress = 0x80+x;
      sentcode(dress);
      sentdata(*p);
      p++;
      x++;
      if((dress-0x80)>14)
      {
        dress = 0x80+x;
        y=1;
        x=0;
      }
    }
    delay(sudu);
  }
}


/****清屏操作****/
void lcd_clear(void)
{
 	sentcode(LCD_CLEAR_SCREEN);
	sentcode(LCD_HOMING);
}
#include "reg52.h"
#include "LCD1602.h"
 
sbit beep = P2^3;
sbit LED = P2^4;
/****要显示的字符串,可以定义很多,程序会分屏显示在LCD1602上****/
char code zifu[]="xuaner's zigbee!";
 
void main(void)
{
  initlcd();//初始化LCD1602
  LED =~ LED;
  while(1)
  {
    Show(0,0,zifu,100 , 50000 , 1);//显示字符串在LCD1602上
    delay(60000);//所有字符显示完,停顿一下
	beep=~beep;
	delay(1000);//控制音调频率
	beep=~beep;//控制声音大小
	delay(10);
  }
}
发布了13 篇原创文章 · 获赞 3 · 访问量 1857

猜你喜欢

转载自blog.csdn.net/weixin_44127810/article/details/104172690