[国产单片机] 【东软载波ESF0654 PDS开发板活动】DHT11、RTC和OLED显示

[复制链接]
1443|5
 楼主| hbzjt2011 发表于 2019-12-15 19:02 | 显示全部楼层 |阅读模式
【东软载波ESF0654 PDS开发板活动】DHT11、RTC和OLED显示       

      今天根据SDK里Discovery板子上的DHT11和RTC驱动进行修改,集成到了昨天自己新建的模板程序中,同时增加了OLED模块的驱动程序,进行温湿度、实时时间和LED状态的显示测试。
【一】DHT11和RTC模块:
      该模块的驱动只要对原有SDK程序进行简单移植即可,主要是对IO管脚的配置。这里只列出部分代码,完整的工程代码可以稍后在附件中下载。
dht11.c

  1. /**
  2.   * @defgroup DHT11_Public_Functions dht11 Public Functions
  3.   * [url=home.php?mod=space&uid=247401]@brief[/url]    BSP DHT11 Functions
  4.   * @verbatim
  5. ===============================================================================
  6.               ##### BSP DHT11 Functions #####
  7. ===============================================================================
  8.    [..]   This section provides functions allowing to:
  9.       (+) Initialize bsp dht11.
  10.       (+) get dht11 data.

  11.     @endverbatim
  12.   * @{
  13.   */

  14. /**
  15.   * [url=home.php?mod=space&uid=247401]@brief[/url]  get dht11 data
  16.   * @retval result 1 or 0
  17.   */
  18. uint8_t dht11_read_data(uint8_t *temp, uint8_t *humi)
  19. {
  20.     uint8_t buf[5] = {0};
  21.     uint8_t i;

  22.     dht11_reset();

  23.     if (dht11_check() == 0)
  24.     {
  25.         for (i = 0; i < 5; i++)
  26.             buf[i] = dht11_read_byte();

  27.         if ((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])
  28.         {
  29.             *humi = buf[0];
  30.             *temp = buf[2];
  31.         }
  32.     }
  33.     else
  34.         return 1;

  35.     return 0;
  36. }

  37. /**
  38.   * @brief  init dht11
  39.   * @retval result 1 or 0
  40.   */
  41. uint8_t dht11_init(void)
  42. {
  43.     dht11_pin_init();
  44.     ald_delay_ms(100);
  45.     dht11_reset();

  46.     return dht11_check();
  47. }
rtc.c

  1. /**
  2.   * @brief  rtc module initialize function
  3.   * @retval None
  4.   */
  5. void rtc_init(void *rtc_param)
  6. {
  7.     rtc_param_t *p_rtc = (rtc_param_t *)rtc_param;

  8.     /* Initialize RTC */
  9.     p_rtc->init.asynch_pre_div  = 0;
  10.     p_rtc->init.synch_pre_div   = 32767;
  11.     p_rtc->init.hour_format     = RTC_HOUR_FORMAT_24;
  12.     p_rtc->init.output          = RTC_OUTPUT_DISABLE;
  13.     p_rtc->init.output_polarity = RTC_OUTPUT_POLARITY_HIGH;
  14.     ald_rtc_init(&p_rtc->init);

  15.     /* Set current time and date */
  16.     p_rtc->time.hour    = 18;
  17.     p_rtc->time.minute  = 31;
  18.     p_rtc->time.second  = 43;
  19.     p_rtc->time.sub_sec = 123;
  20.     p_rtc->date.day     = 15;
  21.     p_rtc->date.month   = 12;
  22.     p_rtc->date.year    = 19;
  23.     p_rtc->date.week    = 7;
  24.     ald_rtc_set_time(&p_rtc->time, RTC_FORMAT_DEC);
  25.     ald_rtc_set_date(&p_rtc->date, RTC_FORMAT_DEC);

  26.     /* Enable second interrupt */
  27.     ald_rtc_interrupt_config(RTC_IT_SEC, ENABLE);
  28. }

