查看: 2111|回复: 1

[原创] 【LPC11U68】机智云功能板的控制(3)

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

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7094
    最后登录
    2023-4-20
    发表于 2018-11-22 11:09:06 | 显示全部楼层 |阅读模式
    本帖最后由 jinglixixi 于 2018-11-22 11:13 编辑

           机智云功能板提供了DHT11温湿度传感器和OLED显示屏的接口,其电路原理图如下。
    snap.jpg


               由于其提供的OLED屏接口与常规的OLED屏引脚有所差异,因此需要自行将NC引脚与3.3V引脚连接起来。
        经转换,相关引脚与MCU的连接关系如下:
        DHT11 --- P1.24
        DIN  --- P0.9
        CLK  --- P1.29
        CS   --- P0.2
        D/C  --- P2.3
        RES  --- P1.28

          向OLED屏输出高低电平的语句为:
    #defineOLED_SCLK_Clr()       Chip_GPIO_SetPinState(LPC_GPIO, 0, 9, 0);
    #defineOLED_SCLK_Set()      Chip_GPIO_SetPinState(LPC_GPIO, 0, 9, 1);
    #defineOLED_SDIN_Clr()       Chip_GPIO_SetPinState(LPC_GPIO, 1, 29,0);  
    #defineOLED_SDIN_Set()      Chip_GPIO_SetPinState(LPC_GPIO, 1, 29, 1);
    #defineOLED_RST_Clr()        Chip_GPIO_SetPinState(LPC_GPIO, 0, 2, 0);
    #defineOLED_RST_Set()       Chip_GPIO_SetPinState(LPC_GPIO, 0, 2, 1);
    #defineOLED_DC_Clr()         Chip_GPIO_SetPinState(LPC_GPIO, 2, 3, 0);
    #defineOLED_DC_Set()        Chip_GPIO_SetPinState(LPC_GPIO, 2, 3, 1);
    #defineOLED_CS_Clr()          Chip_GPIO_SetPinState(LPC_GPIO, 1, 28, 0);
    #defineOLED_CS_Set()         Chip_GPIO_SetPinState(LPC_GPIO, 1, 28, 1);

    OLED屏的引脚配置函数为:
    1. voidLCD_GPIO_Cogfig(void)
    2. {
    3.          Chip_GPIO_SetPinDIROutput(LPC_GPIO, 1,29);
    4.          Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0,9);
    5.          Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0,2);
    6.          Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2,3);
    7.          Chip_GPIO_SetPinDIROutput(LPC_GPIO, 1,28);
    8. }
    复制代码

    #defineDHT11_IO_PIN            24
    #defineDHT11_IO_PORT          1

    // SetGPIO Direction
    #defineDHT11_IO_IN()                     Chip_GPIO_SetPinDIRInput(LPC_GPIO,DHT11_IO_PORT, DHT11_IO_PIN)
    #defineDHT11_IO_OUT()                 Chip_GPIO_SetPinDIROutput(LPC_GPIO,DHT11_IO_PORT, DHT11_IO_PIN)

    // SetData output state
    #defineDHT11_DATA_CLR()            Chip_GPIO_SetPinState(LPC_GPIO,DHT11_IO_PORT, DHT11_IO_PIN, false)
    #defineDHT11_DATA_SET()            Chip_GPIO_SetPinState(LPC_GPIO,DHT11_IO_PORT, DHT11_IO_PIN, true)

    // getDATA input state
    #define     DHT11_DQ_IN                 Chip_GPIO_GetPinState(LPC_GPIO, DHT11_IO_PORT, DHT11_IO_PIN)

    staticuint8_t  us_ticks = 0;

    1. voiddelay_init(uint8_t sysclk)
    2. {
    3.          us_ticks = sysclk;
    4. }
    复制代码

    1. void delay_us(uint32_tnus)
    2. {
    3.          uint32_t ticks;
    4.          uint32_t start_tick, cur_tick,total_tick = 0;
    5.          uint32_t reload_tick =SysTick->LOAD;
    6.          ticks = nus * us_ticks;
    7.          start_tick = SysTick->VAL;
    8.          while (1)
    9.          {
    10.                    cur_tick = SysTick->VAL;
    11.                    if (cur_tick != start_tick)
    12.                    {
    13.                             if (cur_tick <start_tick)
    14.                                      total_tick+= start_tick - cur_tick;
    15.                             else
    16.                                      total_tick+= reload_tick - cur_tick + start_tick;
    17.                             start_tick =cur_tick;
    18.                             if (total_tick >=ticks)
    19.                                      break;
    20.                    }
    21.          }
    22. }
    复制代码

    1. voiddelay_ms(uint16_t nms)
    2. {
    3.          uint16_t i;
    4.          for (i = 0; i < nms; i++)
    5.          delay_us(1000);
    6. }
    复制代码

    温湿度显示的主程序为:
    1. intmain(void)
    2. {
    3.          uint8_t i=0;
    4.          SystemCoreClockUpdate();
    5.          Board_Init();
    6.          SysTick_Config(SystemCoreClock /TICKRATE_HZ1);
    7.          delay_init(SystemCoreClock / 1000000);
    8.          BSP_DHT11_Init();
    9.          OLED_Init();
    10.          OLED_Clear();
    11.          OLED_ShowString(8,0,"LPC11U68");
    12.          OLED_ShowString(8,2,"DHT11TEST");
    13.          OLED_ShowString(8,4,"temp:    C");
    14.          OLED_ShowString(8,6,"humi:    %");
    15.          while (1)
    16.          {
    17.                    BSP_DHT11_Read_Data(&dht_temp,&dht_humi);
    18.                    OLED_ShowNum(48,4,dht_temp,3,16);
    19.                    OLED_ShowNum(48,6,dht_humi,3,16);
    20.                    delay_ms(1000);
    21.          }
    22. }
    复制代码

    N.jpg
    温湿度显示效果

    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:54
  • 签到天数: 823 天

    [LV.10]以坛为家III

    71

    主题

    2454

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5538
    最后登录
    2024-5-8
    发表于 2018-11-23 15:25:06 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-9 05:10 , Processed in 0.114998 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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