一、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);
}
}