【二】OLED显示屏模块:

       我这里使用了OLED12864显示液晶,采用模拟IIC进行驱动,便于程序的移植。
  1. int main()
  2. {
  3.         /* Initialize ALD */
  4.         ald_cmu_init();
  5.         /* Configure system clock */
  6.         ald_cmu_pll1_config(CMU_PLL1_INPUT_HOSC_3, CMU_PLL1_OUTPUT_48M);
  7.         ald_cmu_clock_config(CMU_CLOCK_PLL1, 48000000);
  8.         
  9.         /* Initialize tx_buf */
  10.         memset(tx_buf, 0x55, sizeof(tx_buf));

  11.         /* Initialize uart_usb */
  12.         uart_usb_init();
  13.         
  14.         /* Initialize led */
  15.         led_pin_init();
  16.         
  17.         /* Initialize led */
  18.         dht11_init();
  19.         
  20.         /* Initialize oled */
  21.         OLED_Init();
  22.         
  23.         /* Initialize rtc */
  24.         rtc_init(&rtc_h);

  25.         while (1) {
  26.                 /* Send a message */
  27.                 //sprintf((char *)tx_buf, "es32 uart test!\n");
  28.                 //ald_uart_send(&h_uart, tx_buf, sizeof("es32 uart test!\n"), 1000);
  29.                
  30.                 /* LED灯测试 */
  31.                 cnt++;
  32.                 if(cnt == 5)
  33.                 {
  34.                         ald_gpio_write_pin(LED1_PORT, LED1_PIN, 0);
  35.                         ald_gpio_write_pin(LED2_PORT, LED2_PIN, 0);
  36.                         sprintf((char *)tx_buf, "LED ON ");
  37.                         OLED_P8x16Str(0u,4u,(uint8_t *)tx_buf);
  38.                         //ald_delay_ms(1000);                        
  39.                 }else if(cnt == 10)
  40.                 {
  41.                         ald_gpio_write_pin(LED1_PORT, LED1_PIN, 1);
  42.                         ald_gpio_write_pin(LED2_PORT, LED2_PIN, 1);
  43.                         sprintf((char *)tx_buf, "LED OFF");
  44.                         OLED_P8x16Str(0u,4u,(uint8_t *)tx_buf);
  45.                         //ald_delay_ms(1000);
  46.                         cnt = 0;                        
  47.                 }
  48.                
  49.                 /* DHT11温湿度传感器测试 */
  50.                 dht11_read_data(&temp, &humi);
  51.                 sprintf((char *)tx_buf, "Temp: %d Humi: %d \n", temp, humi);
  52.                 ald_uart_send(&h_uart, tx_buf, sizeof("Temp: %d Humi: %d \n"), 1000);
  53.                
  54.                 /* RTC测试 */
  55.                 ald_rtc_get_time(&rtc_v, RTC_FORMAT_DEC);
  56.                 sprintf((char *)tx_buf, "Time:%02d-%02d-%02d", rtc_v.hour, rtc_v.minute, rtc_v.second);
  57.                 OLED_P8x16Str(0u,6u,(uint8_t *)tx_buf);
  58.                
  59.                 /* OLED显示屏测试 */
  60.                 OLED_P8x16Str(0u,0u,(uint8_t *)"ES32 PDS BOARD");
  61.                 sprintf((char *)tx_buf, "Temp:%d Humi:%d", temp, humi);
  62.                 OLED_P8x16Str(0u,2u,(uint8_t *)tx_buf);
  63.                 //OLED_P8x16Str(0u,6u,(uint8_t *)"Date:2019-12-15");
  64.         }
  65. }
OLED显示效果和串口调试打印输出如下:


完整工程源代码:
游客,如果您要查看本帖隐藏内容请回复


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
desk1983 发表于 2019-12-24 10:04 | 显示全部楼层
yljon 发表于 2020-4-13 22:05 | 显示全部楼层
mediaclassic 发表于 2020-4-14 08:24 | 显示全部楼层
nvjwiciw659 发表于 2020-6-14 01:17 | 显示全部楼层
楼主棒,最近要用oled,多谢楼主分享
Dekker123 发表于 2020-6-22 10:40 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎参与LabVIEW版块的讨论学习! 点我一键即达

255

主题

2826

帖子

44

粉丝
快速回复 在线客服 返回列表 返回顶部