查看: 3423|回复: 2

[分享] LPC824单色LCD(ST7565)显示移植

[复制链接]
  • TA的每日心情
    慵懒
    2019-7-14 14:05
  • 签到天数: 484 天

    连续签到: 1 天

    [LV.9]以坛为家II

    8

    主题

    854

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1991
    最后登录
    2019-7-14
    发表于 2017-5-29 16:02:07 | 显示全部楼层 |阅读模式
    本帖最后由 西窗雪 于 2017-5-29 16:12 编辑

    手里的LPC824放了好久的时间,现在这段时间比较闲,这几天有时间与心情。于是又开始折腾了。本来,收到824板子的第一个想法是用来驱动51单片机开发板的外设。而普中的51板子上,可以试试的(我手头上有的、还有点玩头的)就只有LCD了,我手头的LCD有两个,一240*400的彩屏和64*128的单色屏。
           本来以为breakout可以直接放在普中的板子上就开始搞事情的,移植到一半发现12864的片选引脚和数据位最高位对应breakout的同一个引脚(P0_23)。好吧,那就用杜邦线吧,彩屏的引脚太多了,数数至少要接21根线,果断放弃。那就试试12864吧。
    下面说说我移植过程里的主要工作,这是12864的资料,普中的光盘里有的
    12864资料.PNG





    移植的工程是在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]只能将IO1,不能置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
    那么,在824STM32里这个函数所花的时可以看作是一样的吧。那么,问题来了,824主频30MHz(手册上是这么说的)STM32主频72MHz(手册上是这么说的).两者运行上面的程序花的时间差不多。所以我说,824的程序跑得好像也还比较快。



           最后的显示结果如下图。
    结果1.png 结果2.png

           好了,搞完,收工。彩屏的我就不移植了,21根杜邦线想想有些多。移植了估计以后也不会用到,还是算了。
    这是整个工程的压缩包,记的解压到LPC824Lite的例程的\SDK\app_example目录下再编译,不然有些文件找不到会报很多错。
    lcd12864.rar (35.77 KB, 下载次数: 9)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-14 14:05
  • 签到天数: 484 天

    连续签到: 1 天

    [LV.9]以坛为家II

    8

    主题

    854

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1991
    最后登录
    2019-7-14
     楼主| 发表于 2017-5-29 16:35:39 | 显示全部楼层
    对了,Board_Init();函数需要把下面几行注释掉,不然IO口被初始化为SPI,IIC 之类的就不能做普通IO使用了

            /* Initialize the LEDs */
            //Board_LED_Init();
            //Board_Key_Init();
    //        Init_SPI_PinMux();
    //        Init_I2C_PinMux();
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    723

    主题

    6382

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25481
    最后登录
    2025-9-9
    发表于 2017-5-31 09:20:08 | 显示全部楼层
    谢谢分享!
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-10 03:22 , Processed in 0.086164 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表