LCD1602和LCD12864液晶四位显示

发布时间:2019-04-13 18:35:04   来源:文档文库   
字号:

LCD1602LCD12864液晶显示

LCD1602LCD12864是常用的液晶显示器件,与单片机连接有8位、4位和串口方式。8位显示时,首先要选择单片机的一个8位端口与液晶的数据引脚(D7-D0)相连还需另选一个端口与RSRWE三个控制引脚相连多余5个这个端口引脚与RSRWE三个控制引脚构成互斥关系,造成程序编程设计上的难度,如果舍弃这五个引脚,则需占用单片机的两个端口引脚才能完成液晶显示。在复杂电路设计中由于端口限所以造成设计无法完成,须采用更多端口引脚的单片机才能完成设计。

本文利用LCD1602LCD12864均具有的四显示方式,8位数据分成高四位和四位分时传输,将单片机的低四位与液晶屏的高四位连接,将单片机的高四位与RSRWE三个控制引脚连接,完成了只用单片机一个端口即可完成显示任务,给设计带来极大的方便

1LCD1602显示例

下面的一个例子是使用P0口的4位连接到LCD1602的高4位数据线。RSRWE则分别连接到P0.4P0.5P0.6 。只用一个端口即完成了与LCD1602的数据传输。如图2这里要特别指出LCD1602的低四位虽然不用,但也要如图中所示那样通过1K电阻接高电平,否则LCD1602是无法工作的。

2 1602连接图

源代码:

/*

* 1602.h

* Author: 程静涛

*/

#ifndef _u1602_H_

#define _u1602_H_

#define uchar unsigned char

#define uint unsigned int

sbit RS =P0^4;

sbit RW=P0^5;

sbit EN =P0^6;

//延时程序

void delay1(uint i)

{

uint j;

while(--i!=0)

{

for(j=0;j<255;j++);

}

}

//写指令

Void W_com(uchar com)

{

EN=0;

RS=0;

RW=0;

P0=0x80|((com & 0xf0)>>4);//送高四位数据到P0口,同时保持P0高四位。

EN=1;

delay1(5);

EN=0;

P0=0x80|(com & 0x0f); //四位数据到P0口,同时保持P0高四位。

EN=1;

delay1(5);

EN=0;

}

//写数据

void W_datd(uchar dat)

{

EN=0;

RS=1;

RW=0;

P0=0x90|((dat & 0xf0)>>4);//送高四位数据到P0口,同时保持P0高四位。

EN=1;

delay1(5);

EN=0;

P0=0x90|(dat & 0x0f); //送低四位数据到P0口,同时保持P0高四位。

EN=1;

delay1(5);

EN_0;

}

//lcd初始化程序

void lcdinit()

{delay1(30);

W_com(0x02);//光标归位

W_com(0x28);//四位传输

W_com(0x0c);// 显示功能开,无光标、无闪烁。

W_com(0x06);// 写入新数据后光标右移

W_com(0x01);//清屏

delay1(10);

}

//在指定位置显示一个字符,x为行,Y为列;

void displaydat(uchar x,uchar y,uchar one)

{

uchar add;

if (x == 0) add=0x80+y;

else add=0xc0+y;

W_com(add);

W_datd(one);

}

//显示字符串

void displaystr(uchar x,uchar y,uchar *s)

{

y=y&0x0f;

while(*s)

{

displaydat(x,y,*s);

y++;

s++;

}

}

#endif /* 1602_H_ */

主程序

/* Processor: AT89C52

* Compiler: Keil for 8051

*/

#include

#include <stdio.h>

#include "u1602.h"

#define uint unsigned int

#define uchar unsigned char

uchar table[]="LCD1602 Line 4";

uchar table1[]="Welcome to study";

void main(void)

{ lcdinit();

displaystr(0,0,table);

delay1(5);

displaystr(1,0,table1);

// Write your code here

while (1)

;

}

2LCD12864显示例

下面的一个例子是使用P0口的4位连接到LCD12864的高4位数据线。RSRWE则分别连接到P0.4P0.5P0.6 。只用一个端口即完成了与LCD12864的数据传输。如图3。这里要特别指出LCD12864的低四位虽然不用,但也要如图中所示那样通过1K电阻接高电平,否则LCD12864是无法工作的。如图3

3 LCD12864显示

#include

#include

#include

#define dely(); {_nop_();_nop_();_nop_();_nop_();};

#define uchar unsigned char

#define uint unsigned int

/*12864 端口定义*/

#define LCD_data P0 //数据口

sbit RS = P0^4; //寄存器选择输入

sbitRW = P0^5; //液晶读/写控制

sbitE = P0^6; //液晶使能控制

