本帖最后由 西窗雪 于 2017-5-29 16:12 编辑
手里的LPC824放了好久的时间,现在这段时间比较闲,这几天有时间与心情。于是又开始折腾了。本来,收到824板子的第一个想法是用来驱动51单片机开发板的外设。而普中的51板子上,可以试试的(我手头上有的、还有点玩头的)就只有LCD了,我手头的LCD有两个,一240*400的彩屏和64*128的单色屏。 本来以为breakout可以直接放在普中的板子上就开始搞事情的,移植到一半发现12864的片选引脚和数据位最高位对应breakout的同一个引脚(P0_23)。好吧,那就用杜邦线吧,彩屏的引脚太多了,数数至少要接21根线,果断放弃。那就试试12864吧。 下面说说我移植过程里的主要工作,这是12864的资料,普中的光盘里有的
移植的工程是在824Lite的例程文件里的\SDK\app_example\blinky例程的基础上进行修改的。添加我自己以前修改的128464的文件后,修改相应的宏定义 这里要说一下的是,我一向认为,8位数据位可以一次写入要比依次操作8个IO要好(这好像是废话)。好吧,其实为了一次写入8个IO的数据,我还在论坛找了下,反正我是没找到,后来在例程里看到下面这个操作。 LPC_GPIO_PORT->DIR[0]= 0x00FF0000; 这是设置0_16到23IO为输出,后面经过几次试验找到了更多的一次操作多个IO的办法。 12864移植里要修改的地方就只有和IO相关的宏定义和时序相关的延时函数。IO相关的宏定义如下: #defineDATA_PORT(x) (LPC_GPIO_PORT->SET[0])|=(x<<16);(LPC_GPIO_PORT->CLR[0])|=(~(x<<16)&0xFF0000)//SET[0]只能将IO置1,不能置0。置0要用CLR[0] #defineLCD12864_RW (LPC_GPIO_PORT->B[0][26]) #defineLCD12864_RS (LPC_GPIO_PORT->B[0][25]) #defineLCD12864_RD (LPC_GPIO_PORT->B[0][24]) #defineLCD12864_CS (LPC_GPIO_PORT->B[0][27]) #defineLCD12864_RSET (LPC_GPIO_PORT->B[0][28]) 好吧,8位数据我不是一次写入的,是两次。但似乎也比8次好吧^_^。
在修改延时相关的函数时,我发现824的程序跑得好像也还比较快的。本来是准备用软件仿真里看看下面这个函数要多久的时间, void_nop_(void)//应1us左右时间 { unsigned int i=19; while(i--); } 无奈软件仿真不成功。好了,那我就试试单步调试吧,奇怪的是我居然在MDK5找不到运行时间,网友说的在最右下角的t0,t1,t2有到是有,但为啥一直是0.000000。好吧其实我是成功显示后再进行上面的那些。要说为什么,因为这个参数是我移植到STM32里的参数,我开始移植时最初的参数就是19。 那么,在824和STM32里这个函数所花的时可以看作是一样的吧。那么,问题来了,824主频30MHz(手册上是这么说的),STM32主频72MHz(手册上是这么说的).两者运行上面的程序花的时间差不多。所以我说,824的程序跑得好像也还比较快。
最后的显示结果如下图。
好了,搞完,收工。彩屏的我就不移植了,21根杜邦线想想有些多。移植了估计以后也不会用到,还是算了。 这是整个工程的压缩包,记的解压到LPC824Lite的例程的\SDK\app_example目录下再编译,不然有些文件找不到会报很多错。 |