文档介绍:在这先深呼吸一口气先,学了两个星期的液晶屏,总算能把液晶屏当成一种显示来使用了。算然说不是用的很牛,但是普通的显示数码、字母、图片,还是可以滴~~~会了这些,后面的还难吗!讲一下本人学习的经历吧!毕竟这才是大家所关注的,因为我们可以通过别人的学习经验与自己的进行对比,学习别人更加好的经验。和大家一样,初学液晶一般都是把配套的例程烧到ST中,然后看现象,然后就是在源程序中修改一些东西,看是否能够实现。改到后面的时候,就觉得很没趣,因为东西是别人的,总不能随心所欲的把自己想要显示的一些东西显示在液晶屏上,多多少少会受一些限制。于是就萌生了自己写液晶驱动代码,但是看过液晶源驱动的朋友就发现里面都是一大堆的16进制代码,怎么看也不懂!于是就复制驱动源程序到自己的工程上!毕竟液晶屏上显示一些东西自己才有成就嘛,但是当复制好,写好自己显示字符或者汉字的程序时,才发现一大推错误!于是一狠心就把整个源程序复制,这是它又能正常显示!呵呵呵。。。。其实本人觉得这是一个过程,是初学者都要经历的一个过程。好了!废话了那么多,下面才是最关键的地方:我们知道,商家的开发板一般都可以驱动很多种不同控制器的液晶,所以为了增强程序的移植性,他都会设置好几种芯片驱动程序(本人用的是红牛板),至少红牛是,最让人郁闷的是他的程序代码中的函数名称都是用同一种驱动芯片的名字来命名,让初学者误认为就是这一种芯片控制器,但实际上却不是,看下面一段程序:/*****************************************************************************名称:voidili9320_SetCursor(u16x,u16y)*功能:设置屏幕座标*入口参数:x行座标*y列座标*出口参数:无*说明:*调用方法:ili9320_SetCursor(10,10);****************************************************************************/__inlinevoidili9320_SetCursor(u16x,u16y){if(DeviceCode==0x8989){LCD_WriteReg(0x004e,y);//行LCD_WriteReg(0x004f,0x13f-x);//列}elseif(DeviceCode==0x9919){LCD_WriteReg(0x004e,x);//行LCD_WriteReg(0x004f,y);//列}else{LCD_WriteReg(0x20,x);//行LCD_WriteReg(0x21,y);//列}}虽然函数__inlinevoidili9320_SetCursor(u16x,u16y)是以ILI9320驱动命名的,但是里面却是可以实现好几种不同的控制器的液晶显示所以一定要小心,用之前一定要用仿真器仿真一下,看程序往哪里跑,来确定自己液晶屏是哪一种控制器驱动的。到这会有朋友问,液晶屏的外表一样,驱动也一样吧?如果这样想你就错了,我就是曾经这样想,才白白浪费了我一个星期的时间,到后面才发现自己的控制芯片是另外一种,想死的心都有了!在这就不废话那么多了!要学液晶就要配合手册来学,一个个寄存器的去配置,其实也不难,难的是你看不懂洋文,总想找中文资料却找不到。教大家一个方法,就是用有道词典,不懂哪里点哪里!下面是本人写的程序,液晶控制芯片是SSD1298,尺寸:320*240:。与大家分享一下,希望写得不好的地方,高手点评一下,低手学习一下(包括本人):#include""#include""#include""#include""#include""#include""#include""#include""/****************************************************************************************************函数描述:函数的声明或者宏定义*参数输入:无*参数输出:无*函数说明:((LCD_TypeDef*)LCD_BASE)表示将LCD_BASE看成是一个指针,然后对其强制类型转换0x60000000指向内存的一个地址,从此地址开始赋值。例如:=0x202是指将0x202存放在0x6C000000所指向的内存中,是给LCD_REG赋值,但不是什么偏移地址。*******************************************