LPC2132采用SPI模式,操作12864字库芯片老失败,求大神指点

2019-07-15 17:42发布

本帖最后由 bobyang069 于 2015-9-28 21:49 编辑

各位坛友,目前本人遇到个问题,不知道如何下手。还麻烦熟悉的人指点迷津。
显示屏驱动芯片为SSD1306, 字库芯片为GT20L16S1。
主控芯片: STM32F103ZET /LPC2134/AT89S51
通讯方式:SPI通讯模式
显示屏幕接线图
1.jpg

遇到的问题:
使用STM32F103 以及 AT89S52通讯采取SPI通讯,均可正常达到屏幕点亮,且可以正确调取字库文件。
使用STM32F103端口配置如下,端口除开FSO端口设置为上拉输入外,其余的设置为推挽输出。
3.jpg

2.jpg

原文件如下:
12864.zip (2.75 MB, 下载次数: 1)

采取以上配置,能够正常使用模拟SPI通讯达到驱动LCD12864的以及读取字库的效果。但是采用LPC2134后,无法达到读取字库的效果,读取的数据全为0;
LPC2134的配置如下:
  1. #define LCD_CLK_0 IO1CLR = 0x0001<<16 //LCD时钟信号清零
  2. #define LCD_CLK_1 IO1SET = 0x0001<<16 //LCD时钟信号赋1
  3. #define LCD_SI_0  IO1CLR = 0x0001<<17 //LCD/ROM 信号输出0
  4. #define LCD_SI_1  IO1SET = 0x0001<<17 //LCD/ROM 信号输出0
  5. #define LCD_DC_0  IO1CLR = 0x0001<<18 //LCD控制信号 0-写命令
  6. #define LCD_DC_1  IO1SET = 0x0001<<18 //LCD控制信号 1-写数据
  7. #define LCD_CS_0  IO1CLR = 0x0001<<19 //LCD使能信号
  8. #define LCD_CS_1  IO1SET = 0x0001<<19 //LCD失能信号
  9. #define Rom_SO    (IO1PIN>>20)                   //Rom接收数据
  10. #define Rom_CS_0  IO1CLR = 0x0001<<21 //Rom 使能信号
  11. #define Rom_CS_1  IO1SET = 0x0001<<21 //Rom 失能信号
复制代码
  1. #define     LC64        0xA0
  2. #define         KEYF        (0xf<<17)
  3. #define     ROMF    (0x01<<20)
  4. #define     ENAF    (0x1 <<28)
  5. #define     ENIF    (0x1 <<27)
  6. //#define     ENBF    (0x1 <<27)
  7. #define     DIGITAL  0xffff0000
  8. #define         DIGITAL_ALL        (1<<6|1<<12|1<<13|1<<10)
  9. #define         DIGITAL_1        (1<<6)
  10. #define         DIGITAL_2        (1<<10)
  11. #define         DIGITAL_3        (1<<12)
  12. #define         DIGITAL_4        (1<<13)

  13. void Button_init(void)
  14.         {
  15.             PINSEL1 &= ~0x3FC;                                // 连接GPIO        
  16.                 IO0DIR  &= ~KEYF;                                        // 管脚输入
  17.         }

  18. /*********************************************************************
  19. *函数名:  数码管引脚初始化
  20. *输入参数:无
  21. *说明:PORT1.16-PORT1.21分别对应管脚:LCD_CLK,LCD_SI,LCD_DC,LCD_CS,Rom_SO,Rom_CS
  22. *
  23. *
  24. **********************************************************************/
  25. void Digital_init(void)
  26.         {
  27.                 PINSEL2 =PINSEL2&(~0x0c);                        //设定PORT1.16-P1.31为普通IO口
  28.                 IO1DIR  |= DIGITAL;                                    // 管脚输出
  29.                 IO1DIR  &= ~ROMF;                                //PORT1.20设置为输入,用于接收字库输出信号
  30.                 IO0SET  |= DIGITAL_ALL;             //位选IO输出高电平 关闭
  31.             IO1SET  |= DIGITAL;                 //段选IO输出高电平 关闭
  32.                 IO1SET  |=ROMF;                                        //设置为上拉模式
  33.         }
复制代码
使用以上配置,可以完成对芯片的驱动,如采用自编字库,可以显示,但是无法读取ROM字库内的信息
具体程序如下:
12864_lpc.zip (350.31 KB, 下载次数: 0)
百思不得其解啊,看看各位坛友能不能给支支招。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
bobyang069
1楼-- · 2019-07-15 21:38
自己顶~~~
bobyang069
2楼-- · 2019-07-15 23:14
自己顶自己顶啊,大神大神块出现啊
bobyang069
3楼-- · 2019-07-16 01:02
结贴。原因找到了,和程序无关,是硬件问题。由于是在原有的硬件上弄LCD12864升级,原先接口部分是通过74LS235 再引出的。当时引脚全是输入,所以没问题,现在读取ROM信号时,有个引脚需要输入,但是由于将芯片的DIR锁死了反向,无法从B将数据传输到A端(芯片引脚端),导致了读取ROM失败。
所以设计程序时,还得多喝硬件结合的看。

一周热门 更多>