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