OCMJ8X15B金鹏液晶屏驱动程序+字库规律

   笔者最近在弄金鹏的液晶屏,现在这个年代了,不跑点液晶屏程序实在是说不过去,如果能上3G模块,wifi模块那就更加好了。

    这个液晶屏相对于其它液晶屏,它没有什么特别特殊的地方,前段时间,笔者用了一个不带字库的液晶屏,那叫一个痛苦,每次显示字符或者汉字还要算出它的字符码,而且它的逻辑比较难懂,不过最后写了一个函数,即在横坐标,纵坐标确定的后,写一个字符,液晶屏程序的封装就应该这样简单!

   这个液晶屏的时序相信大家都看过,也都有自己的程序,笔者这次用的是LPC1700系列中的LPC1766,但是根据自己的程序结合着PDF上的时序,对照了很长时间,觉得一点问题都没有,最后还是出不来一个汉字,无奈之下,只能求助自己的导师,导师说,这个液晶屏许多人都做不出来,不是没有理解时序,而是时序对的情况下,写的代码也要匹配,否则看似时序对,其实也不能运行。

   时序的问题,大家看pdf就一目了然了,pdf连接如下:http://wenku.baidu.com/view/789a261ca300a6c30c229ff7.html

 

   下面附上LPC1766的初始化和时序代码,希望对大家有帮助:

#define LCD_REQ		(1 << 28)                  
#define LCD_BUSY 	(1 << 27)


 

void LCDInit(void)
{
	FIO1CLR |= LCD_REQ;				   //REQ置为低电平
	myDelay(10);					   //延迟,等待信号稳定
	FIO1CLR |= (0xff << 18);		  	   //将输出数据端口置为0
}

void sendOneByte(uint8_t dat)
{
	while(FIO1PIN & LCD_BUSY);				//如果忙就一直等待,后期需要加延迟
    	FIO1SET	|= 	(dat <<18);				//在P1.18~P1.25上输出为1的数据
   	myDelay(10);						//延迟等待数据稳定
	FIO1SET |=	LCD_REQ;				//REQ置为高,告诉LCD可以取数据

	while((FIO1PIN & LCD_BUSY )== 0);		        //等待LCD响应接收数据
	FIO1CLR |=	LCD_REQ;				//REQ置为低,撤销请求信号

	myDelay(200);
	FIO1CLR |=  (0xff << 18);
}


 

  笔者用的是P1.18~P1.26表示DB0~DB7,P1.27为BUSY端,设置为输入,P1.28为REQ端

 

  而这个字库也有一定的规律,比如“分“这个字,程序会解释为两个字节是183,,214(一个汉字为两个字节,高字节为183,低字节为214),而在字库的区位表中,它对应的是(23,54)聪明的你或许已经看出来它的规律了,没错它就是把汉字被程序解释后,高字节和低字节都减去160,就可以得到你输入的汉字,这是非常方便的

  这里真是要给NXP一点建议,一个引脚输出高低,你至于每次都要用IOSET和IOCLR吗?这样很不方便,不如P1.18=1 就输出高电平这样来的直接,这虽然是51单片机的方法,但是是一个可取的方法,是值得学习的,

  而且一个引脚难道不是输出就是输入码?难道它不能双端的,能输出能输入吗?在通讯中,这个是很重要的,能够大大减少负担,不然每次都要来回切换输入输出的方向,真的很烦人,编程应该方便程序员,而程序员编写的产品应该来方便大众!

 

你可能感兴趣的:(编程,c,产品,通讯)