查看: 15435|回复: 18

[原创] 【LPC54114】+ A3.硬件SPI驱动OLED

[复制链接]
  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
    发表于 2017-4-6 21:40:06 | 显示全部楼层 |阅读模式
    本帖最后由 limale 于 2017-4-6 21:50 编辑

    上一节通过驱动数码管【LPC54114】+ A2.GPIO操作点亮数码管了解了GPIO口的操作,这一节我们尝试用SPI来驱动一块0.96英寸的显示屏。这种oled屏幕,可以用SPI或者IIC来驱动,这里我们使用SPI来驱动管脚定义如下:
    QQ截图20170406212810.jpg
    为了图省事RES、D/C、CS这三个端口我们直接使用板载驱动LED0、LED1、LED2的这三个口。
    QQ截图20170406212840.jpg QQ截图20170406215017.jpg
    根据原理图可以知道我们这里需要配置的是SPI3。
    1. void SPI_oled_Init(void)
    2. {
    3.         spi_master_config_t masterConfig = {0};
    4.                
    5.         /* attach 12 MHz clock to SPI3 */
    6.         CLOCK_AttachClk(kFRO12M_to_FLEXCOMM3);
    7.   /* reset FLEXCOMM for SPI */
    8.   RESET_PeripheralReset(kFC3_RST_SHIFT_RSTn);
    9.         
    10.         /* SPI2 pins */
    11.         IOCON_PinMuxSet(IOCON, 0, 14, (IOCON_FUNC2 | IOCON_MODE_PULLUP | IOCON_GPIO_MODE | IOCON_DIGITAL_EN));  /* SPI3_CS - FLASH */
    12.         IOCON_PinMuxSet(IOCON, 0, 11, (IOCON_FUNC1 | IOCON_MODE_PULLUP | IOCON_GPIO_MODE | IOCON_DIGITAL_EN));  /* SPI3_SCK        */
    13.         IOCON_PinMuxSet(IOCON, 0, 12, (IOCON_FUNC1 | IOCON_MODE_PULLUP | IOCON_GPIO_MODE | IOCON_DIGITAL_EN));  /* SPI3_MOSI       */
    14.         IOCON_PinMuxSet(IOCON, 0, 13, (IOCON_FUNC1 | IOCON_MODE_PULLUP | IOCON_GPIO_MODE | IOCON_DIGITAL_EN));  /* SPI3_MISO       */
    15.         
    16.         SPI_MasterGetDefaultConfig(&masterConfig);
    17.         masterConfig.direction = kSPI_MsbFirst;
    18.         masterConfig.polarity = kSPI_ClockPolarityActiveHigh;
    19.         masterConfig.phase = kSPI_ClockPhaseFirstEdge;
    20.         masterConfig.baudRate_Bps = 100000;
    21.         masterConfig.sselNum = (spi_ssel_t)2; // use GPIO as CS is prefer
    22.         SPI_MasterInit(SPI3, &masterConfig, CLOCK_GetFreq(kCLOCK_Flexcomm3));
    23. }

    24. status_t spi_oled_exchange(uint8_t *in, uint8_t *out, uint32_t size)
    25. {
    26.         spi_transfer_t         xfer;

    27.         /* SPI master start transfer */
    28.         xfer.txData                 = in;
    29.         xfer.rxData                 = out;
    30.         xfer.dataSize                = size;
    31.         xfer.configFlags        = kSPI_FrameAssert;
    32.         return SPI_MasterTransferBlocking(SPI3, &xfer);        
    33. }
    复制代码
    除了显示数字和字符外,通过取模软件也可以显示汉字的。
    1. /* Init board hardware. */
    2.         /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
    3.         CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

    4.         BOARD_InitPins();
    5.         BOARD_BootClockRUN();
    6.         BOARD_InitDebugConsole();
    7.         
    8.         SystemCoreClockUpdate();
    9.         
    10.         SysTick_Config(SystemCoreClock/1000);
    11.         
    12.         PRINTF("\r\n-------------------------------\r\n\r\n");
    13.         PRINTF("hello world.\r\n");
    14.         PRINTF("LPC54110 Sys Clock is %dMhz.\r\n", SystemCoreClock/1000000);
    15.         PRINTF("\r\n-------------------------------\r\n");
    16.         
    17.   CLOCK_EnableClock(kCLOCK_InputMux);
    18.   CLOCK_EnableClock(kCLOCK_Iocon);
    19.   CLOCK_EnableClock(kCLOCK_Gpio0);
    20.   CLOCK_EnableClock(kCLOCK_Gpio1);
    21.         
    22. //        HC595Init();
    23.         SPI_oled_Init();
    24. //        I2C_oled_Init();
    25.         led_init();
    26.         key_init();
    27.         
    28.         HAL_Delay(10);        
    29.   OLED_Init();        
    30.   OLED_Clear();
    31.         PRINTF("\r\n111111111111111111111111111\r\n");
    32.                 OLED_Clear();
    33.                 OLED_ShowCHinese(0,0,0);
    34.                 OLED_ShowCHinese(16,0,1);
    35.                 OLED_ShowCHinese(32,0,2);
    36.                 OLED_ShowCHinese(48,0,3);
    37.                 OLED_ShowCHinese(64,0,4);
    38.                 OLED_ShowCHinese(80,0,5);
    39.                 OLED_ShowCHinese(96,0,6);
    40.                 OLED_ShowCHinese(112,0,7);
    41.                 OLED_ShowString(0, 2, (char *)&str1, 16);
    42.                 OLED_ShowString(0, 4, (char *)&str2, 16);
    43.                 OLED_ShowString(0, 6, (char *)&str3, 16);
    复制代码

    上一张效果图,本来还打算以IIC的方式来驱动的,顺便熟悉一下IIC的操作不知道是不是哪里没配置好,还没有成功。

    IMG_20170406_212431.jpg



    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-17 08:07
  • 签到天数: 273 天

    连续签到: 1 天

    [LV.8]以坛为家I

    74

    主题

    2338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7508
    最后登录
    2021-8-30
    发表于 2017-4-6 22:08:45 | 显示全部楼层
    楼主厉害,硬件SPI驱动OLED还是社区第一次吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-4-6 22:22:22 | 显示全部楼层
    赞赞赞啊
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2017-4-7 07:10:25 | 显示全部楼层
    玩的真快,已驱显成功了,恭喜
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-11-15 10:33
  • 签到天数: 79 天

    连续签到: 1 天

    [LV.6]常住居民II

    89

    主题

    2169

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    1779
    最后登录
    2020-8-22
    发表于 2017-4-7 09:46:10 | 显示全部楼层
    赞赞赞
    签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
     楼主| 发表于 2017-4-7 21:33:08 | 显示全部楼层
    anny 发表于 2017-4-6 22:08
    楼主厉害,硬件SPI驱动OLED还是社区第一次吧

    大神见笑了。
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
     楼主| 发表于 2017-4-7 21:33:44 | 显示全部楼层

    谢谢支持。
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
     楼主| 发表于 2017-4-7 21:34:25 | 显示全部楼层
    zhjb1 发表于 2017-4-7 07:10
    玩的真快,已驱显成功了,恭喜

    大家都玩起来。
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
     楼主| 发表于 2017-4-7 21:35:08 | 显示全部楼层

    都玩起来才有意思。
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    6 小时前
  • 签到天数: 1779 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    54

    主题

    4379

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    9184
    最后登录
    2025-7-21
    发表于 2017-12-5 15:48:36 | 显示全部楼层
    写得不错,看看,学习下。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 16:43 , Processed in 0.105141 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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