KS0108控制的12864液晶屏的反白显示办法

本文详细介绍了12864液晶屏实现反白显示的方法,包括特殊的读取内存数据步骤及具体的C语言实现代码。通过两次使能信号反转完成虚读过程,确保正确数据获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看了许多网上文章,没有清楚介绍12864液晶反白显示的。不才拙见呈给众码友以博一洒;

反白常用的手法是读出液晶屏内存储器的相应数据,然后按位取反,再写入液晶相应内存;12864读取液晶内存的手法比较特别,直接按照时序图写数据不行,它要求使能信号至少完成两次反转才行。

首先命令给予地址,使能信号给予低电平,延时半个周期约200ns

然后,rs,rw,置位。

再延时200ns;

使能信号置位;至此完成一次虚读,不把总线数据读入变量;

再延时450ns,

使能变低;

再延时450ns;

使能变高,这时正确的数据就放到数据总线上了

给P0口高电平0x00;

读数据到变量;然后处理;按位取反;

再写入相同地址就行了;

如此循环64次,完成左半屏的反白,换屏选信号,选择右半屏,重复上面的动作就行了;

附上写屏代码:

/*******************************************************************************
* 函 数 名         : Lcd2864WriteData
* 函数功能		   : 写入一个数据到12864
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/

 void lcd12864_writedat(dat)
{
 unsigned char xh;
	LCD12864_RS = 1;       	//select command,选择数据
	LCD12864_RW = 0;       	//select write,选择写模式
	LCD12864_E  = 0;	   
   	xh=10;				  	//延时140ns以上;5指令周期;;
	while(xh--);
   	LCD12864_E  = 1;	    //使能变高450us;
	DATA_PORT = dat; 		//put command,总线放上命令数据
   	xh=50;					  
	while(xh--);		 	//再延时450us18指令周期;;
   	LCD12864_E  = 0;	 	//下降沿写入数据;
	_nop_();					  //延时10us   

}

附上读数据代码

/*******************************************************************************
* 函 数 名         : Lcd2864ReadData
* 函数功能		   : 从12864的数据区读数据,处理后用;
* 输    入         : 无
* 输    出         : 读到的一个字节,这种液晶要求虚读一次。也就是E使能信号完成两次反转;
*******************************************************************************/

 unsigned char lcd12864_Readdat()
{
 unsigned char xh,dat;
	DATA_PORT=0xff;		    //这句很重要,在要读入数据之前必须把P0口写入0xff;
	LCD12864_E  = 0;
	xh=5;				  	//保证rs和rw在E信号的低电平
	while(xh--);
	LCD12864_RS = 1;       	//选择数据
	LCD12864_RW = 1;       	//选择读模式
   	xh=15;				  	//保证E低电平450ns以上;两次延时共20指令周期;;
	while(xh--);
   	LCD12864_E  = 1;	    //使能变高450us;第一次虚读完成
   	xh=20;					  
	while(xh--);		 	//保持E高电平450nm;
   	LCD12864_E  = 0;	 	//然后E低电平
	xh=20;				  	//保持E低电平450nm
	while(xh--);
   	LCD12864_E  = 1;	    //使能变高锁存12864数据到数据总线;
   	xh=5;					//稳定150nm  
	while(xh--);		 	//再延时450us18指令周期;;
    dat = DATA_PORT; 		//读总线上的数据
   	LCD12864_E  = 0;	 	//给E为低电平准备下次操作;
	return dat;				//返回读数;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值