uchar code str1[] = {"欢迎学习单片机"};

uchar code str2[] = {"字符显示模式"};

uchar code str3[] = {"LCD12864 "};

uchar code dis4[] = {"交流QQ:812549630 "};

uchar code table1[]={//自定义字库

0x02,0x00,0x03,0x80,0x03,0x83,0xFF,0xFF,0xFF,0xFF,0xC3,0x83,0xFF,0xFF,0xFF,0xFF,

0xC3,0x83,0xFF,0xFF,0xFF,0xFF,0x03,0x80,0x03,0x82,0x03,0xFE,0x01,0xFC,0x00,0xF8,//

0x00,0x0C,0x7F,0xFE,0x7F,0xFF,0x00,0x1C,0x00,0x78,0x01,0xE0,0x01,0xC0,0x00,0xC0,

0xFF,0xFF,0x7F,0xFF,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x1F,0xC0,0x0F,0xC0,0x03,0x80,//

0x03,0x18,0x33,0x1C,0x33,0x1C,0x33,0x18,0x33,0x18,0xFF,0xFF,0xFF,0xFF,0x33,0x18,

0x33,0x18,0x33,0x18,0x33,0xF8,0x33,0xF8,0x30,0x01,0x30,0x03,0x3F,0xFF,0x1F,0xFE,//

0x30,0x0C,0x3F,0xFE,0x3F,0xFC,0x33,0xCC,0x3F,0xFC,0x3F,0xFC,0x33,0xCC,0x3F,0xFC,

0x3F,0xFC,0x0F,0x60,0x1E,0x30,0x3E,0x3C,0x76,0x3E,0xE6,0x37,0x0E,0x30,0x3C,0x30};//

unsigned char code Photo1[] = //图形

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,

0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x18,

0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x14,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF2,0xFE,

0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF2,0x88,

0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF7,0xE8,

0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0xA8,

0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xAA,

0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0xEE,

0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xAC,

0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0x8C,

0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x13,

0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x20,

0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xF0,0x40,

0xF0,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x30,

0xF0,0x00,0x00,0x00,0x00,0x0F,0xFE,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,

0xF0,0x00,0x00,0x00,0x00,0x3F,0xFF,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0xF7,0xFF,

0xF0,0x00,0x00,0x00,0xFE,0x7F,0x0F,0xC0,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x20,

0xF0,0x00,0x00,0x03,0xFF,0xF8,0x03,0xE0,0x00,0x00,0x3C,0x00,0x00,0x00,0xF3,0xFE,

0xF0,0x00,0x00,0x07,0xFF,0xF0,0x3F,0xFF,0x80,0x00,0x3C,0x00,0x00,0x00,0xF2,0x22,

0xF0,0x00,0x00,0x0F,0x03,0xE0,0x3F,0xFF,0x83,0xFC,0x3C,0x00,0x00,0x00,0xF2,0x22,

0xF0,0x00,0x0F,0xEE,0x01,0xC0,0x3F,0xFF,0x9F,0xFF,0x3C,0x1F,0xC0,0x00,0xF2,0x22,

0xF0,0x00,0x3F,0xFE,0x01,0xE0,0x3B,0xBB,0xFF,0xFF,0xFE,0xFF,0xF8,0x00,0xF2,0x22,

0xF7,0xE0,0xFF,0xFC,0x01,0xE0,0x3B,0xBB,0xF8,0x03,0xFF,0xFF,0xFC,0x00,0xF2,0x22,

0xFF,0xF9,0xF0,0x1C,0x00,0x00,0x3B,0xBB,0xF0,0x00,0xFF,0xE0,0x3E,0x00,0xF0,0x20,

0xFF,0xFF,0xC0,0x00,0x00,0x00,0x3B,0xBB,0xC0,0x03,0xFF,0xC0,0x0F,0x00,0xF0,0x00,

0xF8,0x3F,0xBF,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xFB,0xFF,0xE0,0x07,0xFE,0xF0,0x00,

0xF0,0x0F,0x3F,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xFB,0xFF,0xC0,0x03,0xFE,0xF3,0xFC,

0xF0,0x0E,0x3F,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xFB,0xFF,0xC0,0x07,0xFE,0xF2,0x04,

0xF0,0x1C,0x3C,0x00,0x00,0xE0,0x3B,0xBB,0x9F,0xF9,0xFF,0xC0,0x0F,0x80,0xF3,0x0C,

0xF0,0x1C,0x3F,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xF9,0xFF,0xC0,0x0E,0x00,0xF2,0xB4,

0xF0,0x38,0x3F,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xF8,0xFF,0x80,0x1E,0x00,0xF2,0x64,

