查看: 6249|回复: 5

[原创] 【LPC11U68】OLED屏显示与A/D采样

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7094
    最后登录
    2023-4-20
    发表于 2018-11-19 15:56:23 | 显示全部楼层 |阅读模式
    本帖最后由 jinglixixi 于 2018-11-19 16:01 编辑

          前面介绍了LCD5110屏的显示方法,这次再介绍一下如何使用SPI接口的OLED屏,并实现A/D采样值的显示。

    1)SPI_OLED屏显示
          为充分利用Arduino UNO扩展接口,这次还是用它来与OLED屏来进行连接,其连接关系如下:
    GND--GND
    VCC --P1.29
    SCLK--P0.8  D0
    DIN --P0.9  D1
    RST --P0.2
    DC --P2.3
    CS --P1.28

          之所以用P1.29来充当电源是因为OLED的电源引脚与板上提供的电源引脚正相反,无奈之下只好错位使用了。
    对应相应引脚输出高低电平的语句为:
    #define  LCD_LED_H              Chip_GPIO_SetPinState(LPC_GPIO, 1, 29, 1);

    #define OLED_SCLK_Clr()        Chip_GPIO_SetPinState(LPC_GPIO, 0, 8, 0);
    #define OLED_SCLK_Set()      Chip_GPIO_SetPinState(LPC_GPIO, 0, 8, 1);

    #define OLED_SDIN_Clr()        Chip_GPIO_SetPinState(LPC_GPIO, 0, 9, 0);
    #define OLED_SDIN_Set()      Chip_GPIO_SetPinState(LPC_GPIO, 0, 9, 1);

    #define OLED_RST_Clr()         Chip_GPIO_SetPinState(LPC_GPIO, 0, 2, 0);
    #define OLED_RST_Set()        Chip_GPIO_SetPinState(LPC_GPIO, 0, 2, 1);

    #define OLED_DC_Clr()           Chip_GPIO_SetPinState(LPC_GPIO, 2, 3, 0);
    #define OLED_DC_Set()          Chip_GPIO_SetPinState(LPC_GPIO, 2, 3, 1);

    #define OLED_CS_Clr()           Chip_GPIO_SetPinState(LPC_GPIO, 1, 28, 0);
    #define OLED_CS_Set()         Chip_GPIO_SetPinState(LPC_GPIO, 1, 28, 1);


            配置相关引脚为输出引脚的函数为:
    1. void LCD_GPIO_Cogfig(void)
    2. {
    3. Chip_GPIO_SetPinDIROutput(LPC_GPIO, 1, 29);
    4. Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 8);
    5. Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 9);
    6. Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 2);
    7. Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2, 3);
    8. Chip_GPIO_SetPinDIROutput(LPC_GPIO, 1, 28);
    9. LCD_LED_H;
    10. }
    复制代码

            测试显示情况的主程序为:
    1. int main(void)
    2. {
    3. SystemCoreClockUpdate();
    4. Board_Init();
    5. OLED_Init();
    6. OLED_Clear();
    7. OLED_ShowString(8,0,"LPC11U68");
    8. OLED_ShowString(8,2,"OLED TEST");
    9. OLED_ShowString(8,4,"JINGLIXIXI");  
    10. OLED_ShowString(8,6,"2018/11/18");
    11. while (1);
    12. return 0;
    13. }
    复制代码


    2)A/D采样显示
          有了OLED屏的显示功能,我们可以结合例程所提供温度检测程序来实现数据的直观显示,其效果如下图所示,其中第一个数据为本轮的最近采样值,第二个数据为本轮的最初采样值。
    图片1.png
    A/D采样显示效果

            实现上面显示效果的主程序为:
    1. int main(void)
    2. {
    3. uint32_t rawSample;
    4. SystemCoreClockUpdate();
    5. Board_Init();
    6. OLED_Init();
    7. OLED_Clear();
    8. OLED_ShowString(8,0,"LPC11U68");
    9. OLED_ShowString(8,2,"Temperature");
    10. Chip_ADC_Init(LPC_ADC, 0);
    11. Chip_ADC_SetClockRate(LPC_ADC, 250000);
    12. Chip_ADC_SetupSequencer(LPC_ADC, ADC_SEQA_IDX, (ADC_SEQ_CTRL_CHANSEL(0) |ADC_SEQ_CTRL_MODE_EOS));
    13. Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_TS_PD);
    14. Chip_ADC_SetTrim(LPC_ADC, ADC_TRIM_VRANGE_HIGHV);
    15. Chip_ADC_StartCalibration(LPC_ADC);
    16. while (!(Chip_ADC_IsCalibrationDone(LPC_ADC))) {}
    17. Chip_ADC_ClearFlags(LPC_ADC, Chip_ADC_GetFlags(LPC_ADC));
    18. Chip_ADC_EnableInt(LPC_ADC, ADC_INTEN_SEQA_ENABLE);
    19. NVIC_EnableIRQ(ADC_A_IRQn);
    20. Chip_ADC_EnableSequencer(LPC_ADC, ADC_SEQA_IDX);
    21. SysTick_Config(SystemCoreClock / TICKRATE_HZ);
    22. while(1) {
    23. if (tempCycleComplete()) {
    24. rawSample = tempGetSample();
    25. if ((rawSample & ADC_SEQ_GDAT_DATAVALID) != 0) {
    26. OLED_ShowNum(0,4,ADC_DR_RESULT(rawSample),6,16);  //0xfff=4095
    27. OLED_ShowNum(0,6,ADC_DR_RESULT(temp[0]),6,16);
    28. }
    29. else {
    30. OLED_ShowString(8,6,"Invalid");
    31. }
    32. }
    33. }
    34. return 0;
    35. }
    复制代码



    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-11 19:59
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    3

    主题

    27

    帖子

    1

    注册会员

    Rank: 2

    积分
    190
    最后登录
    2019-1-25
    发表于 2018-11-24 15:00:39 | 显示全部楼层
    我有一块一样的屏幕,学习一下,哈哈哈
    做人,最重要的就是开心啦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-11 19:59
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    3

    主题

    27

    帖子

    1

    注册会员

    Rank: 2

    积分
    190
    最后登录
    2019-1-25
    发表于 2018-11-25 13:05:18 | 显示全部楼层
    我照着你这个改了一版文件,屏幕点不亮,能不能帮我瞅瞅看问题出在哪里?
    1543122090(1).jpg

    demos_switch_blinky.zip

    240 KB, 下载次数: 4, 下载积分: 威望 1

    程序

    做人,最重要的就是开心啦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7094
    最后登录
    2023-4-20
     楼主| 发表于 2018-11-26 10:48:41 | 显示全部楼层
    tthmy 发表于 2018-11-25 13:05
    我照着你这个改了一版文件,屏幕点不亮,能不能帮我瞅瞅看问题出在哪里? ...

    你看看这个。

    main.c.rar

    4.25 KB, 下载次数: 9, 下载积分: 威望 1

    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    3 天前
  • 签到天数: 1481 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92877
    最后登录
    2024-4-30
    发表于 2018-11-26 10:55:34 | 显示全部楼层
    我以前也有一个这样的屏,资料弄没了,用SPI的话,哪个是MISO,哪个是MOSI?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7094
    最后登录
    2023-4-20
     楼主| 发表于 2018-11-26 11:04:42 | 显示全部楼层
    stm1024 发表于 2018-11-26 10:55
    我以前也有一个这样的屏,资料弄没了,用SPI的话,哪个是MISO,哪个是MOSI? ...

    将DIN --P0.9  D1做MOSI用。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-3 20:06 , Processed in 0.133092 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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