分享学习12864心得


一、12864基本参数

1.电气参数

电源电压:VDD:+3.0–+5.5V
显示分辨率:128×64点
内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)
内置128个16×8点阵字符
2MHZ时钟频率
通讯方式:串行、并口可选

2.引脚说明

LCD12864的引脚总共有20个,如图:
在这里插入图片描述
在这里插入图片描述3.电路连接原理图
在这里插入图片描述根据引脚图与连接电路看出,3、18引脚已悬空连接,复位引脚RES已接高电压。

二、代码部分

1.得到控制时序

12864存在串行和并行两种方式,此处只有并行写入。对于12864读取数据意义不大,此处只有写入数据。
时序图根据时序图可以得到:
R/W引脚,可以看出在写入数据时始终是处于电平;
使能端En,在写入数据前,拉高电平,而后给一个下降沿,将数据写入到内存当中;
整个流程为:
先给定RS引脚电平,确定是写入指令还是数据,而后R/W引脚指令,准备写入数据;接着使能端En拉高电平,数据此时写入至数据线上,当使能端给定下降沿时,数据被写入至内存中。
如何看懂时序图https://www.21ic.com/jichuzhishi/mcu/shixu/2013-05-31/182781.html

2.指令集

(1)检测忙代码如下:

//在读取指令时,得到的数据首位D7是否为1来判断是否处于Busy状态;
void LCD12864_CheckBusy()
{
	LCD12864_RS=0;
	LCD12864_WR=1;
	LCD12864_E=1;
	while((P0&0X80)==0X80);
	LCD12864_E=0;
}

(2)写入地址代码如下:

void LCD12864_WriteCommand(unsigned char Command)
{
	LCD12864_Busy();
	LCD12864_RS=0;
	LCD12864_WR=0;
	LCD12864_E=1;
	P0=Command; 
	Delay(50);
	LCD12864_E=0;
}

(3)写入数据代码如下:

void LCD12864_WriteData(unsigned char Data)
{
	LCD12864_Busy();
	LCD12864_RS=1;
	LCD12864_WR=0;
	LCD12864_E=1;
	P0=Data; 
	Delay(50);
	LCD12864_E=0;
}

(4)初始化代码如下:

void LCD12864_Init()
{
	LCD12864_PSB=1;
	LCD12864_Busy();
	LCD12864_WriteCommand(0X30);//选定基本指令集
	LCD12864_WriteCommand(0x0C);//显示开00001110
	LCD12864_WriteCommand(0x01);//清除显示
	LCD12864_WriteCommand(0x06);//指定初始位置
}

3.对显示屏写入数据

(1)选定显示位置

void LCD12864_SetLoc(unsigned char line,unsigned char column)
{
	switch(line)
	{
		case 1:
		{
			LCD12864_WriteCommand(0X80+column);
			break;
		}
		case 2:
		{
			LCD12864_WriteCommand(0X90+column);
			break;
		}
		case 3:
		{
			LCD12864_WriteCommand(0X88+column);
			break;
		}
		case 4:
		{
			LCD12864_WriteCommand(0X98+column);
			break;
		}
		default :
			break;
	}
}

(2)写入字符

void LCD12864_ShowChar(unsigned char line,unsigned char column,unsigned char Char)
{
	LCD12864_SetLoc(line,column);
	LCD12864_WriteData(Char);
}

(3)写入字符串

void LCD12864_ShowString(unsigned char line,unsigned char column,unsigned char String[])
{
	unsigned char i;
	LCD12864_SetLoc(line,column);//LCD12864_WriteCommand(0x1B);
	for(i=0;String[i]!='\0';i++){LCD12864_WriteData(String[i]);}
}

(4)主函数

#include <REGX52.H>
#include "LCD12864.h"
void main()
{
	LCD12864_Init();
	LCD12864_ShowString(1,0,"欢迎来到我的世界");
	
	while(1)
	{
		
	}
}

总结

对于12864的基本指令集,与1602原理一模一样,所以只需要将1206的使用掌握彻底,对于12864的基本指令级集掌握起来不是很困难。

参考文章:

https://blog.csdn.net/lin5103151/article/details/103467838

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值