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);
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章