0xF0,0x38,0x3F,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xFF,0xFF,0xF0,0x1C,0x00,0xF2,0x94,

0xF0,0x30,0x3F,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xFF,0xFF,0xF0,0x1C,0x00,0xF3,0x0C,

0xF0,0x00,0x3F,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xFF,0xFF,0xF0,0x00,0x00,0xF4,0x04,

0xF0,0x00,0x3F,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xFF,0x6F,0xB0,0x00,0x00,0xF8,0x06,

0xF0,0x00,0x3F,0xFF,0xFF,0xE0,0x3B,0xBB,0x9F,0xFF,0xFF,0xB0,0x00,0x00,0xF0,0x03,

0xF0,0x00,0x3F,0xFF,0xFF,0xEF,0xFB,0xBB,0x9F,0xFF,0xFF,0xB0,0x00,0x00,0xF0,0x00,

0xF7,0xFF,0xFF,0xFF,0xFB,0x6F,0xFB,0xBB,0x9F,0xFF,0x7F,0xF0,0x00,0x00,0xF0,0x00,

0xF7,0xFF,0xFF,0xFF,0xFF,0x6F,0xFB,0xBB,0x9F,0xFF,0x7F,0xF0,0x00,0x00,0xF1,0x0C,

0xF7,0xFF,0xFF,0xFF,0xFF,0x6F,0xFB,0xBB,0x9F,0xFF,0xFF,0xB0,0x00,0x00,0xF2,0x18,

0xF7,0xFF,0xFF,0xFF,0xFF,0x6F,0xFB,0xBB,0x9F,0xFF,0xFF,0xB0,0x00,0x00,0xF7,0xBE,

0xF7,0xFF,0xFF,0xFF,0xFF,0x6F,0xFB,0xBB,0x9F,0xFF,0x7F,0xF0,0x00,0x00,0xFD,0x22,

0xF7,0xFF,0xFF,0xFF,0xFF,0x6F,0xFB,0xBB,0x9F,0xFF,0x7F,0xFF,0xFF,0xFF,0xF3,0x3E,

0xF7,0xFF,0xFC,0x00,0x07,0x6F,0xFB,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFD,0x22,

0xF7,0xFF,0xFC,0x00,0x07,0x6F,0xFB,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xF1,0xBE,

0xF7,0xFF,0xFC,0x00,0x00,0x0F,0xFB,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xF3,0x94,

0xF7,0xFF,0xFD,0xBB,0xF7,0x6F,0xFB,0xFB,0xBB,0xFF,0x7F,0xFF,0xFF,0xFF,0xF7,0x94,

0xF7,0xFF,0xFF,0xBB,0xF7,0x6F,0xFB,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xF9,0x94,

0xF7,0xFF,0xFF,0xBB,0xF7,0x6F,0xFB,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFE,0xF7,0x94,

0xF7,0xFF,0xFD,0xBB,0xF7,0x6F,0xFB,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFE,0xF9,0x14,

0xF7,0xFF,0xFD,0xBB,0xB7,0x6F,0xFB,0xFB,0xBB,0xFF,0x7F,0xFF,0xFF,0xFE,0xF7,0xA4,

0xF7,0xFF,0xFF,0xBB,0xF7,0x6F,0xFB,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFE,0xF9,0x42,

0xF7,0xFF,0xFF,0xBB,0xF7,0x6F,0xFB,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xF6,0x01,

0xF7,0xFF,0xFD,0xBB,0xF7,0x6F,0xFB,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xF0,0x00,

0xF7,0xFF,0xFD,0xBB,0xF7,0x6F,0xFB,0xFB,0xBB,0xFF,0x7F,0xFF,0xFF,0xFF,0xF0,0x00,

0xF7,0xFF,0xFF,0xBB,0xF7,0x6F,0xFB,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFE,0xF0,0x00,

0xF7,0xFF,0xFF,0xBB,0xF7,0x6F,0xFB,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFE,0xF0,0x00,

0xF7,0xFF,0xFD,0xBB,0xB7,0x6F,0xFB,0xFF,0xFF,0xBF,0x7F,0xBF,0xFF,0xFE,0xF0,0x00,

0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,

0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,

0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00

};

void Disply(uchar X,uchar Y); //确定显示位置

/*延时子程序*/

void Delay1ms(unsigned int count)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<120;j++);

}

/*******************************************************************/

/*写指令数据到LCD /*RS=LRW=LE=高脉冲,D0-D7=指令码 */

/****************************************************************/

void Lcd_com1(uchar cmd)

{

Delay1ms(10);

RS = 0;

RW = 0;

E = 0;

_nop_();

_nop_();

LCD_data=0x80|((cmd & 0xf0)>>4);

dely();

E = 1;

dely();

E = 0;

// LCD_data=(LCD_data&0xf0)|(cmd & 0x0f);

// dely();

//E = 1;

// dely();

// E = 0;

}

/****************************************************************/

写指令数据到LCD *RS=LRW=LE=高脉冲,D0-D7=指令码 /****************************************************************/

void Lcd_com(uchar cmd)

{

Delay1ms(10);

RS = 0;

RW = 0;

E = 0;

_nop_();

_nop_();

LCD_data=0x80|((cmd & 0xf0)>>4);

dely();

E = 1;

dely();

E = 0;

LCD_data=0x80|(cmd & 0x0f);

dely();

E = 1;

dely();

E = 0;

}

/****************************************************************/*写显示数据到LCD *RS=HRW=LE=高脉冲,D0-D7=数据 /*******************************************************************/

void LCD_Write(uchar dat)

{

Delay1ms(10);

RS = 1;

RW = 0;

E = 0;

LCD_data= 0x90|((dat & 0xf0)>>4);

dely();

E = 1;

dely();

E = 0;

LCD_data=0x90|(dat & 0x0f);

dely();

E = 1;

dely();

E = 0;

}

/***************************************************************/

LCD初始化设定

/**********************************************************/

void lcd_init()

{

Lcd_com1(0x20); //扩充指令操作

Delay1ms(10);

Lcd_com(0x20); //基本指令操作

Delay1ms(10);

Lcd_com(0x0C); //显示开,关光标

Delay1ms(10);

Lcd_com(0x01); //清除LCD的显示内容

Delay1ms(10);

}

/*********************************************************/

/* 设定显示字符位置 ,将字符输出到液晶显示*/

/*********************************************************/

void Disply(uchar X,uchar Y, uchar *str)

{

uchar pos;

if (X==0)

{X=0x80;}

else if (X==1)

{X=0x90;}

else if (X==2)

{X=0x88;}

else if (X==3)

{X=0x98;}

pos = X+Y ;

Lcd_com(pos); //显示地址

while(*str!='\0')

{

LCD_Write(*str);

str++;

}

}

/*********************************************************/

/* 显示的自定义字符 */

/*********************************************************/

void Write_CGRAM(unsigned char table[])

{unsigned char i,tmp=0x00;

Lcd_com(0x40); //开始写入你要显示的自定义字符、汉字代码

for(i=0;i<128;i++)

{

LCD_Write(table[i]);//写入点阵数据,四字符共128字节

Delay1ms(5);

}

Lcd_com(0x80); //从第一行第一列开始显示

for(i=0;i<4;i++) //显示自定义字符

{ LCD_Write(tmp); //自定义高位编码

LCD_Write(tmp+2*i); //自定义低位编码

Delay1ms(5);

}

}

/**************************/

图形显示

/***************************/

void DisplayGraphic(unsigned char code *adder)

{

int i,j;

Lcd_com(0x24); //设定扩展指令 RE=1

/*******将图形信息装到GDRAM*****/

for(i=0;i<32;i++)

{ for(j=0;j<8;j++)

{Lcd_com(0x80 + i); //设置显示列地址

Lcd_com(0x80+j); //设置显示行地址

LCD_Write(adder[i*16+j*2]);

LCD_Write(adder[i*16+j*2+1]);

}

}

for(i=32;i<64;i++) //

{for(j=0;j<8;j++)

{Lcd_com(0x80 + i-32); //设置显示列地址

Lcd_com(0x88+j); //设置显示行地址

LCD_Write(adder[i*16+j*2]);

LCD_Write(adder[i*16+j*2+1]);

}

} Lcd_com(0x36); //设定:RE=1: 并打开图形显示

}

/*主函数*/

void main()

{

lcd_init();//初始12864

Disply(0,0 ,str1) ; // "欢迎学习单片机";

Disply(1,0, str2) ; //"字符显示模式"

Disply(2,0, str3) ; //"LCD_12864"

Disply(3,0, dis4) ; //"交流QQ:812549630 "

Delay1ms(655) ;

Lcd_com (0x01); //清除显示DDRAM

Delay1ms(10);

Write_CGRAM(table1);//显示"电子世界"自定义字符

Delay1ms(655) ;

Lcd_com (0x01); //清除显示DDRAM

Delay1ms(65) ;

DisplayGraphic(Photo1); //图形显示

while(1)

{;}

}

本文来源:https://www.2haoxitong.net/k/doc/bbdffb1c6aec0975f46527d3240c844768eaa076.html

《LCD1602和LCD12864液晶四位显示.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式